Ankündigung

Einklappen
Keine Ankündigung bisher.

INSERT in einer WHILE-Schleife

Einklappen

Neue Werbung 2019

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

  • INSERT in einer WHILE-Schleife

    Hallo liebe Profis!

    Ich habe folgendes Problem:

    Ich habe eine WHILE-Schleife, in der für jedes gültige Ergebnis eine Tabellenzeile angezeigt wird. Das klappt soweit auch ganz gut.

    Nun möchte ich in dieser WHILE-Schleife für jedes gültige Ergebnis einen Datensatz anlegen lassen.

    Mein Code dazu:



    PHP-Code:
    <? while ($data = mysql_fetch_array($result)) {?>
    <tr>
    <td align="left"><? echo $date; ?></td>
    <td align="left"><? echo $akt_id=$data[akt_id]; ?> -  <? echo $data[bezeichnung]; ?></td>
    <td align="center"><? echo $art_id; ?></td>
    <td align="right"><? echo number_format($einzel=$data_2[einzel]*$data[faktor],'2',',','.'); ?></td>
    <td align="right"><? echo $anzahl=$data_1[tage]; ?></td>
    <td align="right"><? echo number_format($gesamt=$einzel*$anzahl,'2',',','.'); ?> </td>
    <td align="right"><? echo number_format($steuergesamt=$gesamt/100*$data_2[mwstsatz],'2',',','.') ; ?></td>
    <td align="right"><? echo number_format($total=$gesamt+$steuergesamt,'2',',','.') ; ?></td>
    <td align="left"><? echo $text=$data_2[artbez]." ".$data_1[bezeichnung]." ".$data_1[jahr] ; ?></td>
    </tr>
    <?
    $sql="INSERT INTO ums (art_id, schluessel, akt_id, einzel, anzahl, gesamt, steuergesamt, total, text, rechnr) VALUES ('$art_id', '$schluessel', '$akt_id', '$einzel', '$anzahl', '$gesamt', '$steuergesamt', '$total', '$text', '$rechnr')";
    $insert = mysql_query($sql,$db);
    ?>

    <? } ?>
    Es wird immer nur für das erste Ergebnis ein Datensatz angelegt.

    Wo liegt mein Denkfehler?

    Bin dankbar für Eure Hilfe!

  • #2
    Bitte http://www.php.net/manual/de/languag....array.foo-bar beachten
    und dann mal so versuchen
    PHP-Code:
    <?php
    $insertCounter 
    0;
    while (
    $data mysql_fetch_array($result)) {
    ?>
        ...
    <?php
      $sql
    ="INSERT INTO ...";
      
    $insert mysql_query($sql,$db) or die(mysql_error());
      
    $insertCounter += mysql_affected_rows($db);
    }

    echo 
    '<tr><td>'$insertCounter' Datensätze eingefügt</td></tr>';
    ?>

    Kommentar


    • #3
      Öhm soweit ich weiß geht es "schneller" die Inputs zu sammeln und dann mit einem Schwung rein zuschieben !!!

      Also vllt. nicht mal überlegen ob du das query nicht lieber außerhalb der Schliefe machst .

      Kommentar


      • #4
        Hallo thomas2000, willkommen bei uns im Forum!

        Wenn du dir nicht sicher bist, ob die MySQL Queries ausgeführt werden musst du dir schon die entsprechenden MySQL Queries ausgeben lassen.

        Dies
        PHP-Code:
        <?php
        while (..) {
          
        // ..
          
        var_dump($sql$insertmysql_affected_rows());
        }
        ?>
        sollte das Geheimnis lüften.

        Kommentar


        • #5
          Rat beherzigt

          Danke Zergling (auch für's Verschieben)

          Mein Code sieht nun so aus:

          PHP-Code:
          <? while ($data = mysql_fetch_array($result)) {?>
          <tr>
          <td align="left"><? echo $date; ?></td>
          <td align="left"><? echo $akt_id=$data[akt_id]; ?> -  <? echo $data[bezeichnung]; ?></td>
          <td align="center"><? echo $art_id; ?></td>
          <td align="right"><? echo number_format($einzel=$data_2[einzel]*$data[faktor],'2',',','.'); ?></td>
          <td align="right"><? echo $anzahl=$data_1[tage]; ?></td>
          <td align="right"><? echo number_format($gesamt=$einzel*$anzahl,'2',',','.'); ?> </td>
          <td align="right"><? echo number_format($steuergesamt=$gesamt/100*$data_2[mwstsatz],'2',',','.') ; ?></td>
          <td align="right"><? echo number_format($total=$gesamt+$steuergesamt,'2',',','.') ; ?></td>
          <td align="left"><? echo $text=$data_2[artbez]." ".$data_1[bezeichnung]." ".$data_1[jahr] ; ?></td>
          </tr>

          <?
          if ($data_1[status]==1) {
          $sql="INSERT INTO ums (art_id, schluessel, akt_id, einzel, anzahl, gesamt, steuergesamt, total, text, rechnr) VALUES ('$art_id', '$schluessel', '$akt_id', '$einzel', '$anzahl', '$gesamt', '$steuergesamt', '$total', '$text', '$rechnr')";
          $insert = mysql_query($sql,$db);
          var_dump($sql, $insert, mysql_affected_rows());

          }
           } ?>
          Für das erste gültige Ergebnis wird ein Datensatz angelegt. Für alle anderen Ergebnisse wird folgende Zeile ausgegeben:


          string(220) "INSERT INTO ums (art_id, schluessel, akt_id, einzel, anzahl, gesamt, steuergesamt, total, text, rechnr) VALUES ('126', '4001', '31', '210', '4', '840', '159.6', '999.6', 'Standmiete Das Mittelalter in Schloß Britz ', '')" bool(false) int(-1)

          Was ist falsch?

          Kommentar


          • #6
            mysql_query() liefert FALSE, somit ist der Query ungültig
            bau deinen Code mal zu folgendem Konstrukt um:
            PHP-Code:
            <?php
            while (..) {
              
            // ..
              
            mysql_query($sql$db) or die(sprintf('%u: %s'mysql_errno(), mysql_error()));
              
            // ..
            }
            ?>

            Kommentar


            • #7
              Hallo! - Problem (fast vollständig) gelöst!!

              Ich habe den ausgegebenen Fehler in Google eingegeben und die Antwort erhalten, dass der Fehler von "auto_increment" im Feld "id" meiner Tadbelle "ums" verursacht wird.

              Habe die Tabelle entsprechend geändert und nun geht's! - Danke nochmal für die tollen Tipps!

              Nun habe ich nur noch das Problem, dass das erste Element im Array $data ignoriert wird.

              PHP-Code:
              $sql "SELECT akt.id AS akt_id, akt.bezeichnung AS bezeichnung, akt.faktor AS faktor FROM akt, teil WHERE teil.veranst_id=$end AND akt.id=teil.akt_id AND akt.schluessel>1999";
              $result mysql_query($sql,$db);
              $data mysql_fetch_array($result); 
              Genau dieses Element wird aber ausgegeben, wenn ich

              PHP-Code:
              print_r($data); 
              verwende.

              Das ist bestimmt nur ein kleiner Denkfehler, aber wo?

              Kommentar


              • #8
                Lass mich raten:
                Du hast tatsächlich
                $data = mysql_fetch_array($result);
                und danach
                while ($data = mysql_fetch_array($result)) {
                und wunderst Dich jetzt, warum der erste Datensatz nicht innerhalb der while Schleife bearbeitet wird.

                Kommentar


                • #9
                  Da war er wieder, der Wald, den man vor lauter Bäumen nicht mehr sieht

                  Ich hoffe sehr, hier wird aufgrund meines dummen Fehlers nicht eine Rubrik "PHP-Trottel" eingeführt

                  Danke für den Tritt!!!

                  Kommentar


                  • #10
                    Ich beschäftige mich jetzt seit ca einem Monat mit php. Aber seltsamerweise ist mir genau dieser Fehler jetzt schon einige Male in Foren begegnet. Vorher noch nie.
                    Also a) tröste Dich, Du bist nicht allein und wenn Du es jetzt erfasst hast, ist das super. b) Löst irgendetwas in php das aus oder ist das ein bekanntes aber fehlerhaftes Tutorial oder Buch?

                    Kommentar


                    • #11
                      Keine Ahnung! Ich nutze Franzis "PHP 5/ MySQL 4" Studienausgabe und suche mir ansonsten immer wieder Tipps aus dem Internet (z.B. dieses Forum).

                      Ich bin totaler Autodidakt, was sicher nicht immer der beste Weg ist.

                      Vielleicht liegt es in meinem Fall daran, dass ich manchmal Code-Schnipsel zusammenfüge, die einzeln gut funktionieren, aber in der Kombination zu Problemen führen.

                      Ich arbeite gerade an einer größeren Anwendung, die auch (erstaunlich) gut funktioniert. Dabei versuche ich immer wieder neue Funktionen einzubauen und suche mir halt die Codes zusammen.

                      Offensichtlich geht mir ab und zu der Überblick verloren.

                      Kommentar


                      • #12
                        Zitat von thomas2000
                        Ich hoffe sehr, hier wird aufgrund meines dummen Fehlers nicht eine Rubrik "PHP-Trottel" eingeführt
                        Awas.

                        Zitat von thomas2000
                        Ich habe den ausgegebenen Fehler in Google eingegeben und die Antwort erhalten
                        So wirds gemacht

                        Kommentar

                        Lädt...
                        X