2017-03-23 10 views
0

Ich versuche, ein Formular Daten in meiner Datenbank zu speichern, aber ich bekomme nur leere Datensätze. Ich habe viele Lösungen getestet, aber ich weiß wirklich nicht, wo der Fehler ist. Ich werde verrückt!Leere Datenbank Datensätze nach einem Formular senden

Das ist meine Form:

<head> 

<form action="uploadall.php" method="post"> 
Name: <input type="text" name="name"><br> 
Autore: <input type="text" name="author"><br> 
Descrizione: <textarea id="editordescription" name="description" cols="45" rows="15"> 
     </textarea> 
     <script> 
      CKEDITOR.replace('editordescription'); 
     </script> 
<br>Misure: <input type="text" name="misure"><br> 
Data: <input type="text" name="date"><br> 
    <input type="hidden" name="status" value="Disattivo" size="20"> 

<input type="submit"> 
</form> 

Und das ist mein PHP-Skript Aufzeichnungen zu speichern:

 <?php 

    // check if the form has been submitted. If it has, start to process the form and save it to the database 
    if (isset($_POST['submit'])) 
    { 
    // get form data, making sure it is valid 
    $name = mysqli_real_escape_string(htmlspecialchars($_POST['name'])); 
$author = mysqli_real_escape_string(htmlspecialchars($_POST['author'])); 
    $description = mysqli_real_escape_string(htmlspecialchars($_POST['description'])); 
$misure = mysqli_real_escape_string(htmlspecialchars($_POST['misure'])); 
$date = mysqli_real_escape_string(htmlspecialchars($_POST['date'])); 
    $status = mysqli_real_escape_string(htmlspecialchars($_POST['status'])); 

    } 


    $servername = "xxxxxxx"; 
    $username = "xxxxxxx"; 
    $password = "xxxxxxx"; 
    $dbname = "xxxxxxxxx"; 

    try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "INSERT INTO exposition (name, author, description, misure, date, status) 
    VALUES ('$name', '$author', '$description', '$misure', '$date', '$status')"; 
    // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "New record created successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 


    ?> 

Und das ist, was in ich meine Datenbank im Moment:

enter image description here

+0

Mögliche Duplikat [? Kann ich mischen MySQL APIs in PHP] (http://stackoverflow.com/questions/17498216/can-i -mix-mysql-apis-in-php) –

+0

Kein Fehler erscheint? Und bitte hören Sie auf, mysql_ * '-Funktionen zu verwenden, sie sind bereits depechiert. Verwenden Sie stattdessen [PDO] (http://php.net/manual/en/book.pdo.php} oder [MySQLi] (http://php.net/manual/en/book.mysqli.php) – Swellar

+0

'mysql_real_escape_string 'und Ihre Verbindung ist' mysqli' –

Antwort

4

Zuerst mischen Sie die mysql APIs an einem Punkt, den Sie verwenden mysqli_* an einem bestimmten Punkt mit mysql_* Sie mischen nicht. Und mysql_* Funktionen werden abgeschrieben sie nicht mehr von späteren Versionen von PHP unterstützt. verwende besser mysqli oder pdo. Diese mysql_real_escape_string() oder mysqlo_real_escape_string() ist nicht sicher genug, um Sie gegen SQL-Injektionen zu verhindern. Lösung ist einfach besser beginnen mit mysqli prepared Anweisungen oder PDO prepared Anweisungen.

ein anderer Fehler: <input type="text" name="name"><input type="text" name="name"> diese zwei Eingabefelder haben das gleiche Namensattribut php liest nur eins. und Sie werden einen undefinierten Index hier $misure = $_POST['misure']; Sie müssen die Fehlerberichterstattung aktivieren, während Sie noch in der Entwicklung, so können Sie Ihre Fehler und Hinweise finden Sie unter:

fügen Sie diese am Anfang jeder PHP-Seite: ini_set('display_errors', 1); error_reporting(E_ALL);

auch date Datum ist ein reserviertes Wort für mysql, damit Sie besser etwas anderes für Ihre Spaltennamen verwenden, oder fügen Sie Schrägstriche date

Oh und Ihr Code nie hier ausführen:

if (isset($_POST['submit'])) 
{ 
// get form data, making sure it is valid 
$name = mysql_real_escape_string(htmlspecialchars($_POST['name'])); 
$author = mysql_real_escape_string(htmlspecialchars($_POST['author'])); 
    $description = mysql_real_escape_string(htmlspecialchars($_POST['description'])); 
$misure = mysql_real_escape_string(htmlspecialchars($_POST['misure'])); 
$date = mysql_real_escape_string(htmlspecialchars($_POST['date'])); 
    $status = mysql_real_escape_string(htmlspecialchars($_POST['status'])); 

} 

Warum ist das? weil Sie keinen POST Wert mit dem Attributnamen submit haben. <input type="submit"> sehen? Ihr Beitrag hat kein Namensattribut. deshalb.Das bedeutet,

alles:

VALUES ('$name', '$author', '$description', '$misure', '$date', '$status')"; Dies sind alle nicht definierten Variablen. Ich bin überrascht, warum Ihr Server Ihnen nicht mitteilt, dass mit dieser Fehlerberichterstattung alle diese erhalten werden.

Dies ist, was u müssen, dass lösen tun:

Ihre HTML-Seite.

<form action="uploadall.php" method="post"> 
Name: <input type="text" name="name"><br> 
Autore: <input type="text" name="author"><br> 
Descrizione: <textarea id="editordescription" name="description" cols="45" rows="15"> 
     </textarea> 
     <script> 
      CKEDITOR.replace('editordescription'); 
     </script> 
<br>Misure: <input type="text" name="misure"><br> 
Data: <input type="text" name="date"><br> 
    <input type="hidden" name="status" value="Disattivo" size="20"> 

<input type="submit" name="submit"> 
</form> 

uploadall.php

<?php 

// check if the form has been submitted. If it has, start to process the form and save it to the database 
if (isset($_POST['submit'])) { 

    $servername = "xxxxxxx"; 
    $username = "xxxxxxx"; 
    $password = "xxxxxxx"; 
    $dbname  = "xxxxxxxxx"; 

    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 


    //check your inputs are set and validate,filter and sanitize 
    $name  = $_POST['name']; 
    $author  = $_POST['author']; 
    $description = $_POST['description']; 
    $misure  = $_POST['misure']; 
    $date  = $_POST['date']; 
    $status  = $_POST['status']; 



    //prepare and bind 
    $sql = $conn->prepare("INSERT INTO exposition (name, author, description, misure, date, status) 
VALUES (?,?,?,?,?,?)"); 
    $sql->bind_param("ssssss", $name, $author, $description, $misure, $date); 

    if ($sql->execute()) { 

     echo "New record created successfully"; 

    } else { 

     //you have an error 
    } 

    $conn->close(); 

} 

?> 

Das ist alles viel Glück ist.

Update:

ich Fehler korrigiert hast du mir gesagt, und ich bin jetzt mit PDO, aber es noch nicht

Ich las nicht funktioniert, dass aus Ihren Kommentaren oben, aber Sie Sie sagen uns nicht, was die Fehler sind, aber ich glaube, sie sind diejenigen, die ich oben hervorgehoben habe.

mit PDO dies ist, wie u Ihr Ziel erreichen wird:

<?php 

    //connection 
    $servername = 'XXXXXXXXXXXXX'; 
    $dbname  = 'XXXXXXXXXXXXX'; 
    $username = 'XXXXXXXXXXXXXX'; 
    $password = 'XXXXXXXXX'; 
    $charset = 'utf8'; 

    $dsn = "mysql:host=$servername;dbname=$dbname;charset=$charset"; 
    $opt = [ 
      PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
      PDO::ATTR_EMULATE_PREPARES => false, 
      ]; 


    $dbh = new PDO($dsn, $username, $password, $opt); 

// check if the form has been submitted. If it has, start to process the form and save it to the database 
if (isset($_POST['submit'])) { 




    //check your inputs are set and validate,filter and sanitize 
    $name  = $_POST['name']; 
    $author  = $_POST['author']; 
    $description = $_POST['description']; 
    $misure  = $_POST['misure']; 
    $date  = $_POST['date']; 
    $status  = $_POST['status']; 

    //prepare and bind 
    $stmt = $dbh->prepare("INSERT INTO exposition (name, author, description, misure, date, status)VALUES (?,?,?,?,?,?)"); 
    if ($stmt->execute(array($name,$author,$description,$misure,$date,$status))) { 

     echo "New Record inserted success"; 
    } 

} 

?> 
+0

Beim ersten Mal funktionierte es nicht (In der ersten uploadall.php hast du '$ status' in bind_param verpasst. Ich habe es korrigiert und es funktioniert! Danke! Ich habe auch $ description = strip_tags ($ description) hinzugefügt, weil es auch HTML-Tags speichert :) Vielen Dank!) – James69

-1

Die Variablen, die Sie in Ihrer INSERT-Abfrage verwenden, sind außerhalb des Bereichs von den ersten, wenn Block, in dem Sie die Daten aus dem Formular bekommen. Wenn die Variablen vor dem ersten if-Block initialisiert werden, könnte es funktionieren. unten wie ..

$name = ""; $author = "";$description = "";$misure = "";$date = "";$status="; 


if (isset($_POST['submit'])){ // as is} 
0

Variablenname Problem Z. B Name: <input name="name"> und: Misure: <input name="name"> .Dieses müssen unterschiedlich sein.

Auch hier sollte <input type="submit"><input type="submit" name="submit"> sein. Hoffe, es wird hilfreich sein.

Verwandte Themen