Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Arrays mit for-Loop in MySQL inserten

Einklappen

Neue Werbung 2019

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

  • PHP Arrays mit for-Loop in MySQL inserten

    Hallo miteinander,

    wir haben im Moment in der Schule die Aufgabe eine kleine Webapplikation mit PHP zu erstellen. Nun zu meiner Frage, ich möchte PHP Arrays mittels einer for-Schleife in die MySQL Datenbank inserten. Das heisst, mehrere Datensätze.

    Die $anzMitreisende Variable ist korrekt wie auch die anderen Arrays sind korrekt gefüllt ($reiseID und $kundenID sind keine Arrays, diese bleiben immer gleich). Jedoch wird mir bei untenstehendem Code immer nur der erste Datensatz in die Datenbank geschrieben.

    Hier ist der Code:

    PHP-Code:
    if ($stmt $mysqli->prepare("INSERT INTO Kunde_Mitreisende (
        Vorname,
        Nachname,
        Strasse,
        Strassen_NR,
        Ort,
        PLZ,
        Telefon_NR,
        Nationalitaet,
        Geburtsdatum,
        Geschlecht,
        FK_Kunden_ID,
        FK_Reise_ID 
        )
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
    )){
        

        
        for (
    $i =0$i<$anzMitreisende$i++){
            
            
    $vorname $vornameAry[$i];
            
    $nachname $nachnameAry[$i];
            
    $strasse $strasseAry[$i];
            
    $strassennummer $strassennummerAry[$i];
            
    $ort $ortAry[$i];
            
    $plz $plzAry[$i];
            
    $telefonnummer $telefonnummerAry[$i];
            
    $nationalitaet $nationalitaetAry[$i];
            
    $geburtstag $geburtstagAry[$i];
            
    $geschlecht $geschlechtAry[$i];
            
    $kundenID $kundenID;
            
    $reiseID $reiseID;
            
            
    $stmt->bind_param("sssisissssii"$vorname$nachname,$strasse$strassennummer$ort$plz$telefonnummer,$nationalitaet,$geburtstag$geschlecht$kundenID,$reiseID);

            
            
    $stmt->execute();
            
        } 
    Weiss vielleicht von euch jemand, wo das Problem sein könnte?

    Danke & Gruss

  • #2
    Warum das
    "sssisissssii"
    ?

    Variable $anzMitreisende mal ausgegeben? Vllt muss es auch <= in der Bedingung heißen (kommt jetzt natürlich auf die Logik an.)

    Kommentar


    • #3
      Besten Dank für die schnelle Antwort.

      Das "sssisissssii" gibt die zu erwartenden Parameter an, s --> String, i --> int, das klappt soweit auch, leider schreibt es nur den ersten Datensatz, dieser wird aber korrekt in die Datenbank geschrieben.

      <= kann leider auch nicht das Problem sein $anzMitreisende ist 2, das heisst, Index[0] und Index[1] der jeweiligen Arrays müssen ausgelesen werden.

      Kommentar


      • #4
        - Kipp das Prepare nicht ins if, prüf im IF nur die Variable und setz sie vor dem IF, steigert ungemein die Lesbarkeit.
        - Ist das ein HTML Array was du dort ausladest ?
        - ReiseID und KundenID sind auch nicht unique in der Tabelle ?

        Fehleranalyse steckt bei dem Quellcode auch noch in der Eizelle.

        Kommentar


        • #5
          werd ich, danke

          die Arrays sind von einem HTML-Formular gespiesen.

          PHP-Code:
          $geschlechtAry $_POST ['gender'];
          $vornameAry $_POST['vorname'];
          $nachnameAry $_POST['nachname'];
          $strasseAry $_POST ['street'];
          $strassennummerAry $_POST['streetnumber'];
          $ortAry $_POST['place'];
          $plzAry $_POST['zipcode'];
          $telefonnummerAry $_POST ['phonenumber'];
          $nationalitaetAry $_POST['nationality'];
          $geburtstagAry $_POST['birthday']; 
          Diese enthalten soweit auch die korrekten Daten. Wenn ich sie ausgebe.

          $reiseId und $kundenId sind Fremdschlüssel und sind nicht als unique definiert, kann und soll also mehrfach vorkommen.

          Kommentar


          • #6
            und $anzahlMitreisende hat auch entsprechend den Wert das die for() mehrfach ausgeführt wird ? ( Hier würd ich eher dazu raten immer auf Feste Mengen zu traversieren, statt das integer gefrickel. ( foreach auf ein array bewirkt da wunder ) )

            Kommentar


            • #7
              AnzMitreisende kann sich stets ändern. Daher habe ich die Variable so in der for Schleife definiert.

              Habe den Fehler nun gefunden, das Problem jedoch noch nicht behoben:

              ich erstelle hier dynamisch ein Formular, welches gemäss der Variable $anzTeilnehmer-1 d.h. Anzahl Mitreisende erstellt wird. Darin werden Radiobuttons definiert ich habe diese momentan mit genderf[".$i."] und genderm[".$i."] benamst:

              PHP-Code:
              for ($i 1$i <=$anzTeilnehmer-1$i++){
                      echo
              "
                     
                              <fieldset>
                                  <legend> Erfassung Mitreisender  "
              .$i." </legend>
                                <fieldset>
                                  <div class=\"row-fluid\">
                                      <div class=\"span2\">
                                          <div class=\"control-group\">
                                              <label class=\"control-label\" for=\"gender\">Herr</label>
                                                <div class=\"controls\">
                                                      <label class=\"radio\">
                                                        <input type=\"radio\" name=\"genderm["
              .$i."]\" id=\"label".$i."\" value=\"M\" checked>
                                                      </label>
                                                </div>
                                              <label class=\"control-label\" for=\"gender\">Frau</label>
                                                <div class=\"controls\">
                                                      <label class=\"radio\">
                                                        <input type=\"radio\" name=\"genderf["
              .$i."]\" id=\"label".$i."\" value=\"F\">
                                                      </label>
                                                </div>
                                          </div>
                                      </div>
                                  </div> 
              Anschliessend versuche ich diese im PHP zu lesen und in ein Array zu schreiben:

              PHP-Code:
              $geschlechtAry = array();
              for (
              $ind 1$ind <=$anzMitreisende$ind++){
                  if (isset(
              $_POST["genderm[".$ind."\"]"])){
                      
              array_push($geschlechtAry"M");
                  }
                  else if (isset(
              $_POST["genderf[".$ind."\"]"])){
                      
              array_push($geschlechtAry"F");
                  }

              Jedoch bekomme ich beim Zugriff auf den Index $geschlechtAry[1] einen offset error: PHP Notice: Undefined offset. Mache ich beim Zugriff etwas falsch?

              Danke für eure Hilfe & gute Nacht

              Kommentar


              • #8
                PHP-Code:
                var_dump($geschlechtAry); 
                gibt was aus? Debuggen, falls das noch aktuell ist:

                - http://phpforum.de/forum/showthread.php?t=216988
                - http://www.php.de/wiki-php/index.php...ging:Leitfaden

                Und so als Tipp: Du kannst auch einfache Anführungszeichen zur Stringbegrenzung nutzen:

                PHP-Code:
                echo '<a href="http://www.example.org/">'
                Dann brauchst du nicht kompliziert mit Backslashes zu arbeiten. Variablen in diesen Strings müssten dann aber konkateniert werden ("."-Operator).

                - http://php.net/manual/en/language.types.string.php
                - http://php.net/manual/en/language.operators.string.php

                Du brauchst übrigens auch nicht print oder echo zu nutzen, sondern kannst den PHP-Bereich schließen ?>, dann HTML-Code ausgeben und dann den PHP-Bereich wieder starten <?php. Wenn du dein Skript ordentlich strukturiert hast, ist das sogar die beste Option.

                Und der Vollständigkeit halber: So rum ist es auch korrekt, aber unüblich:

                PHP-Code:
                echo "<a href='http://www.example.org/'>"

                Kommentar

                Lädt...
                X