sql >> Databáze >  >> RDS >> Mysql

PHP formulář se nevkládá do databáze mySQL

Jiní vám již odpověděli. Chcete-li přidat, používáte uvozovky kolem názvů sloupců, které by měly být zaškrtnuté, nebo uvozovky úplně odstraňte.

Změna:

INSERT INTO orders ('name', 'tacoOrder')
                    ^    ^  ^         ^

do

INSERT INTO orders (`name`, `tacoOrder`)

nebo

INSERT INTO orders (name, tacoOrder)

nebo jako úplná odpověď:

$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];

$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";

Vedlejší poznámka:Zpětné zaškrtnutí nejsou povinné, ale u názvů sloupců nelze použít jednoduché uvozovky. Je to jen síla zvyku, že já sám používám u názvů sloupců zpětné zaškrtnutí.

Navíc toto $mysql_close(); by neměl mít $ před mysql_close ale $link uvnitř závorek:

Změňte na mysql_close($link);

Přesto, jak poznamenal pan Alien, proměnná pro mysql_close() je volitelné (díky za to)

Také vám chybí ) v if(!mysql_query($query) které by se mělo číst jako if(!mysql_query($query))

Zvažte přechod na mysqli_* funkce s připravenými výpisy nebo PDO. mysql_* funkce jsou zastaralé a budou odstraněny z budoucích verzí.

kompletní přepsání:(testováno a pracuji na mém serveru)

<?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();

?>

Můžete také použít tuto metodu, která je mírně odlišná:

$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
    die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }

Poznámky pod čarou:

Riskujete, že získáte prázdné datové položky, protože nekontrolujete, zda vaše prvky formuláře nejsou prázdné.

Můžete použít podmíněný příkaz ve smyslu:

if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}

Navíc použijte to, co Awlad zmiňuje v jeho odpovědi pokud jde o použití mysql_real_escape_string()

Můžete si také přečíst dobrý článek zde na SO Jak mohu zabránit vkládání SQL v PHP?

Zde je (základní) mysqli_* metoda založená na mysqli_real_escape_string() funkce a podmíněný příkaz ke kontrole, zda není některé z polí prázdné.

Pokud jedno z polí zůstane prázdné, dotaz se neprovede.

<?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);

}

?>


  1. je MySql dobrý pro velké databáze?

  2. Jak CEILING() funguje v MariaDB

  3. Různé způsoby porovnání schématu a dat tabulek SQL Server

  4. Nápověda SQL | Výběrový seznam pro příkaz INSERT obsahuje méně položek než seznam insert