Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion mit Array und prepare in Datenbank schreiben

Einklappen

Neue Werbung 2019

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

  • Funktion mit Array und prepare in Datenbank schreiben

    Hallo zusammen,
    ich hatte gelesen, das man für das schreiben in eine DB lieber preparer nutzen soll. Ich erfasse in einem Formular die Daten in einem array "feld". Da ich mehrere Formulare nutze mit unterscheidlichen Feldern, diese aber immer in ein array "feld" schreibe, dachte ich eine Funktion dbin() wäre der richtige Weg.

    In dieser Function wollte ich dann immer das Array feld auslesen und mit prepare in die DB schreiben.


    PHP-Code:
    function dbin()
     {
    $felder $_POST['feld']; 
    über eine foreach frage ich schon die Felder und Werte ab; was auch funktioniert.

    PHP-Code:
    foreach ($felder as $field => $value) {
        echo 
    "$field = $value<br />\n";

    meine kläglichen Versuche es mit dem prepare statement zu verbinden sind jedoch leider gescheitert:

    PHP-Code:
    $stmt $dbh->prepare("INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)");

    foreach (
    $felder as $field => $val) {
    $field .= $key;
    $value .=  $val


    $stmt->bindParam(':fields'$fields);
    $stmt->bindParam(':value'$value);
    $stmt->execute();

    Ist es überhaupt möglich Daten aus dem Array in dieser Form für das SQL Statement mit prepare zu verwenden?

    Gruß
    Micha


  • #2
    Hi,

    meinst du das?

    PHP-Code:
    $stmt $dbh->prepare('INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)');

    foreach(
    $felder as $field => $val) {
        
    $stmt->execute(array(':field' => $field':value' => $val));

    anbei: du befüllst die Variable $field, übergibst aber $fields. Zudem wird die Variable nicht jedesmal neu befüllt, sondern bei jedem Schleifendurchlauf erweitert durch dein .= (bestimmt nicht beabsichtigt, oder?).

    mfg wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Hallo wolf29,

      danke für die schnelle Hilfe, leider erhalte ich momentan erhalte ich noch ein Fatal error: Call to a member function prepare() on null in und werde mich mal auf die Suche machen

      Gruß
      Micha

      Kommentar


      • #4
        Dann teste mal $dbh mit var_dump...
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Danke Arne Drews,

          da geht wohl was schief bei Ausgabe NULL Ich werde auf die Suche gehen.
          $dbh = new PDO('mysql:host=' . $dbserver . ';dbname=' . $dbname, $dbuser, $dbpass);

          Kommentar


          • #6
            Hi,

            danke für die schnelle Hilfe, leider erhalte ich momentan erhalte ich noch ein Fatal error: Call to a member function prepare() on null in und werde mich mal auf die Suche machen
            du rufst das in ner function auf und dort ist dein PDO Zugriff nicht bekannt. Musst du als Parameter übergeben. Der schnellste Weg (aber auch der schlechteste) ist global $dbh; in deiner Function besser function dbin($dbh) {...

            mfg wolf29
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              Ohh wolf29,

              das habe ich jetzt nicht verstnden was ich tun soll. Ich habe meiner db.inc.php die Zeile
              PHP-Code:
              $dbh = new PDO('mysql:host=db8.meinserver;dbname=dbxxxxx''uxxxxx''meinpasswort'); 
              die db.inc.php wird auch in der Datei eingebunden, welche die Funktion aufruft. Das Ergebnis vom dump ist aber NULL.
              Wenn ich die Zeile in der Funktion vor dem var_dump($dbh); einbinde erhalte ich als Ausgabe object(PDO)#3 (0) { } jedoch keinen Datenbankeintrag.

              Ich dachte ich könnte die $dbh in meiner db.inc.php hinterlegen.

              Kommentar


              • #8
                Eine Möglichkeit:

                PHP-Code:
                include_once("db.inc.php");

                function 
                dbin($dbh){

                 
                $stmt $dbh->prepare('INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)');

                 foreach(
                $felder as $field => $val) {
                    
                $stmt->execute(array(':field' => $field':value' => $val));
                 }

                // usw... 

                while (!asleep()) sheep++;

                Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                Kommentar


                • #9
                  Da helft ihr mir so gut und ich kann es nicht umsetzen
                  Ich erhalte Warning: Missing argument 1 for dbin(), called in meine.php on line 73 and defined in _function.php on line 21

                  Fatal error: Call to a member function prepare() on null in _function.php on line 116 und da steht $stmt = $dbh->prepare('INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)');

                  ich hab es aber so übernommen wie es da steht Verstehe ich die Fehlermeldung richtig, das das $dbh nicht an dbin übergeben wird?

                  Warum muss ich eigentlich das include_once("db.inc.php"); in der function.php einfügen wenn es schon in der PHP mit require_once enthalten ist von der die Funktion aufgerufen wird ?


                  Gruß
                  Micha

                  Kommentar


                  • #10
                    Dann in der function includen:

                    PHP-Code:

                    function dbin(){

                    include_once(
                    "db.inc.php");

                     
                    $stmt $dbh->prepare('INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)');

                     foreach(
                    $felder as $field => $val) {
                        
                    $stmt->execute(array(':field' => $field':value' => $val));
                     }

                    // usw... 

                    vielleicht wäre es gar nicht schlecht, wenn ud mal dein ganzes Script zeigst, damit ich sehe, wie du was wo einbindest/schreibst.
                    while (!asleep()) sheep++;

                    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                    Kommentar


                    • #11
                      Die Fehlermeldungen werden weniger
                      Fatal error: Call to a member function prepare() on null in _function.php on line 103 und da steht
                      PHP-Code:
                      $stmt $dbh->prepare('INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)');
                      foreach(
                      $felder as $field => $val) {
                          
                      $stmt->execute(array(':field' => $field':value' => $val));
                          } 
                      Welches der Scripte soll ich zeigen ? db.inc.php, _function.php oder meine.php (wo das Formular drin ist)?
                      db.inc.php
                      PHP-Code:
                      <?
                      //Verbindungsaufbau PDO
                      $pdohost = "mysql:host=" . $dbserver;
                      $pdodbname = "dbname=" . $dbname;
                      $pdodbuser = $dbuser;
                      $pdodbpass = $dbpass;
                      //mein* ist mit den entsprechenden Daten ausgefülltz eigentlich war es Ziel an dieser Stelle die Variablen von oben zu verwenden
                      $dbh = new PDO('mysql:host=meinhost;dbname=meinedb', 'meinuser', 'meinpasswort');
                      ?>
                      function.php
                      PHP-Code:
                      <?
                      function dbin()
                       {
                      include_once("db.inc.php");
                      $felder = $_POST['feld'];
                      //http://www.php.de/php-einsteiger/111827-funktion-mit-array-und-prepare-datenbank-schreiben.html#post823044
                      $stmt = $dbh->prepare('INSERT INTO meine_tabelle (field, value) VALUES (:field, :value)');
                      foreach($felder as $field => $val) {
                          $stmt->execute(array(':field' => $field, ':value' => $val));
                          }
                      }
                      ?>

                      Gruß
                      Micha

                      Kommentar


                      • #12
                        Immer das Script und den Bereich mit markierter Zeile, die in der Fehlermeldung steht!

                        btw.:
                        leider erhalte ich momentan erhalte ich noch ein Fatal error:
                        Die Fehlermeldungen werden weniger
                        Würdest Du bitte komplett mitteilen, was im Argen liegt!
                        Viele Fehler sind Folgefehler, so daß wir am besten helfen können, indem Du uns wirklich alle nötigen Informationen gibst!
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Zeig bitte wo du die function definierst und wo du deine Datenbankverbindung einbindest (aktueller code).
                          Anscheinend ist dein PDO Objekt in der Schleife aus den genannten Gründen nicht bekannt.

                          mfg wolf29

                          EDIT:

                          PHP-Code:
                          $felder $_POST['feld']; 
                          du gehst davon aus, dass das ein Array ist. Warum?? Bitte das Formularfeld mal zeigen. Üblicherweise ist das meist nur ein input Feld oder wie ist das definiert?
                          Außerdem bekommst du das in ner Function als Parameter und eine function hat auch normalerweiße einen return-Wert (den du auch nicht hast). Bitte anfangen zu debuggen, Fehler & Variablen ausgeben lassen usw.
                          while (!asleep()) sheep++;

                          Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                          Kommentar


                          • #14
                            Das foreach sollte funktionieren und auch die Übergabe aus dem Formular.
                            PHP-Code:
                            foreach ($felder as $field => $value) {
                                echo 
                            "$field = $value<br />\n";

                            gibt mir die Feldnamen und Werte aus.

                            Die function liegt in der function.php und wird vom Formular aus aufgerufen:
                            PHP-Code:
                            <?php
                            if (isset($_REQUEST['submit'])) {
                              
                            dbin();
                             }
                            ?>
                            eins meiner Felder im Formular sieht so aus:
                            Code:
                                  <div class="form-group">
                                     <label class="col-md-3 control-label" for="mandat">Mandat</label>
                                     <div class="col-md-9">
                                     <input id="mandat" name="feld[mandat]" class="form-control input-sm" type="text">
                                     <span class="help-block">neue Mandatsnummer</span>
                                     </div>
                                  </div>
                            Die DB Verbindung wird in der db.inc.php aufgebaut:
                            PHP-Code:
                             <?
                            //Verbindungsaufbau PDO
                            $pdohost = "mysql:host=" . $dbserver;
                            $pdodbname = "dbname=" . $dbname;
                            $pdodbuser = $dbuser;
                            $pdodbpass = $dbpass;
                            //mein* ist mit den entsprechenden Daten ausgefülltz eigentlich war es Ziel an dieser Stelle die Variablen von oben zu verwenden
                            $dbh = new PDO('mysql:host=meinhost;dbname=meinedb', 'meinuser', 'meinpasswort');
                            ?>
                            Ich vermute meinen Fehler ja beim Aufbau der DB Verbindung, oder Übergabe der $dbh

                            Gruß
                            Micha

                            Kommentar


                            • #15
                              Ich vermute meinen Fehler ja beim Aufbau der DB Verbindung, oder Übergabe der $dbh
                              Naja, warum zeigst Du dann nicht, wie Du es mit Deinen Variablen im Orginal hast. Nichts für ungut, aber bereits da könnte ja schon ein Fehler passieren.
                              Was Du postest ist ein Verbindungsaufbau, der einfachsten Art, wie er funktionieren sollte, nicht aber, was Du wirklich machst!
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X