Anderen hebben je al antwoorden gegeven. Om toe te voegen, gebruik je aanhalingstekens rond kolomnamen die backticks moeten zijn of de aanhalingstekens helemaal verwijderen.
Wijzigen:
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
naar
INSERT INTO orders (`name`, `tacoOrder`)
of
INSERT INTO orders (name, tacoOrder)
of als volledig antwoord:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Sidenote:Backticks zijn niet vereist, maar de enkele aanhalingstekens voor de kolomnamen kunnen niet worden gebruikt. Het is gewoon een gewoonte dat ik zelf backticks gebruik rond kolomnamen.
Plus, deze $mysql_close();
mag geen $
. hebben voor mysql_close
maar $link
tussen haakjes:
Verander in mysql_close($link);
Maar zoals opgemerkt door Mr. Alien, is de variabele voor mysql_close()
is optioneel (bedankt daarvoor)
Je hebt ook een ontbrekende )
in if(!mysql_query($query)
die moet lezen als if(!mysql_query($query))
Overweeg om over te schakelen naar mysqli_*
functies met voorbereide verklaringen of PDO. De mysql_*
functies zijn verouderd en worden verwijderd uit toekomstige releases.
compleet herschrijven:(getest en werken op mijn 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();
?>
U kunt ook deze methode gebruiken, die iets anders is:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Voetnoten:
U loopt het risico lege gegevensinvoer te krijgen omdat u niet controleert of uw formulierelementen leeg zijn gelaten.
U zou een voorwaardelijke verklaring kunnen gebruiken met de volgende strekking:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
Gebruik bovendien wat Awlad vermeldt in his answer
met betrekking tot het gebruik van mysql_real_escape_string()
Je kunt hier ook een goed artikel lezen over SO How can I prevent SQL injection in PHP?
Hier is een (basis) mysqli_*
gebaseerde methode met de mysqli_real_escape_string()
functie en een voorwaardelijke instructie om te controleren of een van de velden leeg is.
Als een van de velden leeg blijft, wordt de query niet uitgevoerd.
<?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);
}
?>