2015-04-20 3 views
0

Я учусь работать с mysql и столкнулся с проблемой с базовым логином, используя php. Я использую Mysqli объект, как показано в моем connection.phpпростой логин с php и mysql

$user = "root"; 
$pass = "root"; 
$db = "mktraining"; 

$conn = new mysqli("localhost",$user,$pass,$db); 

С моим текущим кодом я могу успешно передавать имя пользователя и пароль через форму и добавить их в базу данных, если они уже не существуют. Однако, когда я вхожу в имя пользователя и пароль, которые уже находятся в базе данных, я не получаю правильный результат. Моя проверка входа ниже.

include "connection.php"; 

//get info from form and set variables 
$username = $_POST['username']; 
$password = $_POST['password']; 

//database check for login 
$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password'"; 

$result = $conn->query($query); 
var_dump($result); 

//get the number of rows that corespond to entered usersame and password 
$count = $result->num_rows; 

//implement the apropriate action if there is a match or not 
if($count == 1){ 
login_user(); 
} else { 
    new_user(); 
} 

my $count переменная не возвращает значение. Когда я эхо $count все, что я получаю, это NULL. Я добавил vardump, чтобы увидеть, что я получал там все это дает мне это

object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(4) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } 

Я пытался искать то, что это означает, но не смогли найти что-то я понимаю. Было бы очень полезно, если бы я мог получить некоторую помощь, если у меня есть ошибка в моем коде или какое-то другое концептуальное недоразумение. Благодаря!

ПОСТАНОВИЛИ

Спасибо за помощь всем. Оказывается, то, что у меня было, было правильным, и это была проблема в моей функции login_user(), которая была беспорядочной. Я ценю всю вашу помощь.

+2

(http://stackoverflow.com/questions/60174/how- can-i-prevent-sql-injection-in-php) –

+0

Я не вижу переменную '$ rows'? – nomistic

+0

@nomistic, не нужно, просто проверьте строки с номерами результатов. – Root125

ответ

0

Изменить запрос из :

$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password'"; 

на:

$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password' LIMIT 1"; 

и чековые изменение номер строки из:

if($count == 1){ 
    login_user(); 
} else { 
    new_user(); 
} 

к:

if($count == 1){ 
    echo 'User logged in'; 
} else { 
    echo 'Username or password is wrong.'; 
} 

- Пожалуйста, знайте, это две вещи.

необходимо использовать сеанс связи, чтобы определить, что пользователь вошел в систему.примеры здесь раньше: Using sessions & session variables in a PHP Login Script

Вы должны использовать SQL-Injecttion предотвратить слишком: [! Вы должны предотвратить SQL инъекции]
How can I prevent SQL injection in PHP?

0

Это, кажется, ваша проблема:

$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password'"; 

$result = $conn->query($query); 
var_dump($result); 

вы получаете результаты массива вместо элементов из запроса.

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

foreach($result as $row) { 
    echo $row['username'] .<br /> 
    echo $row['password']; 
} 

редактировать:

Как ваш num_rows являются 1 в вашем var_dump, это, кажется, обработка коррекции, так что ваша проблема скорее всего лежит login_user();

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