Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP-Formular wird nicht in mySQL-Datenbank eingefügt

Andere haben Ihnen bereits Antworten gegeben. Um hinzuzufügen, verwenden Sie Anführungszeichen um Spaltennamen, die Backticks sein sollten, oder entfernen Sie die Anführungszeichen ganz.

Änderung:

INSERT INTO orders ('name', 'tacoOrder')
                    ^    ^  ^         ^

zu

INSERT INTO orders (`name`, `tacoOrder`)

oder

INSERT INTO orders (name, tacoOrder)

oder als vollständige Antwort:

$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];

$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";

Nebenbemerkung:Backticks sind nicht erforderlich, aber die einfachen Anführungszeichen für die Spaltennamen können nicht verwendet werden. Es ist nur eine Gewohnheit, dass ich selbst Backticks um Spaltennamen verwende.

Außerdem dieses $mysql_close(); sollte kein $ haben vor mysql_close sondern $link innerhalb der Klammern:

Wechseln Sie zu mysql_close($link);

Doch wie von Herrn Alien angemerkt, die Variable für mysql_close() ist optional (Danke dafür)

Sie haben auch einen fehlenden ) in if(!mysql_query($query) was wie folgt lauten sollte:if(!mysql_query($query))

Erwägen Sie den Wechsel zu mysqli_* Funktionen mit vorbereiteten Anweisungen oder PDO. Der mysql_* Funktionen sind veraltet und werden aus zukünftigen Versionen gelöscht.

komplett neu geschrieben:(getestet und auf meinem Server arbeiten)

<?php

define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);

if(!$link)
{
    die('Could not connect to database: ' . mysql_error());
}

$db_select = mysql_select_db(DB_NAME);

if(!$db_select)
{
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

echo "HOLY EFF";
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];

$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysql_query($query))
{
    die("DAMMIT");
}
else{ echo "Success"; }

mysql_close();

?>

Sie können auch diese etwas andere Methode verwenden:

$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
    die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }

Fußnoten:

Sie riskieren, leere Dateneinträge zu erhalten, da Sie nicht überprüfen, ob Ihre Formularelemente leer bleiben.

Sie könnten eine bedingte Anweisung mit folgendem Effekt verwenden:

if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}

Verwenden Sie außerdem, was Awlad in his answer erwähnt in Bezug auf die Verwendung von mysql_real_escape_string()

Sie können auch einen guten Artikel hier auf SO lesen How can I prevent SQL injection in PHP?

Hier ist ein (einfaches) mysqli_* basierte Methode mit dem mysqli_real_escape_string() Funktion und eine bedingte Anweisung, um zu prüfen, ob eines der Felder leer ist.

Wenn eines der Felder leer gelassen wird, wird die Abfrage nicht ausgeführt.

<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS);

if(!$link)
{
    die('Could not connect to database: ' . mysqli_error());
}

$db_select = mysqli_select_db($link,DB_NAME);

if(!$db_select)
{
    die('Can\'t use ' . DB_NAME . ': ' . mysqli_error());
}

echo "HOLY EFF";
$name = mysqli_real_escape_string($link,$_POST['name']);
$tacoOrder = mysqli_real_escape_string($link,$_POST['tacoOrder']);


if(!empty($_POST['name']) || !empty($_POST['tacoOrder'])){
$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysqli_query($link,$query))
{
    die("DAMMIT");
}
else{ echo "Success"; }

mysqli_close($link);

}

?>