PHP, проблема с базой данных - PullRequest
1 голос
/ 03 апреля 2012

У меня есть этот кусок кода

<?php


$con = mysql_connect("localhost","root","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("tables", $con);
$sql="INSERT INTO customer (Name, Telephone, Email, Address, PostCode, Specialisation )
VALUES
($_POST['firstname'], $_POST['telephone'],$_POST['email'],         $_POST['address'],$_POST['postcode'],$_POST['special'])";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
} 
echo "Inserted into Worker database";

mysql_close($con);
?>

Я получаю эту ошибку- Ошибка синтаксического анализа: синтаксическая ошибка, неожиданная ошибка T_ENCAPSED_AND_WHITESPACE, ожидая T_STRING или T_VARIABLE или T_NUM_STRING in.

Я не являюсьуверен, что еще делать.Пожалуйста помоги.Спасибо

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

У вас есть несколько проблем.

Во-первых, строковые значения, которые вы вставляете в базу данных, должны заключаться в одинарные кавычки.

Во-вторых, переменные-массивы в строках должны быть заключены в {}(т. е. $string = "Something something {$_POST['variable']}...";, чтобы помочь синтаксическому анализатору PHP разобраться с ними.

В-третьих, этот код (после его работы) чрезвычайно уязвим для взлома с помощью SQL-инъекции. Рассмотрите возможность использования PDO и подготовленных операторов (в качестве функций mysql_*).устарели) или, по крайней мере, введите пользовательский ввод через mysql_real_escape_string().

$sql="INSERT INTO customer (Name, Telephone, Email, Address, PostCode, Specialisation) VALUES ('" . mysql_real_escape_string($_POST['firstname']) . "', '" . mysql_real_escape_string($_POST['telephone']) . "', '" . mysql_real_escape_string($_POST['email']) . "', '" . mysql_real_escape_string($_POST['address']) . "', '" . mysql_real_escape_string($_POST['postcode']) . "', '" . mysql_real_escape_string($_POST['special']) . "')";

В-четвертых, вам действительно не следует использовать пользователя базы данных root для подключения.

1 голос
/ 03 апреля 2012

Измените переменную $sql, чтобы она читалась в одной строке и отправляла правильный формат в SQL:

$sql="INSERT INTO customer (Name, Telephone, Email, Address, PostCode, Specialisation ) VALUES ({$_POST['firstname']}, {$_POST['telephone']},{$_POST['email']}, {$_POST['address']},{$_POST['postcode']},{$_POST['special']})";

Это должно исправить ошибку PHP unexpected T_ENCAPSED_AND_WHITESPACE, но вам потребуются дополнительные исправления до исправление возможность SQL-инъекции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...