Orang lain telah memberi Anda jawaban. Untuk menambahkan, Anda menggunakan tanda kutip di sekitar nama kolom yang harus berupa tanda kutip balik atau hapus tanda kutip sama sekali.
Ubah:
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
untuk
INSERT INTO orders (`name`, `tacoOrder`)
atau
INSERT INTO orders (name, tacoOrder)
atau sebagai jawaban lengkapnya:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Sidenote:Backticks tidak diperlukan tetapi tanda kutip tunggal untuk nama kolom tidak dapat digunakan. Itu hanya kekuatan kebiasaan bahwa saya sendiri menggunakan backticks di sekitar nama kolom.
Plus, $mysql_close();
. ini tidak boleh memiliki $
di depan mysql_close
tapi $link
di dalam kurung:
Ubah ke mysql_close($link);
Namun seperti yang dicatat oleh Tuan Alien, variabel untuk mysql_close()
adalah opsional (Terima kasih untuk itu)
Anda juga memiliki )
. yang hilang di if(!mysql_query($query)
yang seharusnya dibaca sebagai if(!mysql_query($query))
Pertimbangkan untuk beralih ke mysqli_*
fungsi dengan pernyataan yang disiapkan atau PDO. mysql_*
fungsi tidak digunakan lagi dan akan dihapus dari rilis mendatang.
penulisan ulang lengkap:(diuji dan bekerja di server saya)
<?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();
?>
Anda juga bisa menggunakan metode ini yang sedikit berbeda:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Catatan Kaki:
Anda berisiko mendapatkan entri data kosong karena Anda tidak memeriksa apakah elemen formulir Anda dibiarkan kosong.
Anda dapat menggunakan pernyataan kondisional sebagai efek dari:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
Plus, gunakan apa yang Awlad sebutkan di his answer
sehubungan dengan menggunakan mysql_real_escape_string()
Anda juga dapat membaca artikel bagus di sini di SO How can I prevent SQL injection in PHP?
Berikut adalah (dasar) mysqli_*
metode berbasis dengan mysqli_real_escape_string()
fungsi dan pernyataan bersyarat untuk memeriksa apakah ada bidang yang kosong.
Jika salah satu bidang dibiarkan kosong, kueri tidak akan dijalankan.
<?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);
}
?>