sql >> Database >  >> RDS >> Mysql

PHP-formulier wordt niet in de mySQL-database ingevoegd

Anderen hebben je al antwoorden gegeven. Om toe te voegen, gebruik je aanhalingstekens rond kolomnamen die backticks moeten zijn of de aanhalingstekens helemaal verwijderen.

Wijzigen:

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

naar

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

of

INSERT INTO orders (name, tacoOrder)

of als volledig antwoord:

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

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

Sidenote:Backticks zijn niet vereist, maar de enkele aanhalingstekens voor de kolomnamen kunnen niet worden gebruikt. Het is gewoon een gewoonte dat ik zelf backticks gebruik rond kolomnamen.

Plus, deze $mysql_close(); mag geen $ . hebben voor mysql_close maar $link tussen haakjes:

Verander in mysql_close($link);

Maar zoals opgemerkt door Mr. Alien, is de variabele voor mysql_close() is optioneel (bedankt daarvoor)

Je hebt ook een ontbrekende ) in if(!mysql_query($query) die moet lezen als if(!mysql_query($query))

Overweeg om over te schakelen naar mysqli_* functies met voorbereide verklaringen of PDO. De mysql_* functies zijn verouderd en worden verwijderd uit toekomstige releases.

compleet herschrijven:(getest en werken op mijn 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();

?>

U kunt ook deze methode gebruiken, die iets anders is:

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

Voetnoten:

U loopt het risico lege gegevensinvoer te krijgen omdat u niet controleert of uw formulierelementen leeg zijn gelaten.

U zou een voorwaardelijke verklaring kunnen gebruiken met de volgende strekking:

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

Gebruik bovendien wat Awlad vermeldt in his answer met betrekking tot het gebruik van mysql_real_escape_string()

Je kunt hier ook een goed artikel lezen over SO How can I prevent SQL injection in PHP?

Hier is een (basis) mysqli_* gebaseerde methode met de mysqli_real_escape_string() functie en een voorwaardelijke instructie om te controleren of een van de velden leeg is.

Als een van de velden leeg blijft, wordt de query niet uitgevoerd.

<?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. Lezen van bestand naar variabele - Bash Script take2

  2. verwijder waar id het grootst is

  3. Indexering voor BINARY LIKE-bewerkingen in MySQL

  4. Nieuwe stuurprogramma's voor SQL Server... Wat u moet weten