Опрос MySQL с помощью PHP - PullRequest
       37

Опрос MySQL с помощью PHP

1 голос
/ 25 января 2010

Что не так с этим кодом:

$q = query("select * from users where email = '$_POST['email']' and name = '$_POST['name']'");

Ошибка разбора: ошибка разбора, ожидание T_STRING' or T_VARIABLE 'или `T_NUM_STRING' в C: \ wamp \ www \ conn \ index.php в строке 16

Заранее спасибо.

Ответы [ 7 ]

8 голосов
/ 25 января 2010
 $q = query("select * from users where email = '{$_POST['email']}' and name = '{$_POST['name']'}");

Вы пропустили две цитаты. Кроме того:
1) Всегда избегать пользовательского ввода (по соображениям безопасности ):

$email = mysql_real_escape_string($_POST['email']);
$name = mysql_real_escape_string($_POST['name']);
$q = query("select * from users where email = '{$email}' and name = '{$name}'");

2) Получите редактор с подсветкой кода, чтобы в будущем не возникало подобных проблем. Я рекомендую Блокнот ++ .

2 голосов
/ 25 января 2010

Вы используете двойные кавычки, вы помещаете кавычки вокруг $ _POST ['email'] и внутри него, чтобы его неправильно интерпретировали

Это будет работать правильно: $ q = query ('select * from users, где email ='. $ _ POST ['email']. 'и name ='. $ _ POST ['name']);

Но даже если это работает, все равно неправильно передавать переменные post прямо в запрос. Как разработчику вы должны научиться «никогда не доверять пользователям». Так что лучше всего очистить его, сбежав так:

$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$q = query("select * from users where email = $email and name = $name");

или это:

$q = query('select * from users where email = '.mysql_real_escape_string($email).' and name = '.mysql_real_escape_string($name));

(какой способ вы предпочитаете)

2 голосов
/ 25 января 2010

Попробуйте это:

$q = query("select * from users where email = '" . $_POST['email'] . "' and name = '" . $_POST['name'] . "'");
2 голосов
/ 25 января 2010
  1. Вы используете $ _POST непосредственно в SQL-запросе, что очень плохо.
    Использование:

    $ email = mysql_real_escape_string ($ _ POST ['email']);
    $ name = mysql_real_escape_string ($ _ POST ['name']);
    $ q = query ("SELECT ... $ name ... $ email");

  2. Я бы рекомендовал использовать конкатенацию строк вместо встраивания переменных в строки, так как (imho) их легче читать

    $ q = query ("SELECT ...". $ Name. "...". $ Email);

  3. ВЫБРАТЬ * плохо (если вы не действительно, действительно хотите все поля)

2 голосов
/ 25 января 2010

Вы должны окружить свои встроенные переменные фигурными скобками.

Как это:

$q = query("select * from users where email = '{$_POST['email']}' and name = '{$_POST['name']}'");
1 голос
/ 25 января 2010

Ошибка разбора: ошибка разбора, ожидающая T_STRING 'orT_VARIABLE' или `T_NUM_STRING '

Привыкайте к этой ошибке. Всегда означает, что есть проблема цитаты.

Знакомьтесь, используя "и"

1 голос
/ 25 января 2010

Пиз, не делай так. Это прекрасный пример для SQL-инъекций.

Лучшая версия:

$email = mysql_real_escape_string($_POST['email']);
$name = mysql_real_escape_string($_POST['name']);
$q = query("select * from users where email = '$email' and name = '$name'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...