Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP формуляр не се вмъква в mySQL база данни

Други вече ви дадоха отговори. За да добавите, използвате кавички около имената на колони, които трябва да бъдат обратни тикчета или да премахнете кавичките като цяло.

Промяна:

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

до

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

или

INSERT INTO orders (name, tacoOrder)

или като пълен отговор:

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

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

Странична бележка:Не се изискват обратни отметки, но единичните кавички за имената на колоните не могат да се използват. Това е просто сила на навика, че аз самият използвам обратни отметки около имената на колони.

Плюс това $mysql_close(); не трябва да има $ пред mysql_close но $link вътре в скобите:

Променете на mysql_close($link);

И все пак, както отбеляза г-н Alien, променливата за mysql_close() е по избор (Благодаря за това)

Също така имате липсващ ) в if(!mysql_query($query) който трябва да се чете като if(!mysql_query($query))

Обмислете превключване към mysqli_* функции с подготвени оператори или PDO. mysql_* функциите са отхвърлени и ще бъдат изтрити от бъдещи издания.

пълно пренаписване:(тествано и работи на моя сървър)

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

?>

Можете също да използвате този метод, който е малко по-различен:

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

Бележки под линия:

Рискувате да получите празни въведени данни, защото не проверявате дали елементите на формуляра са оставени празни.

Можете да използвате условен израз с ефекта на:

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

Освен това използвайте това, което Авлад споменава в отговора му по отношение на използването на mysql_real_escape_string()

Можете също да прочетете добра статия тук на SO Как мога да предотвратя SQL инжектирането в PHP?

Ето един (основен) mysqli_* базиран метод с mysqli_real_escape_string() функция и условен израз за проверка дали някое от полетата е празно.

Ако едно от полетата остане празно, заявката няма да се изпълни.

<?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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Таблицата няма първичен ключ

  2. apache mysql - пакети извън ред на 3306

  3. Грешка при изключение на Java - Sqlite readyStatement.setBlob

  4. Копиране на mysql бази данни от един компютър на друг

  5. Дублиран запис за ключ 'PRIMARY'. Игнориране на интервалите за низове