2009-08-03 8 views
0

им возникли некоторые проблемы с этим кодом:INSERT INTO не работает!

if (count($_POST)) { 

$username = mysql_real_escape_string($_POST['username']); 
$passwd = mysql_real_escape_string($_POST['passwd']); 

mysql_query("INSERT INTO users (username, password) 
      VALUES ($username, $passwd)"); 

} 

<form method="post"> 

<p><input type="text" name="username" /></p> 
<p><input type="password" name="passwd" /></p> 

<p><input type="submit" value="Register me!" /></p> 

</form> 

Я подключен к БД
пользователям столбец ID является auto_increment

Я получаю это при добавлении или умереть mysql_error в SQL Statement: У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «)» в строке 2

+2

Я не уверен, если вы собираетесь обработать это позже, но хранение паролей в обычном тексте небезопасно - вы должны использовать их с солью, созданной для каждого пользователя, и солью по всему объявлению. Это защищает пароли пользователей в случае, если ваши данные открыты. – Codebeef

+0

, если у вас есть проблемы с безопасностью текстового текста, перейдите в Википедию и ознакомьтесь с HMAC, AES и SSL. – Hardryv

+1

@ Хардрюв: Безопасность не всегда связана с INTERCEPTION. Хранение их в любом обратимом шифровании (или, что еще хуже, хранение их в открытом виде и только с использованием шифрования для передачи) является небезопасным, потому что это означает, что в какой-то момент оно будет отменено (по законным причинам, например, для сравнения). Если у ЛИЦА есть доступ к этому паролю (а не только к хэшу), он может иметь доступ к любому другому сайту, на котором я использую тот же пароль. Существует причина ZERO для хранения в обратимом шифровании, а не в хеше. –

ответ

14

Вы недостающие кавычки вставленных значений:

mysql_query("INSERT INTO users (username, password) 
      VALUES ('$username', '$passwd')"); 
+2

Разве это не рецепт для SQL-инъекций? –

+4

У OP уже есть mysql_real_escape_string(). – cletus

2

тылового как с одинарными кавычками

mysql_query("INSERT INTO users (username, password) 
     VALUES ('$username', '$passwd')"); 
1

Какое имя пользователя и пароль? строки? обертывание "

2

Сообщение об ошибке говорит вам, у вас есть ошибка синтаксиса в вашем SQL в строке 2. Так что-то о коде

VALUES ($username, $passwd) 

неправильна именно вам нужно кавычки вокруг параметров:.

VALUES ('$username', '$passwd') 
2

Попробуйте поставить "метки вокруг переменных во вставке:

mysql_query("INSERT INTO users (username, password) 
      VALUES ('$username', '$passwd')"); 
1

Другие дали вам правильный ответ.

Возможно, вы можете добавить другую переменную, чтобы увидеть ситуацию в следующий раз. И, в следующий раз, не забудьте проверить запрос в интерфейс для MySQL (MySQL Query Browser, PHPMyAdmin или так ...)

$sql = "INSERT INTO users (username, password) 
      VALUES ($username, $passwd)"; 

if(mysql_query($sql) === false) 
{ 
    echo 'Error with my query : '.$sql; 
    echo mysql_error(); 
} 
1

безопасный способ сделать это будет использовать подготовленный заявление. Что-то вроде этого:

$statement = $db_connection->prepare("INSERT INTO users (username, password) VALUES (?, ?)"); 
$statement->bind_param("s", $username); 
$statement->bind_param("s", $passwd); 
$statement->execute(); 

Я использовал следующий веб-страницу, чтобы получить этот надрезаются: http://www.petefreitag.com/item/356.cfm и имеет более подробную информацию об использовании метода bind_param. (Этот пример также относится к php5). Концепция использования подготовленных операторов не ограничивается php и широко используется на многих языках для оптимизации производительности и безопасности.

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