2016-09-25 3 views
0

Ich versuche ein Nachrichtensystem zu erstellen, also muss ich nur das Formular ausfüllen, um einen Artikel zu posten. Leider scheint meine INSERT INTO-Abfrage nach vielen Versuchen und Methoden nichts zu tun zu haben. Ich arbeite mit 2 separaten Dateien: addnews.php (das Formular) und confirm.php. Ich übersetzte alles aus dem Französisch, so dass es leichter für Sie zu lesen ist.Meine INSERT INTO-Abfrage funktioniert nicht

Hier ist die Form Code, der feine Arbeit ist:

 <div id="centerbox" class="news1" align="center"> 
     <h1>Write a news</h1><br> 
     <form method="post" action="confirm.php"> 
      <p>Title:</p> 
      <input type="text" name="title"><br> 

      <p>Content:</p> 
      <textarea name="content" rows="8" cols="45"></textarea> 
      <br> 
      <p>Picture to display:</p> 
      <select name="picture"> 
       <option value="news">pics/INFO_IMPORTANTE.jpg</option> 
       <option value="event">pics/EVENEMENT.jpg</option> 
       <option value="helpme">pics/DEMANDE_AIDE.jpg</option> 
       <option value="helpyou">pics/PROPOSITION_AIDE.jpg</option> 
      </select> 

      <p>Your name:</p> 
      <input type="text" name="author"><br> 

      <input type="hidden" name="date" value="<?php echo date("d/m/Y"); ?>"> 

       <input type="submit" value="Confirm"> 
     </form> 
    </div> 

Und hier ist der Code in confirm.php:

 <?php 
    try 
    { 
     $bdd = new PDO('mysql:host=localhost;dbname=L1-EVMAN', 'root', ''); 
    } 
    catch (Exception $e) 
    { 
     die('Error : ' . $e->getMessage()); 
    } 
    ?> 

     <?php 
     $title = htmlspecialchars($_POST['title']); 
     $picture = $_POST['picture']; 
     $content = htmlspecialchars($_POST['content']); 
     $author = htmlspecialchars($_POST['author']); 
     $time = date('d/m/Y'); 

     if (empty($title) OR empty($content) OR empty($author)) 
     { 
      echo '<font color="red">You have to fill everything !</font><br> 
      <a href="http://localhost/sourcemaster/addnews>Start over</a>'; 
     } 
     else 
     { 
      $addnews = $bdd->prepare('INSERT INTO news (id, title, pic, content, author, time) VALUES(NULL, :$title, :$picture, :$content, :$author, :$time)'); 
      $addnews->execute(array(
       'title' => $title, 
       'pic' => $picture, 
       'content' => $content, 
       'author' => $author, 
       'time' => $time 
       )); 

      echo 'The news has been added correctly.'; 
      } 
     ?> 

Das Problem ist, dass, wenn ich das Formular ausfüllen und bestätigen, es heißt, dass die Nachrichten hinzugefügt wurden, aber nichts erscheint auf der Nachrichtenseite (was gut funktioniert, wenn ich manuell alles in der Tabelle hinzufüge). Ich bin wirklich neu in all dem und ich kann dir sagen, dass ich am Ende ein wenig improvisiert habe, gefolgt von einigen Tutorials, die ich gefunden habe, aber keiner von ihnen scheint mir zu helfen.

Also ich bitte euch um Hilfe. Fühlen Sie sich frei, nach mehr Details oder irgendetwas zu bitten.

Vielen Dank!

+2

für eine Sache, die Sie die gU Verbindung setzen müssen Attribute Ausnahmen zu feuern. '$ bdd-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' – Drew

+3

das ist nicht so, wie Sie Platzhalter im sql verwenden würden - es sollte eher wie 'INSERT INTO news (ID, Titel, Bild, Inhalt, Autor, Zeit) VALUES (NULL,: Titel,: Bild,: Inhalt,: Autor,: Zeit) 'und die entsprechenden Einträge im Array params (wo Sie die Anweisung ausführen) sollte den Doppelpunkt haben – RamRaider

+2

Entfernen Sie das Dollarzeichen in Ihrem Bindeparameter. I.e. Ändern Sie in Ihrer tatsächlichen Einfügeabfrage: $ title to: title. –

Antwort

1

Ihr Einfügeabfrageparameter ist falsch.

: $ title zum Beispiel dehnt sich zu: „Alles, was der Benutzer eingegeben“

Und Sie haben keine solchen Parameter gebunden.

Sie haben den „$“ von dem bind Parameter zu entfernen:

'INSERT INTO news (id, title, pic, content, author, time) VALUES(NULL, :title, :picture, :content, :author, :time) 
+0

Ich habe das "$" entfernt und erhalte jetzt einen schwerwiegenden Fehler: Schwerwiegender Fehler: Nicht abgefangene Ausnahme 'PDOException' mit Nachricht 'SQLSTATE [22007]: Ungültiges Datum/Uhrzeit-Format: 1292 Falscher Datum/Uhrzeit-Wert: '25/09/2016' für Spalte 'time' in Zeile 1 'in C: \ wamp64 \ www \ sourcemaster \ confirm.php in Zeile 65 – Intronium

+0

Wenn Sie ein Datum in MySQL einfügen, sollte das Datumsformat Ymd sein –

Verwandte Themen