Mysql
 sql >> Database >  >> RDS >> Mysql

Modulo PHP che non si inserisce nel database MySQL

Altri ti hanno già dato risposte. Per aggiungere, stai usando le virgolette attorno ai nomi delle colonne che dovrebbero essere backtick o rimuovere del tutto le virgolette.

Modifica:

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

a

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

o

INSERT INTO orders (name, tacoOrder)

o come risposta completa:

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

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

Nota a margine:i backtick non sono richiesti ma non è possibile utilizzare le virgolette singole per i nomi delle colonne. È solo una forza dell'abitudine che io stesso uso i backtick attorno ai nomi delle colonne.

Inoltre, questo $mysql_close(); non dovrebbe avere un $ davanti a mysql_close ma $link tra parentesi:

Passa a mysql_close($link);

Tuttavia, come notato da Mr. Alien, la variabile per mysql_close() è facoltativo (grazie per questo)

Hai anche un ) mancante in if(!mysql_query($query) che dovrebbe essere letto come if(!mysql_query($query))

Considera di passare a mysqli_* funzioni con istruzioni preparate o PDO. Il mysql_* le funzioni sono obsolete e verranno eliminate dalle versioni future.

riscrittura completa:(testato e lavorando sul mio 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();

?>

Potresti anche usare questo metodo che è leggermente diverso:

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

Note a piè di pagina:

Rischi di ottenere voci di dati vuote perché non stai controllando se gli elementi del tuo modulo sono lasciati vuoti.

Potresti usare un'istruzione condizionale con l'effetto di:

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

Inoltre, usa ciò che Awlad menziona nella his answer per quanto riguarda l'utilizzo di mysql_real_escape_string()

Puoi anche leggere un buon articolo qui su SO How can I prevent SQL injection in PHP?

Ecco un (base) mysqli_* metodo basato con mysqli_real_escape_string() funzione e un'istruzione condizionale per verificare se uno qualsiasi dei campi è vuoto.

Se uno dei campi viene lasciato vuoto, la query non verrà eseguita.

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

}

?>