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

PHP-formular indsættes ikke i mySQL-databasen

Andre har allerede givet dig svar. For at tilføje, bruger du anførselstegn omkring kolonnenavne, som skal være backticks eller fjerne anførselstegnene helt.

Skift:

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

til

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

eller

INSERT INTO orders (name, tacoOrder)

eller som et fuldstændigt svar:

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

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

Sidenote:Backticks er ikke påkrævet, men de enkelte anførselstegn for kolonnenavnene kan ikke bruges. Det er bare en vanekraft, at jeg selv bruger backticks omkring kolonnenavne.

Plus denne $mysql_close(); bør ikke have en $ foran mysql_close men $link inden for parenteserne:

Skift til mysql_close($link);

Men som bemærket af Mr. Alien, variablen for mysql_close() er valgfri (tak for det)

Du mangler også en ) i if(!mysql_query($query) som skal læses som if(!mysql_query($query))

Overvej at skifte til mysqli_* funktioner med udarbejdede erklæringer eller PDO. mysql_* funktioner er forældede og vil blive slettet fra fremtidige udgivelser.

komplet omskrivning:(testet og arbejder 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 også bruge denne metode, som er lidt anderledes:

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

Fodnoter:

Du risikerer at få tomme dataindtastninger, fordi du ikke tjekker, om dine formularelementer er tomme.

Du kan bruge en betinget erklæring med virkningen af:

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

Brug desuden det, Awlad nævner i hans svar med hensyn til at bruge mysql_real_escape_string()

Du kan også læse en god artikel her om SO Hvordan kan jeg forhindre SQL-injektion i PHP?

Her er en (grundlæggende) mysqli_* baseret metode med mysqli_real_escape_string() funktion og en betinget sætning for at kontrollere, om nogen af ​​felterne er tomme.

Hvis et af felterne efterlades tomt, udføres forespørgslen ikke.

<?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. Hvordan holder data ikke sorteret?

  2. MySQL, som er mere effektiv longtext, tekst eller blob? Forbedring af skæreffektiviteten

  3. Hvordan opretter man forbindelse til en MySQL-database fra en iPhone?

  4. Tabeltype i Oracle PL SQL-eksempel