Inni już udzielili ci odpowiedzi. Aby dodać, używasz cudzysłowów wokół nazw kolumn, które powinny być znakami wstecznymi lub całkowicie usunąć cudzysłowy.
Zmień:
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
do
INSERT INTO orders (`name`, `tacoOrder`)
lub
INSERT INTO orders (name, tacoOrder)
lub jako pełną odpowiedź:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Uwaga dodatkowa:Znaki nie są wymagane, ale nie można używać pojedynczych cudzysłowów w nazwach kolumn. To tylko siła przyzwyczajenia, że sam używam backticków wokół nazw kolumn.
Plus, to $mysql_close();
nie powinien mieć $
przed mysql_close
ale $link
wewnątrz nawiasów:
Zmień na mysql_close($link);
Jednak, jak zauważył pan Alien, zmienna dla mysql_close()
jest opcjonalne (Dzięki za to)
Masz również brakujący )
w if(!mysql_query($query)
które powinno brzmieć jako if(!mysql_query($query))
Rozważ przejście na mysqli_*
funkcje z przygotowanymi oświadczeniami lub PDO. mysql_*
funkcje są przestarzałe i zostaną usunięte z przyszłych wydań.
kompletne przepisanie:(testowane i pracuję na moim serwerze)
<?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();
?>
Możesz również użyć tej metody, która jest nieco inna:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Przypisy:
Ryzykujesz otrzymaniem pustych wpisów danych, ponieważ nie sprawdzasz, czy elementy formularza są puste.
Możesz użyć instrukcji warunkowej w celu:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
Ponadto użyj tego, o czym Awlad wspomina w jego odpowiedzi
w odniesieniu do używania mysql_real_escape_string()
Możesz również przeczytać dobry artykuł na temat SO Jak mogę zapobiec wstrzykiwaniu SQL w PHP?
Oto (podstawowy) mysqli_*
oparta na metodzie mysqli_real_escape_string()
funkcję i instrukcję warunkową, aby sprawdzić, czy któreś z pól jest puste.
Jeśli jedno z pól pozostanie puste, zapytanie nie zostanie wykonane.
<?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);
}
?>