sql >> Databasteknik >  >> RDS >> Mysql

PHP-formulär infogas inte i mySQL-databasen

Andra har redan gett dig svar. För att lägga till använder du citattecken runt kolumnnamn som ska vara backticks eller ta bort citattecken helt och hållet.

Ändra:

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

till

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

eller

INSERT INTO orders (name, tacoOrder)

eller som ett fullständigt svar:

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

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

Sidenote:Backticks krävs inte men de enskilda citattecken för kolumnnamnen kan inte användas. Det är bara en vanans kraft att jag själv använder backticks kring kolumnnamn.

Dessutom denna $mysql_close(); ska inte ha en $ framför mysql_close men $link innanför parentesen:

Ändra till mysql_close($link);

Men som noterat av Mr. Alien, variabeln för mysql_close() är valfritt (tack för det)

Du saknar också en ) i if(!mysql_query($query) som ska läsas som if(!mysql_query($query))

Överväg att byta till mysqli_* funktioner med förberedda uttalanden eller PDO. mysql_* funktioner är föråldrade och kommer att tas bort från framtida utgåvor.

fullständig omskrivning:(testad och arbetar på min 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();

?>

Du kan också använda den här metoden som är något annorlunda:

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

Fotnoter:

Du riskerar att få tomma dataposter eftersom du inte kontrollerar om dina formulärelement lämnas tomma.

Du kan använda ett villkorligt uttalande till effekten av:

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

Använd dessutom det Awlad nämner i sitt svar när det gäller att använda mysql_real_escape_string()

Du kan också läsa en bra artikel här om SO Hur kan jag förhindra SQL-injektion i PHP?

Här är en (grundläggande) mysqli_* baserad metod med mysqli_real_escape_string() funktion och en villkorssats för att kontrollera om något av fälten är tomma.

Om ett av fälten lämnas tomt kommer frågan inte att köras.

<?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. Installera och anslut till PostgreSQL 10 på Ubuntu 16.04

  2. Hur fungerar "in"-klausulen i Oracle

  3. SQLite NOT NULL-begränsning

  4. Använder du LIMIT inom GROUP BY för att få N resultat per grupp?