2015-11-02 3 views
-5
<?php 
session_start(); 
error_reporting(E_ALL); 
$servername="localhost"; 
$susername="root"; 
$spassword=""; 
$dbname="testdb"; 
$unerr=$pserr=$derror=""; 
$_username=$_password=$_repassword=$_email=""; 
$username=$password=""; 
if($_SERVER["REQUEST_METHOD"]=="POST"){ 
if(empty($_POST["username"])) 
{ 
$unerr="Username Required"; 
} 
else{ 
$username=$_POST["username"]; 

} 

if(empty($_POST["password"])) 
{ 
$pserr="password Required"; 
} 
else{ 
$password=$_POST["password"]; 
$hashed_password=crypt($password); 

} 


$conn = mysqli_connect($servername, $susername, $spassword, $dbname); 
if (!$conn) { 
die("Connection failed: " . mysqli_connect_error()); 
} 
else{ 
$query1=mysqli_query($conn,"SELECT * FROM user WHERE username='$username'  AND password='$_password'"); 
$numrows=mysqli_fetch_array($query1); 
if($numrows['username']=$username && $numrows['password']=$hashed_password) 
{ 
    $_SESSION['userlogin'] = $username; 
    $_SESSION['userpassword']=$password; 
    header('Location: homepage.php'); 


} 
else{ 
    $derror="Invalid Username or Password"; 
} 
} 
mysqli_close($conn); 
} 
?> 

Проблема в том, что всякий раз, когда я ввожу некоторые случайные данные, пользователь все еще может войти в систему. пока я не укажу имя пользователя, которое не находится внутри таблицы. Как я могу проверить? если пользователь не существует в таблице db?Войдите в систему после авторизации

+0

, если пользователь не существует в таблице db ?: да, это было бы хорошим началом :) – beerwin

+4

Вы используете назначения в своей контрольной точке вместо проверки равенства. То есть '=' вместо '=='/'==='. –

+0

Как @JonStirling это должно быть '$ numrows ['username'] === $ username && $ numrows ['password'] === $ hashed_password' – Thamilan

ответ

0

Вы хотите изменить линию 40:

От:

if($numrows['username']=$username && $numrows['password']=$hashed_password) 

Для:

if($numrows['username']==$username && $numrows['password']==$hashed_password) 

'=' Is для присваивания/$ я = 1 - > Мы устанавливаем значение $ i в 1

'==' Для компараниона/if ($ i == 1) -> Мы проверяем, равен ли $ i 1

Вы также должны взглянуть на этот документ:

http://php.net/manual/en/language.operators.php

0

что $ _password и там ясно пароль или хэшируются пароль в Уре дб. если вы хэшируются пароль в БД, вы должны сделать это

$query1=mysqli_query($conn,"SELECT * FROM user WHERE username='$username'"); 
$numrows=mysqli_fetch_array($query1); 
if($numrows['username']==$username && $numrows['password']==$hashed_password); 
+0

он хранится в хэшированном формате нечеткий текст –

+0

check above ans –

+0

yes is try try, но пользователи не могут войти в систему сейчас –

0

Некоторые исправления вашей проблемы:

1) Используйте mysqli_num_rows функцию, чтобы проверить, если пользователь с обеспеченными именем и паролем существует или нет.

if(mysqli_num_rows($query1) == 1) 
{ 
    //rest of the stuff 
} 

2) Используйте == или === для проверки равенства, а что =

3) Но если вы стреляете запрос таким образом, что

$query1 = mysqli_query($conn,"SELECT * FROM user WHERE username='$username' 
AND password='$hashed_password'"); 

это даст вам более точный результат. Там не будет необходимости if($numrows['username']==$username && $numrows['password']==$hashed_password)

+0

Ни один из существующих пользователей не является в состоянии войти сейчас –

+0

попробуйте отлаживать моего друга. какое количество строк возвращается? попробуйте повторить запрос и запустить его прямо в phpmyadmin и увидеть результаты .... – Suyog

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