Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Formulário PHP não está sendo inserido no banco de dados mySQL


Outros já lhe deram respostas. Para adicionar, você está usando aspas em torno dos nomes das colunas que devem ser acentos graves ou remover as aspas completamente.

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

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

ou
INSERT INTO orders (name, tacoOrder)

ou como resposta completa:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];

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

Nota:Não são necessários acentos graves, mas as aspas simples para os nomes das colunas não podem ser usadas. É apenas uma força do hábito que eu mesmo use backticks em torno dos nomes das colunas.

Além disso, este $mysql_close(); não deve ter um $ na frente de mysql_close mas $link dentro dos colchetes:

Mude para mysql_close($link);

No entanto, conforme observado pelo Sr. Alien, a variável para mysql_close() é opcional (Obrigado por isso)

Você também tem um ) ausente em if(!mysql_query($query) que deve ser lido como if(!mysql_query($query))

Considere mudar para mysqli_* funções com instruções preparadas ou PDO. O mysql_* funções estão obsoletas e serão excluídas de versões futuras.

reescrita completa:(testado e trabalhando no meu 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();

?>

Você também pode usar este método que é um pouco diferente:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
    die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }

Notas de rodapé:

Você corre o risco de obter entradas de dados vazias porque não está verificando se seus elementos de formulário são deixados vazios.

Você pode usar uma instrução condicional para o efeito de:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}

Além disso, use o que Awlad menciona em sua resposta em relação ao uso de mysql_real_escape_string()

Você também pode ler um bom artigo aqui sobre SO Como posso evitar injeção de SQL no PHP?

Aqui está um (básico) mysqli_* método baseado com o mysqli_real_escape_string() função e uma instrução condicional para verificar se algum dos campos está vazio.

Se um dos campos for deixado em branco, a consulta não será executada.
<?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);

}

?>