2016-11-15 4 views
-1

Es kann ein kleiner Fehler sein, aber ich versuche derzeit, von einem HTML-Formular in die Datenbank zu posten, um einen neuen Eintrag hinzuzufügen. HierHTML-Formular INSERT INTO-Datenbank

ist der Code:

<div> 
    <?php 
    $menu = "INSERT INTO content (id, path, name) 
    **VALUES ('".$_POST['id']."', '".$_POST['path']."', '".$_POST['name']."')";** 

if ($connnect->query($menu) === TRUE) { 
    echo "New page added successfully"; 
} else { 
    echo "Error"; 
} 
    ?> 

    <form action="" method="post" name="menus" id="menus"> 
    <table style="width: 500px;"> 
     <tbody> 
     <tr> 
      <td> 
      <textarea name="id" id="id"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
      <textarea name="path" id="path"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
      <textarea name="name" id="name"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
      <input type="submit" name="button" id="button" value="Upload"> 
      </td> 
     </tr> 
     </tbody> 
    </table> 
    </form> 
</div> 

aber offensichtlich kann man nicht jeden $ setzt _POST aus der Form in jeden Wert gibt es eine andere Möglichkeit, dies zu tun, oder kann mir jemand helfen?

Mit freundlichen Grüßen, Lewis

+0

Wie Sie durch die ** Linie sehen ** das ist, wo ich auf die Frage beziehe mich –

+3

ich außer nichts falsch mit der Abfrage sehen, dass es eine SQL-Injection geöffnet ist. Ich bin mir nicht sicher, worum es genau geht. Was genau meinst du damit: "offensichtlich kannst du nicht jedes $ _POST aus dem Formular in jeden Wert eintragen"? – Maximus2012

+1

Und was genau ist das Problem? Erhalten Sie eine Fehlermeldung? –

Antwort

0

Verwendung sprintf, die es ein bisschen besser lesbar in der Reihenfolge der Parameter auf die Werte übergeben machen:

$menu = sprintf("INSERT INTO content (id, path, name) VALUES ('%s', '%s', '%s')", mysql_real_escape_string($_POST['id']), mysql_real_escape_string($_POST['path']), mysql_real_escape_string($_POST['name'])); 
0

In Anbetracht dieser ist Ihr Full-Code, eine Haupt Problem ist, dass Sie den Formularinhalt jedes Mal einfügen, wenn die Seite geladen wird. Wenn sich Ihre Formularverarbeitung auf derselben Seite befindet, können Sie eine einfache Überprüfung hinzufügen. Zum Beispiel:

<?php 

if (isset($_POST['submit'])) { 

    # form information received, process it 
} 

# else continue with your normal script and display the form 
?> 

In diesem Fall in einer ersten Seite lädt die $_POST Daten nicht so eingestellt sind, nur die Form apear wird. Wenn das Formular jedoch übergeben wird, erkennt das Skript, dass Daten vorhanden sind, und verarbeitet sie.

Und in den Kommentaren erklärt, PHP Data Objects (oder PDO für kurz) ist eine viel modernere, tragbare und sichere Möglichkeit, mit Datenbanken umzugehen. Im Internet gibt es viele Erklärungen dazu, wie und warum; und die Handbuchseite selbst ist ziemlich einfach zu lesen. Sie können Anweisungen vorbereiten, und dann wird die Klasse selbst alle erforderlichen Schritte ausführen, um Ihr Skript zu sichern. Schnell Beispiel:

# make a connection 
$db = new PDO(/* database info */); 
# prepare your statement with the placeholders for your data 
$st = $db->prepare(" 
    INSERT INTO content (id, path, name) 
     VALUES (?,?,?) 
"); 
# execute the query with the POST data 
$success = $st->execute([ 
    $_POST['id'], 
    $_POST['path'], 
    $_POST['name'] 
]); 

if (!$success) { 
    # error ... 
}