2012-02-29 5 views
1

Я начал php всего 2-3 дня, как мне вставить переменную в db и по какой причине я получил эту ошибку?php вставить данные в таблицу

я думаю, что я не underestand строк и вставки в БД полностью

, если вы можете предложить мне несколько книг его очень хорошие

Спасибо за вашу помощь

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\wamp\www\babak\register.php on line 21 

При выполнении этого сценария

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>register 
    </title> 
</head> 

<body> 
<?php 
mysql_connect('localhost', 'root', ''); 
mysql_select_db('babak'); 
?> 

thanx for your registering &nbsp;<?php echo $_POST["name"]; ?><br/> 
your email is <?php echo $_POST["E-MAIL"]; ?><br/> 
<?php 
    $sql ="INSERT INTO users(id,pass) VALUES ($_POST['id']','$_POST['pass']')"; 
?> 
</body> 
</html> 
+1

Я чувствую запах sql. Он воняет довольно плохо. – ThiefMaster

ответ

0
$sql="INSERT INTO users(id,pass) VALUES ($_POST['id']','$_POST['pass']')"; 
               ^^   ^^

Указанные цитаты не разрешены, когда вы непосредственно вставляете значения массива в строку с двумя кавычками. Используйте любой из

$sql = "INSERT .... '$_POST[id]', '$_POST[pass]'"; 
$sql = "INSERT ... '{$_POST['id']}', '{$_POST['pass']}'"; 
+0

. Будучи хорошим ответом, вы должны упомянуть SQL Injection. –

0

Когда вы вставляете массивы в строку с двумя кавычками, вы должны использовать {$foo['bar']} или $foo[bar] без одинарные кавычки:

$sql="INSERT INTO users(id,pass) VALUES ('{$_POST['id']}', '{$_POST['pass']}')"; 

Но, как уже упоминалось в моем комментарии на ваш вопрос, вам нужно позаботиться о SQL инъекций и избежать ненадежного ввода:

$sql = "INSERT INTO users(id,pass) VALUES (
    '".mysql_real_escape_string($_POST['id'])."', 
    '".mysql_real_escape_string($_POST['pass'])."')"; 
+0

еще лучше заключить их в фигурные скобки: '$ sql =" INSERT INTO users (id, pass) VALUES ('{$ _POST [' id ']}', '{$ _POST [' pass ']}') " ; ' –

+0

tanx my frieeeeend –

+0

Это правильно! – Dax

0

Ваш запрос (и строка фактически) недействителен. Кроме того, никогда НИКОГДА не используйте пользовательский ввод напрямую, так как вредоносный пользователь может тривиально нарушить ваш скрипт и взломать базу данных.

$sql = "INSERT INTO users(id,pass) VALUES ('$id','$pass')"; 

Где $id и $pass экранируются версии $_POST['id'] и $_POST['pass'] соответственно.

Предлагаю вам ознакомиться с хорошими книгами о безопасности PHP.

+0

hmm tanx мой друг может предложить вам несколько книг о безопасности –

+0

http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books - первые 2 категории PHP. –

Смежные вопросы