Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular-Eingabe erscheint nicht in der Datenbank

Einklappen

Neue Werbung 2019

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

  • Formular-Eingabe erscheint nicht in der Datenbank

    Ich habe eine kurze Anfänger-Frage.

    Ein Wordpress-Plugin, das ich gerade erstelle, erzeugt ein Formular [FUNKTIONIERT] und soll die eingegebenen Daten in die Datenbank schreiben [FUNKTIONIERT NICHT]. Allerdings zeigt es sie nach dem Abschicken des Formulars an [FUNKTIONIERT].
    Generell funktioniert die Datenbank-Anbindung, denn ich habe eine andere Funktion, die den Inhalt der Datenbank nach meinen Wünschen auflistet.

    Die Stelle if($id !== false) gibt 'Array' zurück, statt der Fehlermeldung oder der Erfolgsmeldung in Form der ID.

    Ich suche mich zu Tode wäre total dankbar, wenn jemandem etwas auffällt, was mich in die richtige Richtung schubst.

    PHP-Code:
    function kontaktliste_eintrag(){
        global 
    $wpdb;

        if (
    $_POST) {
            echo 
    '<pre>';
            echo 
    htmlspecialchars(print_r($_POSTtrue));
            echo 
    '</pre>';

            return 
    $_POST;

            
    $wpdb->insert(
                
    $wpdb->prefix.'kontaktliste',
                array(
                    
    'ID' => '',
                    
    'plz' => $eintrag['plz'],
                    
    'stadt' => $eintrag['stadt'],
                    
    'land' => $eintrag['land'],
                    
    'vorname' => $eintrag['vorname'],
                    
    'nachname' => $eintrag['nachname'],
                    
    'email' => $eintrag['email'],
                    
    'show_email' => $eintrag['show_email'],
                    
    'info' => $eintrag['info']
                ),
                array(
                    
    '%s'//ID, autoincrement -> sollte leer sein
                    
    '%s'//plz*
                    
    '%s'//stadt*
                    
    '%s'//land*
                    
    '%s'//vorname*
                    
    '%s'//nachname
                    
    '%s'//email(*)
                    
    '%s'//show_email -> 0/1 speichert, ob eMail-Adresse angezeigt werden soll
                    
    '%s' //info
                
    )
            );

            
    $id $wpdb->insert_id;

            if(
    $id !== false) {
                echo 
    $id//in der Variable befindet sich nun die Primärschlüssel ID des Eintrags */
            
    } else {
                echo 
    "Beim Eintragen ist ein Fehler aufgetreten";
            }
        }


        
    $form '<form action="" method="post">' "\n" .
            
    'PLZ: <input type="text" name="eintrag[plz]" /><br />' "\n" .
            
    'Land: <br />' "\n" .
                
    '<select radio name="eintrag[land]">' "\n" .
                    
    '<option value="D">Deutschland</option>' "\n" .
                    
    '<option value="CH">Schweiz</option>' "\n" .
                    
    '<option value="A">&Uuml;sterreich</option>' "\n" .
                
    '</select><br />' "\n" .
            
    'Stadt/Raum/Kreis: <input type="text" name="eintrag[stadt]" /><br />' "\n" .
            
    'Vorname:  <input type="text" name="eintrag[vorname]" /><br />' "\n" .
            
    'Nachname:  <input type="text" name="eintrag[nachname]" /><br />' "\n" .
            
    'E-Mail: <input type="text" name="eintrag[email]" /><br />' "\n" .
            
    'Direktkontakt m&ouml;glich: <br />' "\n" .
                
    '<select radio name="eintrag[show_email]">' "\n" .
                    
    '<option value="1">Direktkontakt (eMail anzeigen)</option>' "\n" .
                    
    '<option value="0">kein Direktkontakt (eMail verbergen)</option>' "\n" .
                
    '</select><br />' "\n" .
            
    'Info: <input type="text" name="eintrag[info]" /><br />' "\n" .
            
    '<input type="submit" name="submit" value="Eintragen" />' "\n" .
            
    '</form>' "\n";

        echo 
    $form;



  • #2
    Ich kenne die WP-Methoden nicht im Detail, aber eine auto_increment Spalte wird beim Insert i.d.R. gar nicht angegeben, hast Du das mal probiert?
    Also nicht leer-, sondern weglassen.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Zitat von Arne Drews Beitrag anzeigen
      Ich kenne die WP-Methoden nicht im Detail, aber eine auto_increment Spalte wird beim Insert i.d.R. gar nicht angegeben, hast Du das mal probiert?
      Also nicht leer-, sondern weglassen.
      Ja, dank dir für den Hinweis. Genau das habe ich schon probiert und es hat für das gleiche Ergebnis gesorgt. Ich habe es hier der Vollständigkeit halber drin gelassen. Sonst sieht der Code für dich ok aus?

      Kommentar


      • #4
        Wie gesagt, ich kenne die Methode von WP nicht.
        Wenn Du sagst, es kommt eine Erfolgsmeldung, prüf doch mal die $wpdb->insert_id; oder lass dir die Fehler von $wpdb ausgeben.
        Das scheint eh nur ein Wrapper für MySQLi oder PDO zu sein.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Das Insert wird gar nicht erst ausgeführt da es zuvor ein Return gibt
          PHP-Code:
          return $_POST
          daher kommt auch dein 'Array'.

          Kommentar


          • #6
            Zitat von Arne Drews Beitrag anzeigen
            Wie gesagt, ich kenne die Methode von WP nicht.
            Wenn Du sagst, es kommt eine Erfolgsmeldung, prüf doch mal die $wpdb->insert_id; oder lass dir die Fehler von $wpdb ausgeben.
            Das scheint eh nur ein Wrapper für MySQLi oder PDO zu sein.
            Dank dir nochmal!
            Es kommt keine Erfolgsmeldung, sondern an der Stelle
            PHP-Code:
            $id $wpdb->insert_id;

                    if(
            $id !== false) {
                        echo 
            $id//in der Variable befindet sich nun die Primärschlüssel ID des Eintrags */
                    
            } else {
                        echo 
            "Beim Eintragen ist ein Fehler aufgetreten";
                    } 
            sollte entweder die ID (vom Eintragen in die Datenbank) kommen, oder die Fehlermeldung. Es kommt stattdessen aber "Array". Das kann ich nicht deuten.

            Kommentar


            • #7
              PHP-Code:
              var_dump($id); 
              sagt Dir was in dem Array drin ist.

              Kommentar


              • #8
                Die Variable $eintrag ist im übrigen auch nicht definiert.
                d.h. sofern du das Return entfernst, wirst du in besten Fall einen komplett leeren Datensatz in der Datenbank vorfinden.


                Kommentar


                • #9
                  Zitat von Gnom42 Beitrag anzeigen
                  Die Variable $eintrag ist im übrigen auch nicht definiert.
                  d.h. sofern du das Return entfernst, wirst du in besten Fall einen komplett leeren Datensatz in der Datenbank vorfinden.
                  Danke euch!

                  Ich habe den Code angepasst und es landet jetzt wenigstens ein leerer Datensatz in der Tabelle und außerdem gibt $id die ID des Datensatzes zurück. Ich denke, dass es also jetzt irgendein Variablen-Ding ist, was ich nicht verstehe. So, wie die Eingaben aus dem Formular weitergegeben werden.

                  PHP-Code:
                  function kontaktliste_eintrag(){
                      global 
                  $wpdb

                      if (
                  $_POST) {
                          echo 
                  '<pre>';
                          echo 
                  htmlspecialchars(print_r($_POSTtrue));
                          echo 
                  '</pre>';

                          
                  $wpdb->insert
                              
                  $wpdb->prefix.'kontaktliste',
                              array( 
                                  
                  'ID' => '',
                                  
                  'plz' => print_r($_POST['plz'], true),
                                  
                  'stadt' => print_r($_POST['stadt'], true),
                                  
                  'land' => print_r($_POST['land'], true),
                                  
                  'vorname' => print_r($_POST['vorname'], true),
                                  
                  'nachname' => print_r($_POST['nachname'], true),
                                  
                  'email' => print_r($_POST['email'], true),
                                  
                  'show_email' => intval(print_r($_POST['show_email'], true)),
                                  
                  'info' => print_r($_POST['info'], true)
                              ), 
                              array( 
                                  
                  '%d'//ID, autoincrement -> sollte leer sein
                                  
                  '%s'//plz*
                                  
                  '%s'//stadt*
                                  
                  '%s'//land*
                                  
                  '%s'//vorname*
                                  
                  '%s'//nachname
                                  
                  '%s'//email(*)
                                  
                  '%d'//show_email -> 0/1 speichert, ob eMail-Adresse angezeigt werden soll
                                  
                  '%s' //info
                              

                          );

                          
                  $id $wpdb->insert_id;

                          if(
                  $id !== false) {
                              echo 
                  $id//in der Variable befindet sich nun die Primärschlüssel ID des Eintrags */
                          
                  } else {
                              echo 
                  "Beim Eintragen ist ein Fehler aufgetreten";
                          }

                          
                  /* var_dump($id); */

                          
                  return $_POST;

                      }


                      
                  $form '<div id="formtitle">Trage hier die Daten des neuen Kontaktes ein. In der Tabellenansicht werden nur Postleitzahl, Stadt, Land und Vorname angezeigt. Es sei denn, die eMail-Adresse wird auf ANZEIGEN gestellt.</div><div id="formbody"><form action="" method="post" id="eintragkontaktliste">' "\n" .
                    
                  '<div class="formzeile">' "\n" .
                      
                  '<p><input type="text" id="plz" placeholder="Postleitzahl" name="eintrag[plz]" /></p>' "\n" .
                      
                  '<p><input type="text" id="stadt" placeholder="Stadt/Raum/Kreis" name="eintrag[stadt]" /></p>' "\n" .
                      
                  '<p><select radio id="land" name="eintrag[land]">' "\n" .
                        
                  '<option value="D">Deutschland</option>' "\n" .
                        
                  '<option value="CH">Schweiz</option>' "\n" .
                        
                  '<option value="A">&Uuml;sterreich</option>' "\n" .
                        
                  '</select></p>' "\n" .
                    
                  '</div>' "\n" .
                    
                  '<div class="formzeile">' "\n" .
                      
                  '<p><input type="text" id="vorname" placeholder="Vorname" name="eintrag[vorname]" /></p>' "\n" .
                      
                  '<p><input type="text" id="nachname" placeholder="Nachname (wird nicht angezeigt)" name="eintrag[nachname]" /></p>' "\n" .
                    
                  '</div>' "\n" .
                    
                  '<div class="formzeile">' "\n" .
                      
                  '<p><input type="email" id="email" placeholder="eMail-Adresse" name="eintrag[email]" /></p>' "\n" .
                    
                  '</div>' "\n" .
                    
                  '<div class="formzeile">' "\n" .
                      
                  '<p>Soll Direktkontakt m&ouml;glich sein?</p>' "\n" .
                      
                  '<p><select type="radio" id="direkt" name="eintrag[show_email]">' "\n" .
                        
                  '<option value="1">ja (eMail anzeigen)</option>' "\n" .
                        
                  '<option value="0">nein (eMail verbergen)</option>' "\n" .
                        
                  '</select></p>' "\n" .
                    
                  '</div>' "\n" .
                    
                  '<div class="formzeile">' "\n" .
                      
                  '<p><textarea id="info" placeholder="Weiterf&uuml;hrende Infos (werden nicht angezeigt)" name="eintrag[info]" cols="20" rows="4"></textarea></p>' "\n" .
                    
                  '</div>' "\n" .
                    
                  '<div class="formzeile-submit">' "\n" .
                      
                  '<p><input type="submit" id="submit" name="submit" value="Eintragen" /></p>' "\n" .
                    
                  '</div>' "\n" .
                  '</form></div>' "\n";

                      echo 
                  $form;


                  Kommentar


                  • #10
                    was ist, wennn du das so machst?
                    Code:
                    'plz' => $_POST['plz'],
                    ...
                    <input type="text" id="plz" placeholder="Postleitzahl" name="plz" /></p>' . "\n" ...
                    Wie sieht ein var_dump auf $_POST aus? sind da alle werte korrekt?
                    http://www.dhsmedia.de
                    http://www.deutsch-im-blick.de

                    Kommentar


                    • #11
                      Noch als Anmerkung: Wenn die ID Autoincrement ist, würde ich die generell weglassen, in beiden Arrays. Das macht die DB dann alleine. Wenn du da irgendwas oder leer übergibst kann das generell durchaus schon auch eine Fehlerquelle sein.
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von kid01 Beitrag anzeigen
                        was ist, wennn du das so machst?
                        Code:
                        'plz' => $_POST['plz'],
                        ...
                        <input type="text" id="plz" placeholder="Postleitzahl" name="plz" /></p>' . "\n" ...
                        Wie sieht ein var_dump auf $_POST aus? sind da alle werte korrekt?
                        Bevor ich deinen Post gelesen habe, habe ich ebenso bemerkt, dass $_POST ein multidimensionales Array ist und ich es falsch angesprochen habe.
                        So funktioniert es:
                        PHP-Code:
                        $wpdb->insert
                                    
                        $wpdb->prefix.'kontaktliste',
                                    array( 
                                        
                        'ID' => '',
                                        
                        'plz' => print_r($_POST['eintrag']['plz'], true),
                                        
                        'stadt' => print_r($_POST['eintrag']['stadt'], true),
                                        
                        'land' => print_r($_POST['eintrag']['land'], true),
                                        
                        'vorname' => print_r($_POST['eintrag']['vorname'], true),
                                        
                        'nachname' => print_r($_POST['eintrag']['nachname'], true),
                                        
                        'email' => print_r($_POST['eintrag']['email'], true),
                                        
                        'show_email' => intval(print_r($_POST['eintrag']['show_email'], true)),
                                        
                        'info' => print_r($_POST['eintrag']['info'], true)
                                    ), 
                                    array( 
                                        
                        '%d'//ID, autoincrement -> sollte leer sein
                                        
                        '%s'//plz*
                                        
                        '%s'//stadt*
                                        
                        '%s'//land*
                                        
                        '%s'//vorname*
                                        
                        '%s'//nachname
                                        
                        '%s'//email(*)
                                        
                        '%d'//show_email -> 0/1 speichert, ob eMail-Adresse angezeigt werden soll
                                        
                        '%s'  //info
                                    

                        Aber kann man das noch optimieren?

                        Kommentar


                        • #13
                          ich würde die Dimension "Eintrag" einsparen. Sodass du nur ein 2-Dimensionales Array hast.
                          Oder habe ich waas übersehen?
                          http://www.dhsmedia.de
                          http://www.deutsch-im-blick.de

                          Kommentar


                          • #14
                            Und gibt das print_r() raus, oder willst du das so wirklich in der DB haben? Das ergibt auch hier zB:

                            PHP-Code:
                            intval(print_r(...)) 
                            absolut keinen Sinn bzw. ist falsch.
                            The string "()()" is not palindrom but the String "())(" is.

                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              Zitat von kid01 Beitrag anzeigen
                              ich würde die Dimension "Eintrag" einsparen. Sodass du nur ein 2-Dimensionales Array hast.
                              Oder habe ich waas übersehen?
                              ich habe die einzelnen Sachen irgendwo zusammengeklaut, daher habe ich es erstmal so gelassen. Bzw habe es ja gerade erst bemerkt. Der Submit wird in einem eigenen Element gespeichert, aber es macht sicher keinen Sinn hier.

                              Kommentar

                              Lädt...
                              X