Update pro Zeile ausführen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Update pro Zeile ausführen

    Hallo...

    Ich beschäftige mich nun schon seit ein paar Wochen mit PHP und versuche ein einfaches Lagerhaltungsprogramm zu entwickeln

    Bis jetzt hat auch alles ganz gut funktioniert:


    Was leider nicht geht, ist das Entnahme Form am Ende jeder Zeile.

    Hier der Ausschnitt aus meinem Script:
    PHP-Code:
    <?
    $db=@mysql_connect("localhost","","");
    $select=@mysql_select_db("DB42517",$db);

    // Entnahme Script:
    if($entnahme) {
    // Wenn der Submit-Button geklickt wurde ...

    // die Anzahl der markierten Datensaetze ermitteln
    $r=count($entnahmen);
        // Für jeden markierten Datensatz
        // den update-Befehl aufrufen.
        for($a=0;$a<$r;$a++) {
        mysql_query("UPDATE Verbrauchsmaterial SET Bestand='$Bestand'-'$entnahme'
    where ID='$entnahmen[$a]'");
            }
    }


      // Daten anzeigen
      while($row=mysql_fetch_array($result,MYSQL_ASSOC)) {
      $ID=$row["ID"];
      $Name=$row["Name"];
      $Ablage=$row["Ablage"];
      $Bestand=$row["Bestand"];
      $Min=$row["Min"];
      $Soll=$row["Soll"];
       ?>
       
       <tr bgcolor="#FFFFCC">
          <td width="30">
            <input type="checkbox" name="loeschen[]" 
    value="<? echo $ID ?>">
          </td>
          <td><? echo $Name, $mindest?></td>
          <td><? echo $Ablage ?></td>
          <td align="right"><? echo $Bestand ?></td>
          <td align="right"><? echo $Min ?></td>
          <td align="right"><? echo $Soll ?></td>
          <td align="right"><INPUT Type="text"  Name="entnahmen[<? echo $ID ?>]" size="6"></td>
    <input type="submit" name="löschen" value="Löschen">
    <input type="submit" name="entnahme" value="Entnahme">
    </form>
    <?
    } else {
    echo "Keine Daten gefunden.";
    }
    ?>
    Vielleicht fällt euch auf wo hier der Fehler liegt und wie man es besser machen kann...

    DANKESCHÖN !!

    cu
    Morchel
    Zuletzt geändert von Morchelspender; 25.06.2004, 21:52.

  • #2
    dein button zum löschen wird nicht korrekt geschlossen. auch sind umlaute im namen von elementen nicht sehr sinnvoll.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      ja das stimmt schon...

      Da hab ich einfach zu viel rausgelöscht ...habs schon editiert!

      Aber:
      das ist ja nicht mein Problem.
      Es geht ja um die Möglichkeit den Bestand mit dem UPDATE Befehl und dem Entnahme-Feld neu zu berechnen.

      Ich denke, der Fehler muß in diesem Bereich liegen;
      PHP-Code:
      // Entnahme Script:
      if($entnahme) {
      // Wenn der Submit-Button geklickt wurde ...

      // die Anzahl der markierten Datensaetze ermitteln
      $r=count($entnahmen);
          // Für jeden markierten Datensatz
          // den update-Befehl aufrufen.
          for($a=0;$a<$r;$a++) {
          mysql_query("UPDATE Verbrauchsmaterial SET Bestand='$Bestand'-'$entnahme'
      where ID='$entnahmen[$a]'");
              }
      }

      // ...

      <INPUT Type="text"  Name="entnahmen[<? echo $ID ?>]" size="6">

      //...

      <input type="submit" name="entnahme" value="Entnahme">
      Vielleicht fällt da einem was dazu ein ...DANKESCHÖN !

      cu
      Morchel
      Zuletzt geändert von Morchelspender; 25.06.2004, 21:58.

      Kommentar


      • #4
        Vielleicht fällt da einem was dazu ein
        - welche method im form-tag?
        - register globals, $_GET, $_POST, var_dump ...
        - was passiert?
        Was leider nicht geht, ist das Entnahme Form am Ende jeder Zeile.
        was heißt das genau? beschreibe, was passiert, nicht das, was nicht passiert.
        Ich denke, der Fehler muß in diesem Bereich liegen;
        du denkst? versuchs doch mal einzugrenzen. aus dem anschauen deines quellcodes kann man nur tips ableiten, debuggen mußt du schon selbst.
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          ich kann mir nicht vorstellen, dass sql 2 strings mathematisch berechnen will:
          PHP-Code:
          mysql_query("UPDATE Verbrauchsmaterial SET Bestand='$Bestand'-'$entnahme' where ID='$entnahmen[$a]'"); 
          - mal die query mit echo ausgeben
          - im phpMyAdmin testen
          Kissolino.com

          Kommentar


          • #6
            Also...

            Erstmal Danke für die Antworten.

            1.
            Im Form Tag steht post als method

            2.
            Was passiert siehst du im oben angehängten PIC; Wenn ich eine Zahl in das Textfeld eintrage und auf den Eintrag Button klicke kommt die gleiche Seite wieder aber ohne die gewollten Änderungen.

            Ich hab das Script jetzt mal so geschrieben:
            PHP-Code:
            // Entnahme Script:
            if($entnahme) {
            // Wenn der Submit-Button geklickt wurde ...

            $SQLString="UPDATE Verbrauchsmaterial SET Bestand='$Bestand'-'$entnahmen' WHERE ID='$ID'";
            $Ergebnis=mysql_db_query("DB42517"$SQLString$db);
            echo 
            "Geänderte Datensätze: ",mysql_affected_rows($db);

            }

            <
            INPUT Type="text"  Name="entnahmen" size="6">
            <
            input type="submit" name="entnahme" value="Entnahme"
            So gehts allerdings auch nicht...

            Gruß
            Morchel
            Zuletzt geändert von Morchelspender; 26.06.2004, 00:22.

            Kommentar


            • #7
              So gehts allerdings auch nicht...
              hast du etwas geändert?
              lies mal die antworten!
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Was passiert siehst du im oben angehängten PIC;
                au ja, voll die action in dem bild. sehr aussagekräftig. ehrlich gesagt, interessiert mich die gui nen sch..., es handelt sich doch um ein php-problem?
                Wenn ich eine Zahl in das Textfeld eintrage und auf den Eintrag Button klicke kommt die gleiche Seite wieder aber ohne die gewollten Änderungen.
                [ ] bist du user der seite?
                - wende dich an den programmeirer, schildere das problem
                [ ] bist du programmierer der seite?
                - beschreibe das problem aus programmierersicht, nicht aus usersicht

                edit:
                PHP-Code:
                // Entnahme Script:
                echo '<pre>';
                var_dump($_POST);
                echo 
                '</pre>';
                if(
                $entnahme) {
                // Wenn der Submit-Button geklickt wurde ... 
                Zuletzt geändert von derHund; 26.06.2004, 00:46.
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  OK...

                  Eine nette Antwort...
                  Sorry, daß ich noch nicht ganz zu der Elite der PHP Programmierer gehöre.
                  Sonst würd ich hier wohl kaum diese Fragen stellen.

                  So,
                  var_dump($_POST) liefert diese Ausgabe:
                  PHP-Code:
                   array(2) {
                    [
                  "entnahmen"]=>
                    
                  string(0""
                    
                  ["entnahme"]=>
                    
                  string(8"Entnahme"

                  Ich verstehe dabei nicht, daß die Variable $entnahme" aus dem Submit Button bereits den Wert "Entnahme" liefert, ohne daß dieser geklickt wurde...

                  Gruß
                  Morchel

                  Kommentar


                  • #10
                    Sonst würd ich hier wohl kaum diese Fragen stellen.
                    ist ja kein problem.

                    wenn wir dir dann aber tips geben, wie du vorzugehen hast, um dem problem auf den grund zu gehen, muß du diese erstens lesen! und zwotens auch anwenden.

                    hast du Wurzels post gelesen? und auch entsprechend reagiert?
                    hast du die restlichen posts gelesen? anregungen umgesetzt?

                    nö. haste nicht!

                    und das ist das frustrierende.

                    woher kommt $ID?
                    Zuletzt geändert von derHund; 26.06.2004, 12:21.
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Original geschrieben von Morchelspender
                      Ich verstehe dabei nicht, daß die Variable $entnahme" aus dem Submit Button bereits den Wert "Entnahme" liefert, ohne daß dieser geklickt wurde...
                      wie wird das formular denn dann abgeschickt - wenn der submit-button nicht geklickt wurde ...?

                      (cache-probleme, dass du dir also eine alte version der seite ansiehst, hast du ja hoffentlich ausgeschlossen.)
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Ich hab mir das ganze jetzt nochmal durch den Kopf gehen lassen...

                        Das Form hat ja folgende Form:
                        PHP-Code:
                        <form action="<?php $SELF_PHP?>" method="post">
                        <input type="text" name="entnahmen[]">// Dieser Teil steht am Ende jeder Zeile der Ausgabe Tabelle
                        <input type="submit" name="Entnahme"> //Der Button steht unterhalb der Ausgabetabelle
                        </form>
                        Somit ist jeder Eintrag in das INPUT Feld Teil des Arrays "$entnahmen"

                        Und dann sollte es ja so gehen:
                        PHP-Code:
                        // Entnahme Script:
                        if($Entnahme) {
                        // Wenn der Submit-Button geklickt wurde ...
                        // die Anzahl der markierten Datensaetze ermitteln
                        $r=count($entnahmen);
                            
                        // Für jeden markierten Datensatz
                            // den UPDATE-Befehl aufrufen.
                            
                        for($e=0;$e<$r;$e++) {
                            
                        mysql_query("UPDATE Verbrauchsmaterial SET Bestand='$Bestand'-'$entnahmen[$e]'
                        WHERE ID='
                        $ID[$e]'");//UND HIER IST DAS PROBLEM
                                
                        }
                        }

                        //Ausgabe:
                        while($row=mysql_fetch_array($result,MYSQL_ASSOC)) {
                          
                        $ID=$row["ID"];
                          
                        $Name=$row["Name"];
                          
                        $Ablage=$row["Ablage"];
                          
                        $Bestand=$row["Bestand"];
                        //...// 
                        Beim Klick auf den SUBMIT Button soll dann der Bestand um die Entnahme verringert werden.

                        Mit dem UPDATE Befehl benötige ich aber noch die WHERE Bedingung. Und das ist momentan mein Problem.
                        Da ja nicht jede Zeile geändert werden soll, sondern nur diejenigen, wo auch ein Eintrag in das Textfeld statt gefunden hat.

                        Wenn es sich um Checkboxen handelt ist das kein Problem, dann geb ich der Checkbox einfach als Value die ID (=Primärschlüssel der Datensätze) an und kann dann im UPDATE mich auf die ID beziehen.

                        BSP um Datensätze mittels Checkbox zu löschen:
                        PHP-Code:
                        if($löschen) {
                        // Wenn der Submit-Button geklickt wurde ...

                        // die Anzahl der markierten Datensaetze ermitteln
                        $y=count($loeschen);
                            // Für jeden markierten Datensatz
                            // den delete-Befehl aufrufen.
                            for($x=0;$x<$y;$x++) {
                            mysql_query("delete from Verbrauchsmaterial 
                        where ID='$loeschen[$x]'");
                                }
                        }

                        <form method="post" action="<?php $SELF_PHP?>">
                        <input type="checkbox" name="loeschen[]" value="<? echo $ID ?>">// HIER KANN ICH DIE ID BESTIMMEN
                        <input type="submit" name="löschen" value="Löschen">
                        </form>
                        In einem Textfeld kann ich aber nicht die ID im VALUE übergeben.

                        Wenn ich neben dem Textfeld noch ein "hidden Feld erzeuge in dem die ID angegeben wird...
                        PHP-Code:
                        <input type="hidden" name="ID[]" value="<? echo $ID ?>">
                        Dann hab ich ja auch noch kerinen Bezug zu den Entnahme Feldern, da entnahmen[1] nicht den selben Datensatzbetreffen wie ID[1].

                        Mann ... ich zerbrech mir da echt den Kopf drüber ...

                        Aber vielleicht ist das Problem ja viel einfacher zu lösen ...

                        DANKESCHÖN

                        Gruß
                        Morchel
                        Zuletzt geändert von Morchelspender; 27.06.2004, 17:29.

                        Kommentar


                        • #13
                          Somit ist jeder Eintrag in das INPUT Feld Teil des Arrays "$entnahmen"
                          nei-en. benutze bitte das $_POST.

                          PHP-Code:
                          mysql_query("UPDATE Verbrauchsmaterial SET Bestand='$Bestand'-'$entnahmen[$e]
                          siehe 1.post Wurzel!

                          den rest hab ich nicht kapiert. poste mal bitte den dump des $_POST in einer typischen absende-situation, vielleicht kann ich mir dann vorstellen, wie du das machen willst.

                          Da ja nicht jede Zeile geändert werden soll, sondern nur diejenigen, wo auch ein Eintrag in das Textfeld statt gefunden hat.
                          füll doch in dem input-formular die felder schon vor, mit den entsprechenden werte. dann kannst du immer alle werte eintragen.

                          EDIT:
                          die felder sollten sich auch jeweils per feldname[index] anstatt feldname[] benennen lassen, so übermittelst du die id!?
                          Zuletzt geändert von derHund; 27.06.2004, 18:12.
                          Die Zeit hat ihre Kinder längst gefressen

                          Kommentar


                          • #14
                            Sorry ... aber was meinst du mit $_Post.

                            Diese Vorgehensweise kenn ich nicht ...

                            Danke

                            cu
                            Morchel

                            Kommentar

                            Lädt...
                            X