Altri ti hanno già dato risposte. Per aggiungere, stai usando le virgolette attorno ai nomi delle colonne che dovrebbero essere backtick o rimuovere del tutto le virgolette.
Modifica:
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
a
INSERT INTO orders (`name`, `tacoOrder`)
o
INSERT INTO orders (name, tacoOrder)
o come risposta completa:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Nota a margine:i backtick non sono richiesti ma non è possibile utilizzare le virgolette singole per i nomi delle colonne. È solo una forza dell'abitudine che io stesso uso i backtick attorno ai nomi delle colonne.
Inoltre, questo $mysql_close();
non dovrebbe avere un $
davanti a mysql_close
ma $link
tra parentesi:
Passa a mysql_close($link);
Tuttavia, come notato da Mr. Alien, la variabile per mysql_close()
è facoltativo (grazie per questo)
Hai anche un )
mancante in if(!mysql_query($query)
che dovrebbe essere letto come if(!mysql_query($query))
Considera di passare a mysqli_*
funzioni con istruzioni preparate o PDO. Il mysql_*
le funzioni sono obsolete e verranno eliminate dalle versioni future.
riscrittura completa:(testato e lavorando sul mio server)
<?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();
?>
Potresti anche usare questo metodo che è leggermente diverso:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Note a piè di pagina:
Rischi di ottenere voci di dati vuote perché non stai controllando se gli elementi del tuo modulo sono lasciati vuoti.
Potresti usare un'istruzione condizionale con l'effetto di:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
Inoltre, usa ciò che Awlad menziona nella his answer
per quanto riguarda l'utilizzo di mysql_real_escape_string()
Puoi anche leggere un buon articolo qui su SO How can I prevent SQL injection in PHP?
Ecco un (base) mysqli_*
metodo basato con mysqli_real_escape_string()
funzione e un'istruzione condizionale per verificare se uno qualsiasi dei campi è vuoto.
Se uno dei campi viene lasciato vuoto, la query non verrà eseguita.
<?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);
}
?>