sql >> Base de Datos >  >> RDS >> Mysql

El formulario PHP no se inserta en la base de datos mySQL

Otros ya te han dado respuestas. Para agregar, está usando comillas alrededor de los nombres de las columnas que deben ser acentos graves o eliminar las comillas por completo.

Cambiar:

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

a

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

o

INSERT INTO orders (name, tacoOrder)

o como respuesta completa:

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

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

Nota al margen:No se requieren acentos graves, pero no se pueden usar comillas simples para los nombres de las columnas. Es solo una fuerza del hábito que yo mismo uso acentos graves en los nombres de las columnas.

Además, este $mysql_close(); no debe tener un $ delante de mysql_close pero $link dentro de los corchetes:

Cambiar a mysql_close($link);

Sin embargo, como señaló el Sr. Alien, la variable para mysql_close() es opcional (Gracias por eso)

También te falta un ) en if(!mysql_query($query) que debería leerse como if(!mysql_query($query))

Considere cambiar a mysqli_* funciones con sentencias preparadas o PDO. El mysql_* Las funciones están en desuso y se eliminarán de versiones futuras.

reescritura completa:(probado y trabajando en mi servidor)

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

?>

También puedes usar este método que es ligeramente diferente:

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

Notas al pie:

Corre el riesgo de obtener entradas de datos vacías porque no está comprobando si los elementos de su formulario están vacíos.

Podría usar una declaración condicional con el efecto de:

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

Además, usa lo que Awlad menciona en his answer con respecto al uso de mysql_real_escape_string()

También puede leer un buen artículo aquí sobre SO How can I prevent SQL injection in PHP?

Aquí hay un (básico) mysqli_* método basado en mysqli_real_escape_string() función y una declaración condicional para verificar si alguno de los campos está vacío.

Si uno de los campos se deja vacío, la consulta no se ejecutará.

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

}

?>