Update Problem

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

  • Update Problem

    Guten Tag,

    dies ist mein erster Beitrag, ich bin auch nur gelegenheits php"tipper". Man nennt das Beginner

    ich möchte ein Update durchführen, bisher habe ich immer nur eine Zeile geändert und dies klappte auch.

    Jetzt bekommen ich über eine Abfrage X Id-Werte zurück und ich wollte in sämmtliche Zeilen die diese Id habe eine Spalte ändern.

    Mein Versuch sah so aus.
    PHP-Code:
    <input name="code" type="text" value="<?php echo $row_abfrage1['code']; ?>"   />
    So bekam ich aber nur einen Wert zurück. Ich habe es dann so versucht.
    PHP-Code:
    <?php do { ?>
    <input name="code" type="text" value="<?php echo $row_abfrage1['code']; ?>"   />            
    <?php } while ($row_abfrage1 mysql_fetch_assoc($qabfrage1)); ?>
    Jetzt bekomme ich das Textfeld x-mal angezeigt mit unterschiedlichen code.

    Mein update wollte ich wie Immer machen
    Update.....
    PHP-Code:
    SET 
    mb 
    '$mb'
    WHERE code '".$_POST['code']."' 
    ...

    das geht so nicht.

    Ich denke ich mache schon den Ersten Fehler beim Textfeld (soll noch hidden werden)
    Aber ich habe keine Idee wie ich das machen könnte.

    Ich bedanke mich für die Hilfe.
    Micha
    Zuletzt geändert von Micha61; 15.12.2005, 14:32.

  • #2
    Du mußt natürlich jedem Input einen anderen Namen geben! Also nicht jedesmal "Code". Am besten eine Zählervariable bei 1 beginnen lassen und in jedem Schleifendurchlauf eins hochsetzen.

    Ans Ende des Ganzen setzt Du dann ein weiteres Hidden-Feld, das die Anzahl der ausgegebenen Felder beinhaltet. Das Update führst Du dann mit einer FOR-Schleife durch, die von 1 bis zur Anzahl der im vorigen Formular ausgegebenen Felder hochzählt.

    Kommentar


    • #3
      Wäre nett, wenn Du in Deinem Beitrag die Code-Schnipsel noch mit den [ PHP]- Tags für Syntaxhighlighting ergänzen könntest.

      Mach mal aus der do ..while Schleife eine while () {}, weil der erste Datensatz sonst leer ist.

      Entweder solltest Du an den Namen von Deinem input-Feld noch eine Zählvariable in der Form
      PHP-Code:
      <input name="code_<? echo $i ?>" type="text"
      Die Update-Abfrage musst Du dann entsprechend anpassen.
      Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

      Kommentar


      • #4
        Hallo thommyk und pekka,

        danke für die Antworten.
        Ich wollte jetzt gerade schreiben das mit dem Zähler verstanden habe.
        PHP-Code:
        <?php 
        $i 
        ;   do {    $i++ ;  ?>
        <input name="code<? echo $i ?>"  type="text" 
        value="<?php echo $row_abfrage1['code']; ?>" /> 
        <?php 
        } while ($row_abfrage1 mysql_fetch_assoc($qabfrage1)); 
        ?>
        aber wie das Update aussehen muss Weiß ich überhaupt nicht.

        Vielen Dank
        Zuletzt geändert von Micha61; 15.12.2005, 14:31.

        Kommentar


        • #5
          Mach mal bitte bei Deinem ersten Beitrag noch die PHP-Tags rein und brich bei Deinem zweiten Beitrag den Code um, der ist zu breit.

          Wie das mit dem Update geht, hat Pekka doch geschrieben
          Ans Ende des Ganzen setzt Du dann ein weiteres Hidden-Feld, das die Anzahl der ausgegebenen Felder beinhaltet. Das Update führst Du dann mit einer FOR-Schleife durch, die von 1 bis zur Anzahl der im vorigen Formular ausgegebenen Felder hochzählt.
          PHP-Code:
          $anzahl $POST['anzahl'];
          for (
          $i=0$i$anzahl$i++) {
              
          $query "Update.....SET mb = '$mb'
              WHERE code = '"
          .$_POST['code'.$i]."'...";
              
          mysql_query($query, ..);
          //end for 
          Eleganter wäre das
          PHP-Code:
          $anzahl $POST['anzahl'];
          for (
          $i=0$i$anzahl$i++) {
              
          $codeValues[] = $_POST['code'.$i];
          //end for
          $query "Update.....SET mb = '$mb' "
          ."WHERE code IN ('".implode(','$CodeValues)."')...";
          mysql_query($query, ..); 
          Da brauchst Du nur eine Abfrage :-) statt vieler.
          Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

          Kommentar


          • #6
            Hallo thommyk,

            ich möchte mich bedanken, ich habe die erste Variante genommen, mit der 2. kam ich nicht so klar. (Das sind wirklich meine ersten Versuche in PHP)
            PHP-Code:
            $anzahl $_POST['anzahl'];
            for (
            $i=1$i<= $anzahl$i++) {
            mysql_select_db($database_gem$gem);
            $query_qupdatenavigation "UPDATE navigation
                    SET 
                    mb = '
            $mb
                    WHERE code = '"
            .$_POST['code'.$i]."'";
            $updatenavigation mysql_query($query_qupdatenavigation,$gem) or die(mysql_error());} //end for 
            ich musste lediglich <= nehmen, da sonst der letzte Datensatz nicht einbezogen wurde.

            in der 2. Variante kamen Fehlermeldungen in dieser Zeile.
            PHP-Code:
            WHERE code IN ('".implode(',', $CodeValues)."')..."; 
            Die erste Variante konnte ich nachvollziehen, die 2. leider nicht.

            Vielen Dank
            Micha

            Kommentar


            • #7
              jau stimmt, muss
              PHP-Code:
              WHERE code IN ('".implode("','", $CodeValues)."')"; 
              heissen

              Also, in der zweiten Variante speicherst Du alle Werte für
              code.$i in das Array $codeValues.

              Wenn man mehrere Werte abfragt, kann man das mit
              Code:
              WHERE feld IN ('wert1', 'wert2', 'wert3')
              Mit dem implode holst Du alle Werte wieder aus dem Array und schreibst jeweils ',' dazwischen, also sollte am Ende sowas wie
              PHP-Code:
               WHERE `codeIN ('xxx''yyy''zzz'
              rauskommen

              P.S. Hab übersehen, dass Dein Zähler erst bei 1 anfängt.
              Ausserdem wette ich mit Dir, das der Wert des ersten input-Feldes immer leer ist, weil beim ersten Schleifendurchlauf $row noch gar nicht zugewiesen ist.

              mach mal
              PHP-Code:
              while ($row mysql_fetch_assoc()) {

              Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

              Kommentar


              • #8
                Guten Morgen,

                danke für die ausführliche Hilfe, mit Hilfe vom php manual konnte ich auch implode nachvollziehen und es klappt.

                [i]P.S. ....
                Ausserdem wette ich mit Dir, das der Wert des ersten input-Feldes immer leer ist, weil beim ersten Schleifendurchlauf $row noch gar nicht zugewiesen ist.

                mach mal
                PHP-Code:
                while ($row mysql_fetch_assoc()) {

                [/B]
                Ich bin jetzt ein wenig verwirrt, wenn ich es so mache wird der erste Wert ausgelesen.
                So den Formularteil...
                PHP-Code:
                <?php 
                $i 
                ;   
                do {    
                $i++ ;  
                ?>
                <input name="code<? echo $i ?>"  type="text" 
                value="<?php echo $row_abfrage1['code']; ?>" /> 
                <?php 
                } while ($row_abfrage1 mysql_fetch_assoc($qabfrage1)); 
                ?>
                ...
                und dann das Update wie beschrieben, das klappt.

                Vielen Dank
                Micha

                Kommentar


                • #9
                  Gehen wir doch mal Deinen Code Schritt für Schritt durch

                  PHP-Code:
                  $i = 1;
                  do {    
                  $i++ ;  
                  ?>
                  <input name="code<? echo $i ?>"  type="text" 
                  value="<?php echo $row_abfrage1['code']; ?>" /> 
                  <?php 
                  } while ($row_abfrage1 mysql_fetch_assoc($qabfrage1));
                  Im ersten Durchlauf nach dem do ist $i = 2
                  Dann machst Du echo $row_abfrage1['code']
                  Wo soll der Wert für $row_abfrage1 herkommen?
                  $row_abfrage1 wird doch erst am Ende in der while-Bedingung gesetzt.
                  Wenn Du dir den Quelltext anschaust müsste es so aussehen:
                  PHP-Code:
                  <input name="code2"  type="text" value="">
                  <
                  input name="code3"  type="text" value="xxxxx1">
                  <
                  input name="code4"  type="text" value="xxxxx2">
                  .... 
                  wobei xxxx1, xxxx2 die Werte aus Deiner Abfrage sind.

                  Mein Vorschlag wäre
                  PHP-Code:
                  $i = 1;
                  while ($row_abfrage1 = mysql_fetch_assoc($qabfrage1)) {
                  ?>
                     <input name="code<? echo $i ?>"  type="text" 
                     value="<?php echo $row_abfrage1['code']; ?>" /> 
                     <?php 
                     $i
                  ++ ;  
                  }
                  Dann wird $row_abfrage1 am Anfang jedes Schleifendurchlaufs gesetzt.
                  Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                  Kommentar


                  • #10
                    Hallo thommyk,

                    du hast Recht, ich hatte mir den Quellcode auch angesehen, aber ich belommme den ersten Wert nicht.
                    Schreibe ich so
                    PHP-Code:
                    $i 1;
                    while (
                    $row_abfrage1 mysql_fetch_assoc($qabfrage1)) {
                    .... 
                    sieht es aus
                    PHP-Code:
                    <input name="code1" type="text" value="A122"   />
                    <
                    input name="code2" type="text" value="A829"   />
                    <
                    input name="code3" type="text" value="A830"   /> 
                    Schreibe ich es do/while
                    PHP-Code:
                    <input name="code2" type="text" value="A121"   />
                    <
                    input name="code3" type="text" value="A122"   />
                    <
                    input name="code4" type="text" value="A829"   />
                    <
                    input name="code5" type="text" value="A830"   /> 
                    aber ich habe alle Datensätze.

                    Vielleicht stelle ich mich blöd an, sorry.

                    Vielen Dank
                    Micha

                    Kommentar


                    • #11
                      Machst Du vorher schon irgendwo
                      PHP-Code:
                      $row_abfrage1 mysql_fetch_assoc($qabfrage1); 
                      ?
                      Irgendwoher kommt ja der erste Wert
                      Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                      Kommentar


                      • #12
                        Hallo thommyk,

                        eigentlich nicht,
                        ich habe ein Änderungsformular wo ein ein Code übergeben wird der dann die POST_Var für die Abfrage ist.
                        Auf dem Bestätigungsteil habe ich dann das Formular worüber wir schreiben (Diese Felder sollen ja noch hidden werden)

                        Übergebe ich vom Änderungsformular B1 bekomme ich im Bestätigungsteil A121, A122, A829, A830. Diese Abfrage stimmt.
                        PHP-Code:
                        $ncode addslashes($_POST['fcode'])
                        mysql_select_db($database_gem$gem);
                        $query_abfrage1 "SELECT * FROM navigation WHERE ue = '$ncode'";
                        $abfrage1 mysql_query($query_abfrage1$gem) or die(mysql_error());
                        $row_abfrage1 mysql_fetch_assoc($abfrage1);
                        $totalRows_abfrage1 mysql_num_rows($abfrage1); 
                        Wie gesagt ich klicke auf Submit vom Änderungsformular, Wert wird übergeben und ich komme im Bestätigungsteil zu diesem:
                        PHP-Code:
                        if($_POST['submit1'] && !count($fehler) {
                        ............
                        <form...

                        $i = 1;
                        do {    
                        $i++ ;  
                        ?>
                        <input name="code<? echo $i ?>"  type="text" 
                        value="<?php echo $row_abfrage1['code']; ?>" /> 
                        <?php 
                        } while ($row_abfrage1 mysql_fetch_assoc($qabfrage1)); 


                        ......
                        }
                        Das ist alles.
                        Ich danke Dir und wünsche ein schönes WE aus Brandenburg.

                        Kommentar

                        Lädt...
                        X