2010-12-14 3 views
1

У меня есть небольшая проблема с очень простым запросом, , когда я жестко кодирую значения в запросе его работы, но когда я использую переменную PHP, ничего не извлекается, я проверяю много вещей, включая запрос, базу данных , стоит сказать, что я получаю переменную из формы POST, а также проверял, что я получаю их, но когда я использую их в запросе, они не работают: Sочень простой запрос не работает PHP

вот мой код ..PLZ, что я делаю неправильно? !!!!!!!!!!!

<?php 

$email = $_POST ['emailEnter'] ; 
$password = $_POST ['passwordEnter']; 


$connection = mysql_connect('localhost','root','') ; 

$db_selected = mysql_select_db("lab5" , $connection) ; 

$query = 'select * From user where email="$email" and password="$password" ' ; 
$result = mysql_query ($query , $connection); 
    while($row=mysql_fetch_array($result)) 
    { 
     echo $row['name']; 
    } 
mysql_close($connection);  
?> 
+5

http://bobby-tables.com/ – Quentin

+0

потребность код ...... ой там он –

+0

дать мне доступ codez дэ –

ответ

4

Основные этапы отладки являются: 1. добавление

if (!$result) echo "Error: ".mysql_error(); 

, чтобы увидеть все ошибки из запроса SQL и 2. вывода

echo "Query: $query"; 

, чтобы увидеть, что содержат переменные. Один из них укажет вам на проблему.

Кроме того, ваш запрос уязвим для SQL injection. Вы должны добавить

$email = mysql_real_escape_string($email); 
$password = mysql_real_escape_string($password); 

после извлечения значений из массива POST.

+0

, вы намеренно не даете реальной причины, по которой он не работает?просто интересно, не говорю, что это плохо :) –

+0

заполнители лучше! – Nathan

+0

@ Viper nope, я просто не заметил. @Nathan true, но я полагаю, что OP новичок в этом, поэтому я бы сделал это шаг за шагом. Это разумно безопасно на данный момент с escape_string –

6

Вы используете одинарные кавычки в переменной запроса. Одиночные кавычки не заменяют переменные - поэтому он ищет буквенную строку $email, а не переменную электронной почты. Или используйте двойные кавычки или даже лучше используйте что-то вроде PDO, которое сделает вашу работу за вас.

Вы также должны дезинфицировать свои входы из-за уязвимостей SQL/XSS.

0

Возможно, ваша ошибка связана с тем, что вы не избежите своих параметров.

Пока вы на него, используйте MySQLi или PDO (может быть, даже некоторые подготовленные заявления)


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

Но мой совет все еще стоит.Использовав подготовленные заявления, вы бы не упал за эту ошибку

+0

oooooooooh спасибо, ребята, вы упомянули что-то о mysqli и PDO, где я могу начать читать об этих вещах, я настоящий новичок –

0

попробовать

$query = 'select * From user where email="' . $email . '" and password="'. $password . '" ' ; 

или

$query = "select * From user where email='$email' and password='$password'" ; 
0

Попробуйте вместо этого:

$query = "select * From user where email='" . $email . "' and password='" . $password . "'; 

Затем сразу же изменить, что это вместо:

0

Попробуйте

$query = "SELECT * FROM user WHERE email = '".$email."' AND password = '".$password."'"; 
+0

Ow, им всегда мешать ответить на этот вопрос:/В любом случае как говорили другие, не забудьте добавить mysql_real_escape_string! – Mac

0

Вы перепутали одинарные и двойные кавычки

У вас есть:

$query = 'select * From user where email="$email" and password="$password" ' ; 

Вы хотите:

$query = "select * From user where email='$email' and password='$password' " ; 

Одинарные кавычки вычисляться, Что буквально внутри. Двойные кавычки будут анализировать переменные внутри. Также существует синтаксис фигурного скобки {$ variable}, который вы можете использовать.

Также важны предложения других плакатов для использования mysql_real_escape или использования новых mysqli или PDO. По крайней мере, используйте mysql_real_escape для параметров, поступающих с пользовательского ввода.

0

Проблема заключается в том, как вы цитируете переменные. Предположим, что $ email = '[email protected]' и $ password = 'securenot'.

то, что мы хотим, чтобы окончательный интерпретировать строку быть следующим

выберите * от пользователя, где email='[email protected]»и пароль =„securenot“

для достижения этой цели мы просто заменить [email protected] для $ email и securenot за $ пароль и получите следующее:

выберите * у пользователя, где email = '$ email' и password = '$ password'.

, а затем в PHP коде ...

$ запрос = "SELECT * FROM пользователя, где электронная почта = '$ электронная почта' и пароль = '$ пароль'";

надежда, что это какой-то помощи

0

mysql_fetch_assoc() для ассоциативного массива. Вы не можете использовать обычный массив в качестве массива-адресата.

while($row=mysql_fetch_assoc($result)) 
{ 
    echo $row['name']; 
} 
Смежные вопросы