Может ли кто-нибудь помочь мне разобраться в значении этого сообщения об ошибке php?

Возможный дубликат:
Может ли кто-нибудь помочь мне выяснить, что не так с этим кодом?

Вот мой код

$con = mysql_connect("localhost", "root", ''); if (!$con) { die('Cannot make a connection'); } mysql_select_db('yumbox_table', $con) or die('Cannot make a connection'); isset($_POST['user_name'], $_POST['password'], $_POST['user_type']); $data = mysql_query("SELECT * FROM users WHERE user_name == ($_POST['user_name']) AND ($_POST['password']) AND ($_POST['user_type'])") or die(mysql_error()); $info = mysql_fetch_array($data); $count = mysql_numrows($data); if ($count == 1) { echo("Success!!"); } else { echo("BIG FRIGGIN FAILURE!!"); } mysql_close($con); 

Всякий раз, когда я запускаю этот код, я получаю следующее сообщение:

Solutions Collecting From Web of "Может ли кто-нибудь помочь мне разобраться в значении этого сообщения об ошибке php?"

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

Вместо этого:

 $data = mysql_query("SELECT * from users where user_name == ($_POST['user_name']) and ($_POST['password']) and ($_POST['user_type'])" 

Сделай это:

 $user_name = mysql_real_escape_string($_POST['user_name']); $password = mysql_real_escape_string($_POST['password']); $user_type = mysql_real_escape_string($_POST['user_type']); $data = mysql_query("SELECT * FROM users WHERE user_name == '$user_name' AND password == '$password' AND user_type == '$user_type'"); 

Обратите внимание, что я предполагаю, что ваши столбцы в таблице являются «user_name», «password» и «user_type».

 if(isset($_POST['user_name'], $_POST['password'], $_POST['user_type'])){ $data = mysql_query("SELECT * from users where user_name = '".mysql_real_escape_string($_POST['user_name'])."' and password = '".mysql_real_escape_string($_POST['password'])."' and user_type = '".mysql_real_escape_string($_POST['user_type'])."' "); if(mysql_numrows($data) == 1) { $info = mysql_fetch_array($data); echo("Success!!"); } else { echo("BIG FRIGGIN FAILURE!!"); } } else{ echo "Required Data Missing"; } mysql_close($con); 

Вы должны отправить сообщение об ошибке для получения более подробной информации. Но кое-что, что я заметил, было

 mysql_query("SELECT * from users where user_name == ($_POST['user_name']) and ($_POST['password']) and ($_POST['user_type'])") 

Вы должны изменить это на

 //do escaping here. See note below. $username = isset($_POST['user_name']) ? mysql_real_escape($_POST['user_name']) : ''; $pass = isset($_POST['password']) ? mysql_real_escape($_POST['password']) : ''; $type = isset($_POST['user_type']) ? mysql_real_escape($_POST['user_type']) : ''; mysql_query("SELECT * from users where user_name = '{$username}' AND password = '{$pass}' AND user_type = '{$type}'") 

Вам нужно избегать значений

Сравнение MySQL равно = и не == (спасибо за указание, что вне @jeremysawesome)

Вы должны проверить столбец против значения POST

У вас также есть уязвимость SQL-инъекций . Пожалуйста, по крайней мере, используйте mysql_real_escape . Еще лучше, переключитесь на PDO

Вам необходимо назначить проверку isset переменной и проверить ее. В противном случае это просто отходы.