Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Fehlermeldung

Einklappen

Neue Werbung 2019

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

  • PHP Fehlermeldung

    Im folgenden Code finde ich den Fehler nicht. Was ist falsch??? Der Fehler soll in der values - Zeile liegen.

    PHP-Code:

    <?php
    function dokument_inserten() {

    global 
    $wpdp;

    $now = new DateTime();
    $wpdb -> prepare (
    "INSERT INTO 'spd-dokumente'
    ( 'DokURL', 'Gremium', 'DokDat', 'SitzDat', 'DokForm', DokTitel', 'noeff', *Eingestellt' )
    values ( '
    $_POST["dokurl"]', '$_POST["gremium"]', '$_POST["dokdat"]', '$_POST["sitzdat"]', '$_POST["dokform"]', '$_POST["doktitel"]', '$_POST["noeff"]', '$now' )"
    );
    $wpdb->query($sql);
    $last_id $wpdb->insert_id;
    $ps_f '<form method="post" action="http://huppenbroich.de/ris/dokument-anzeigen"><input type="hidden" name="Index" value="';
    $ps_f .= $last_id '"><button style="padding: 10px;" type="submit">Anzeigen</button></form>';

    $update1 $wpdb->query($wpdb->prepare("UPDATE spd-dokumente SET Pseudoform='$ps_f' WHERE Ix='$last_id'"));

    $wpdb->flush();

    }
    add_shortcode('dokument-eingestellt','dokument_inserten');

  • #2
    Im folgenden Code finde ich den Fehler nicht. Was ist falsch??? Der Fehler soll in der values - Zeile liegen.
    Was so eine sehr unübliche Fehlermeldung ist,m wenn dies kein Ratespiel sein soll.

    hier ein Leitfaden, wie Du daraus einen brauchbaren Post machen kannst.
    Have FUN...

    https://php-de.github.io/#debugging

    Kommentar


    • #3
      Ich tippe mal auf einen Syntax Error. Du wendest die Prepare-Methode aber auch völlig falsch an.
      Man verwendet normalerweise Platzhalter und übergibt die Parameter separat.
      Siehe: https://developer.wordpress.org/refe.../wpdb/prepare/
      sorry, shift-taste kaputt

      Kommentar


      • #4
        Moin,

        Code:
        INSERT INTO 'spd-dokumente'
        ( 'DokURL', 'Gremium', 'DokDat', 'SitzDat', 'DokForm', DokTitel', 'noeff', *Eingestellt' )
        Der Tabellenname darf nicht in ' stehen.
        Die Spaltennamen dürfen nicht in ' stehen.
        Bei 'DokTitel' würde das öffnende ' fehlen, wenn es erlaubt wäre... oder wir sagen da ist ein ' am Ende zu viel, dann ist diese Spalte nur halb so falsch wie die anderen.
        Bei 'Eingestellt' steht ein * statt des öffnenden ', also wäre dieses Feld sogar um 2 Ecken falsch

        Und #3 unbedingt beachten. Das tolle ist, dann musst du auch bei den einzufügenden Werten keine ' mehr schreiben.
        Code:
        INSERT INTO spd-dokumente
            (DokURL, Gremium, DokDat, SitzDat, DokForm, DokTitel, noeff, Eingestellt )
        values
            (?, ?, ?, ?, ?, ?, ?, ?)
        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

        Kommentar


        • #5
          Moin, moin!

          die ganzen Anmerkungen hinsichtlich der Fehler im SQL solltest du dringend befolgen!
          Der Vollständigkeit halber aber hier nochmal die Auflösung des eigentlichen Syntaxfehler-Problems, weswegen dir PHP ins Gesicht springt.

          Der String den du da als SQL Statement zusammenbastelst, ist nämlich das Problem für den Parser.
          Wenn du Werte aus einem assoziativen Array in einem String einsetzen willst, dann muss du entweder den Syntax mit den geschweiften Klammern um die Werte herum benutzen (Variante 1) oder den String aus mehreren Teilen zusammenfügen mit dem Punkt Operator (Variante 2).

          PHP-Code:
          <?php
          // original
          $wpdb -> prepare (
          "INSERT INTO 'spd-dokumente'
          ( 'DokURL', 'Gremium', 'DokDat', 'SitzDat', 'DokForm', DokTitel', 'noeff', *Eingestellt' )
          values ( '
          $_POST["dokurl"]', '$_POST["gremium"]', '$_POST["dokdat"]', '$_POST["sitzdat"]', '$_POST["dokform"]', '$_POST["doktitel"]', '$_POST["noeff"]', '$now' )"
          );

          // Variante 1
          $wpdb -> prepare (
          "INSERT INTO 'spd-dokumente'
          ( 'DokURL', 'Gremium', 'DokDat', 'SitzDat', 'DokForm', DokTitel', 'noeff', *Eingestellt' )
          values ( '
          {$_POST['dokurl']}', '{$_POST['gremium']}', '{$_POST['dokdat']}', '{$_POST['sitzdat']}', '{$_POST['dokform']}', '{$_POST['doktitel']}', '{$_POST['noeff']}', '$now' )"
          );

          // Variante 2
          $wpdb -> prepare (
          "INSERT INTO 'spd-dokumente'
          ( 'DokURL', 'Gremium', 'DokDat', 'SitzDat', 'DokForm', DokTitel', 'noeff', *Eingestellt' )
          values ( '" 
          $_POST["dokurl"] . "', '" $_POST["gremium"] . "', '" $_POST["dokdat"] . "', '" $_POST["sitzdat"] . "', '" $_POST["dokform"] . "', '" $_POST["doktitel"] ."', '" $_POST["noeff"] ."', '" $now ."' )"
          );
          Nachtrag: ich bin jetzt mal mit Absicht nur auf den Fehler mit dem String eingegangen und habe das SQL Statement selbst nciht korrigiert

          Kommentar


          • #6
            Hallo zusammen,

            hier meine "korrigierte" Version, die aber immer noch einen Syntaxfehler enthält. Was ist falsch???

            PHP-Code:

            <?php
            function dokument_inserten() {

            global 
            $wpdp;

            $now = new DateTime();
            $wpdb -> prepare (
            "INSERT INTO spd-dokumente ( DokURL, Gremium, DokDat, SitzDat, DokForm, DokTitel, noeff, Eingestellt ) VALUES ( $_POST['dokurl'], $_POST['gremium'], $_POST['dokdat'], $_POST['sitzdat'], $_POST['dokform'], $_POST['doktitel'], $_POST['noeff'], $now )"
            );
            $wpdb->query($sql);
            $last_id $wpdb->insert_id;
            $ps_f '<form method="post" action="http://huppenbroich.de/spd-simmerath/dokument-anzeigen"><input type="hidden" name="Index" value="';
            $ps_f .= $last_id '"><button style="padding: 10px;" type="submit">Anzeigen</button></form>';

            $update1 $wpdb->query($wpdb->prepare("UPDATE spd-dokumente SET Pseudoform=$ps_f WHERE Ix=$last_id"));

            $wpdb->flush();

            }
            add_shortcode('dokument-eingestellt','dokument_inserten');

            Kommentar


            • #7
              Lies dir doch bitte mal die Dokumentation von wpDB durch ...
              Wie bereits erwähnt wurde, verwendest du das prepare immer noch falsch.
              Des weiteren gibt es auch andere Methoden, die verwendet werden könnten und ggf. geeigneter sind, z.B. WPDB::insert()

              PHP-Code:

              <?php
              // ... 
              $wpdb->insert(
                  
              'spd-dokumente'
                  array(
                      
              'DokURL' => $_POST['dokurl'],
                      
              'Gremium' => $_POST['gremium'],
                      
              'DokDat' => $_POST['dokdat'],
                      
              'SitzDat' => $_POST['sitzdat'],
                      
              'DokForm' => $_POST['dokform'],
                      
              'DokTitel' => $_POST['doktitel'],
                      
              'noeff' => $_POST['noeff'],
                      
              'Eingestellt' => $now->format('Y-m-d')
                  ), 
                  array(
                      
              '%s',
                      
              '%s',
                      
              '%s',
                      
              '%s',
                      
              '%s',
                      
              '%s',
                      
              '%s',
                      
              '%s'
                  
              )
              );
              ggf. musst / kannst du die Typen noch anpassen.

              Kommentar


              • #8
                Zitat von gottfrieds Beitrag anzeigen
                hier meine "korrigierte" Version, die aber immer noch einen Syntaxfehler enthält. Was ist falsch???
                Du hast weder die Hinweise aus Post #3 noch aus Post #5 umgesetzt. Außerdem:

                $wpdb->query($sql);
                Wo wird bei dir $sql befüllt?
                sorry, shift-taste kaputt

                Kommentar


                • #9
                  Dank Eurer Hilfe habe ich nun ein syntaxfehlerfreies Stück Code. Aber leider schreibt der Befehl nicht in die Datenbank - ein Fehlermeldung erfolgt nicht (DEBUG ist an!).

                  PHP-Code:
                  function dokument_inserten() {

                   global 
                  $wpdb;
                      
                  $sqlerg=$wpdb->insert(
                       
                  'spd_dokumente',
                        array(
                           
                  'DokURL' => $_POST['dokurl'],
                           
                  'Gremium' => $_POST['gremium'],
                           
                  'DokDat' => $_POST['dokdat'],
                           
                  'SitzDat' => $_POST['sitzdat'],
                           
                  'DokForm' => $_POST['doktyp'],
                           
                  'DokTitel' => $_POST['doktitel'],
                           
                  'noeff' => $_POST['noeff']
                          )
                      );
                     
                  $last_id $wpdb->insert_id;
                      echo 
                  'Insert: ' $sqlerg ', Index: ' $last_id '<br>';
                   
                  $ps_f '<form method="post" action="http://huppenbroich.de/spd-simmerath/dokument-anzeigen"><input type="hidden" name="Index" value="';
                   
                  $ps_f .= $last_id '"><button style="padding: 10px;" type="submit">Anzeigen</button></form>';
                      
                  $sqlerg $wpdb->update(
                      
                  'spd_dokumente',
                    array(
                        
                  'Pseudoform' => $ps_f
                    
                  ),
                    array (
                        
                  'Ix' => $last_id
                    
                  )
                   );
                   echo 
                  'Update: ' $sqlerg '<br>';
                      
                  $wpdb->flush();
                  }
                  add_shortcode('dokument-eingestellt','dokument_inserten'); 
                  Was ist dann noch flach. Der Insert meldet schon false zurück.

                  Hier die Struktur der Tabelle.

                  Kommentar


                  • #10
                    Schon mal versucht die Formate mit anzugeben als 3. Parameter beim INSERT?
                    https://codex.wordpress.org/Class_Re...pdb#INSERT_row

                    Welche SQL Fehler werden ausgegeben?
                    https://codex.wordpress.org/Class_Re...ide_SQL_Errors
                    sorry, shift-taste kaputt

                    Kommentar


                    • #11
                      Ist die Stelle bei
                      Code:
                      'DokForm' => $_POST['doktyp'],
                      korrekt? Oder meinst Du
                      Code:
                      'DokForm' => $_POST['dokform'],
                      ? Bei deiner Threaderöffnung steht es anders geschrieben, deshalb frage ich.

                      Nur am Rande: ich würde mich bei den Funktionsnamen auf Englisch beschränken, insert_document() ist besser als dokument_inserten() .

                      Kommentar


                      • #12

                        pass mal das insert() an für eine Fehler Analyse:

                        PHP-Code:
                        <?php


                            $werte 
                        =   array(
                                 
                        'DokURL' => $_POST['dokurl'],
                                 
                        'Gremium' => $_POST['gremium'],
                                 
                        'DokDat' => $_POST['dokdat'],
                                 
                        'SitzDat' => $_POST['sitzdat'],
                                 
                        'DokForm' => $_POST['doktyp'],
                                 
                        'DokTitel' => $_POST['doktitel'],
                                 
                        'noeff' => $_POST['noeff']
                                );

                        $sqlerg=$wpdb->insert(
                             
                        'spd_dokumente',
                            
                        $werte
                            
                        );

                        if( 
                        $sqlerg === false )
                        {
                            echo 
                        "SQL Error: " .$wpdb->print_error() ."<br><br>";
                            echo 
                        "SQL vars:<pre>" print_r($werte1) . "</pre>";
                            echo 
                        "POST vars:<pre>" print_r($_POST1) . "</pre>";
                        }
                        dann solltest du eine Fehlerausgabe bekommen und siehst dann auch was reingegangen ist in das SQL.
                        Hilft ggf. bei der Analyse weiter ...

                        Kommentar


                        • #13
                          Dank Eurer Hilfe läuft alles. Eine Spalte war unterdimensioniert - danach lief allles!

                          Kommentar

                          Lädt...
                          X