Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le formulaire PHP ne s'insère pas dans la base de données mySQL

D'autres vous ont déjà donné des réponses. Pour ajouter, vous utilisez des guillemets autour des noms de colonne qui devraient être des backticks ou supprimer complètement les guillemets.

Modifier :

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

à

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

ou

INSERT INTO orders (name, tacoOrder)

ou comme réponse complète :

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

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

Sidenote :les backticks ne sont pas nécessaires, mais les guillemets simples pour les noms de colonne ne peuvent pas être utilisés. C'est juste une force d'habitude que j'utilise moi-même des backticks autour des noms de colonnes.

De plus, ce $mysql_close(); ne devrait pas avoir de $ devant mysql_close mais $link entre parenthèses :

Passez à mysql_close($link);

Pourtant, comme l'a noté M. Alien, la variable pour mysql_close() est facultatif (merci pour cela)

Vous avez également un ) manquant dans if(!mysql_query($query) qui devrait se lire comme if(!mysql_query($query))

Envisagez de passer à mysqli_* fonctions avec des instructions préparées ou PDO. Le mysql_* les fonctions sont obsolètes et seront supprimées des futures versions.

réécriture complète :(testé et travaillant sur mon serveur)

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

?>

Vous pouvez également utiliser cette méthode légèrement différente :

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

Notes de bas de page :

Vous risquez d'obtenir des entrées de données vides car vous ne vérifiez pas si vos éléments de formulaire sont laissés vides.

Vous pouvez utiliser une instruction conditionnelle à l'effet de :

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

De plus, utilisez ce qu'Awlad mentionne dans his answer en ce qui concerne l'utilisation de mysql_real_escape_string()

Vous pouvez également lire un bon article ici sur SO How can I prevent SQL injection in PHP?

Voici un mysqli_* (de base) méthode basée sur mysqli_real_escape_string() fonction et une instruction conditionnelle pour vérifier si l'un des champs est vide.

Si l'un des champs est laissé vide, la requête ne s'exécutera pas.

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

}

?>