D'autres vous ont déjà donné des réponses. Pour ajouter, vous utilisez des guillemets autour des noms de colonne qui devraient être des backticks ou supprimer complètement les guillemets.
Modifier :
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
à
INSERT INTO orders (`name`, `tacoOrder`)
ou
INSERT INTO orders (name, tacoOrder)
ou comme réponse complète :
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Sidenote :les backticks ne sont pas nécessaires, mais les guillemets simples pour les noms de colonne ne peuvent pas être utilisés. C'est juste une force d'habitude que j'utilise moi-même des backticks autour des noms de colonnes.
De plus, ce $mysql_close();
ne devrait pas avoir de $
devant mysql_close
mais $link
entre parenthèses :
Passez à mysql_close($link);
Pourtant, comme l'a noté M. Alien, la variable pour mysql_close()
est facultatif (merci pour cela)
Vous avez également un )
manquant dans if(!mysql_query($query)
qui devrait se lire comme if(!mysql_query($query))
Envisagez de passer à mysqli_*
fonctions avec des instructions préparées ou PDO. Le mysql_*
les fonctions sont obsolètes et seront supprimées des futures versions.
réécriture complète :(testé et travaillant sur mon serveur)
<?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();
?>
Vous pouvez également utiliser cette méthode légèrement différente :
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Notes de bas de page :
Vous risquez d'obtenir des entrées de données vides car vous ne vérifiez pas si vos éléments de formulaire sont laissés vides.
Vous pouvez utiliser une instruction conditionnelle à l'effet de :
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
De plus, utilisez ce qu'Awlad mentionne dans his answer
en ce qui concerne l'utilisation de mysql_real_escape_string()
Vous pouvez également lire un bon article ici sur SO How can I prevent SQL injection in PHP?
Voici un mysqli_*
(de base) méthode basée sur mysqli_real_escape_string()
fonction et une instruction conditionnelle pour vérifier si l'un des champs est vide.
Si l'un des champs est laissé vide, la requête ne s'exécutera pas.
<?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);
}
?>