Други вече ви дадоха отговори. За да добавите, използвате кавички около имената на колони, които трябва да бъдат обратни тикчета или да премахнете кавичките като цяло.
Промяна:
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
до
INSERT INTO orders (`name`, `tacoOrder`)
или
INSERT INTO orders (name, tacoOrder)
или като пълен отговор:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Странична бележка:Не се изискват обратни отметки, но единичните кавички за имената на колоните не могат да се използват. Това е просто сила на навика, че аз самият използвам обратни отметки около имената на колони.
Плюс това $mysql_close();
не трябва да има $
пред mysql_close
но $link
вътре в скобите:
Променете на mysql_close($link);
И все пак, както отбеляза г-н Alien, променливата за mysql_close()
е по избор (Благодаря за това)
Също така имате липсващ )
в if(!mysql_query($query)
който трябва да се чете като if(!mysql_query($query))
Обмислете превключване към mysqli_*
функции с подготвени оператори или PDO. mysql_*
функциите са отхвърлени и ще бъдат изтрити от бъдещи издания.
пълно пренаписване:(тествано и работи на моя сървър)
<?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();
?>
Можете също да използвате този метод, който е малко по-различен:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Бележки под линия:
Рискувате да получите празни въведени данни, защото не проверявате дали елементите на формуляра са оставени празни.
Можете да използвате условен израз с ефекта на:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
Освен това използвайте това, което Авлад споменава в отговора му
по отношение на използването на mysql_real_escape_string()
Можете също да прочетете добра статия тук на SO Как мога да предотвратя SQL инжектирането в PHP?код>
Ето един (основен) mysqli_*
базиран метод с mysqli_real_escape_string()
функция и условен израз за проверка дали някое от полетата е празно.
Ако едно от полетата остане празно, заявката няма да се изпълни.
<?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);
}
?>