2015-07-05 7 views
0

Прошу прощения, если заголовок запутан, но когда я запустил страницу с кодом ниже и введите электронное письмо, которое не найдено в базе данных, на веб-странице я получаю Notice: Trying to get property of non-object in C:\xampp\htdocs\Testing\login.php on line 72. Вместо того, чтобы говорить это, я хочу, чтобы он дал ошибку, что электронное письмо не зарегистрировано.PHP Неверный результат запроса

<?php 
session_start();//session starts here 
if(isset($_SESSION['adminName'])||isset($_SESSION['email'])){ 
    header("Location: welcome.php");//redirect to login page to secure the welcome page without login access. 
} 
?> 



<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <link type="text/css" rel="stylesheet" href="bootstrap-3.2.0-dist\css\bootstrap.css"> 
    <title>Login</title> 
</head> 
<style> 
    .login-panel { 
     margin-top: 150px; 

</style> 

<body> 


<div class="container"> 
    <div class="row"> 
     <div class="col-md-4 col-md-offset-4"> 
      <div class="login-panel panel panel-success"> 
       <div class="panel-heading"> 
        <h3 class="panel-title">Sign In</h3> 
       </div> 
       <div class="panel-body"> 
        <form role="form" method="post" action="login.php"> 
         <fieldset> 
          <div class="form-group" > 
           <input class="form-control" placeholder="E-Mail" name="email" type="email" autofocus> 
          </div> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Password" name="pass" type="password" value=""> 
          </div> 


           <input class="btn btn-lg btn-success btn-block" type="submit" value="login" name="login" > 

          <!-- Change this to a button or input when using this as a form --> 
          <!-- <a href="index.html" class="btn btn-lg btn-success btn-block">Login</a> --> 
         </fieldset> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 


</body> 

</html> 

<?php 

include("database/db_conection.php"); 

if(isset($_POST['login'])){ 
    $user_email=mysqli_real_escape_string($dbcon, $_POST['email']); 
    $user_pass=mysqli_real_escape_string($dbcon, $_POST['pass']); 

    $encrypted_password = password_hash($user_pass, PASSWORD_BCRYPT); 


    $query = $dbcon->query("SELECT user_pass FROM users WHERE user_email='$user_email'"); 
    $passwordValue=$query->fetch_object()->user_pass; 

    if (password_verify($user_pass,$passwordValue)){ 
     echo "Success!"; 
    }else{ 
     echo $encrypted_password; 
     echo "<div class='alert alert-danger'><a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a><strong>Error!</strong> Email or password entered was incorrect!</div>"; 
    } 




    /*$check_user="select * from users WHERE user_email='$encrypted_email' AND user_pass='$user_pass'"; 

    $run=mysqli_query($dbcon,$check_user); 

    if(mysqli_num_rows($run)) 
    { 
     echo "<script>window.open('welcome.php','_self')</script>"; 

     $_SESSION['email']=$user_email;//here session is used and value of $user_email store in $_SESSION. 

    } 
    else 
    { 
     echo "<script>alert('Email or password is incorrect!')</script>"; 
    }*/ 
} 
?> 

Это код, указанный в моем файле login.php. PHP-код в комментарии не является частью веб-страницы, и я удалю его позже.

+0

Что такое линия 72? '' '$ dbcon-> query''' вернет' '' FALSE''', если запрос по какой-то причине не будет выполнен (что приведет к тому, что последующая строка выведет ошибку). Может использовать '' '$ dbcon-> error''', чтобы выяснить, что пошло не так. – MasterOdin

+0

Строка 72 - '$ passwordValue = $ query-> fetch_object() -> user_pass;' –

+0

Тогда да, у вас есть ошибка в вашем запросе. Используйте '' 'print $ dbcon-> ошибку,' '', чтобы распечатать, что происходит не так. – MasterOdin

ответ

0
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <link type="text/css" rel="stylesheet" href="bootstrap-3.2.0-dist\css\bootstrap.css"> 
    <title>Login</title> 
</head> 
<style> 
    .login-panel { 
     margin-top: 150px; 

</style> 

<body> 


<div class="container"> 
    <div class="row"> 
     <div class="col-md-4 col-md-offset-4"> 
      <div class="login-panel panel panel-success"> 
       <div class="panel-heading"> 
        <h3 class="panel-title">Sign In</h3> 
       </div> 
       <div class="panel-body"> 
        <form role="form" method="post" action="login.php"> 
         <fieldset> 
          <div class="form-group" > 
           <input class="form-control" placeholder="E-Mail" name="email" type="email" autofocus> 
          </div> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Password" name="pass" type="password" value=""> 
          </div> 


          <input class="btn btn-lg btn-success btn-block" type="submit" value="login" name="login" > 

          <!-- Change this to a button or input when using this as a form --> 
          <!-- <a href="index.html" class="btn btn-lg btn-success btn-block">Login</a> --> 
         </fieldset> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 


</body> 

</html> 

<?php 

include("database/db_conection.php"); 

if(isset($_POST['login'])){ 
    $user_email=mysqli_real_escape_string($dbcon, $_POST['email']); 
    $user_pass=mysqli_real_escape_string($dbcon, $_POST['pass']); 

    $encrypted_password = password_hash($user_pass, PASSWORD_BCRYPT); 


    if ($query = $dbcon->query("SELECT user_pass FROM users WHERE user_email='$user_email'") == false) { 
     echo "The email doesn't exist in the DB"; 
    } else { 
     $passwordValue=$query->fetch_object()->user_pass; 

     if (password_verify($user_pass,$passwordValue)){ 
      echo "Success!"; 
     }else{ 
      echo $encrypted_password; 
      echo "<div class='alert alert-danger'><a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a><strong>Error!</strong> Email or password entered was incorrect!</div>"; 
     } 




     /*$check_user="select * from users WHERE user_email='$encrypted_email' AND user_pass='$user_pass'"; 

     $run=mysqli_query($dbcon,$check_user); 

     if(mysqli_num_rows($run)) 
     { 
      echo "<script>window.open('welcome.php','_self')</script>"; 

      $_SESSION['email']=$user_email;//here session is used and value of $user_email store in $_SESSION. 

     } 
     else 
     { 
      echo "<script>alert('Email or password is incorrect!')</script>"; 
     }*/ 
    } 
} 
?> 

Я добавил, если заявление, которое проверяет, если запрос является ложным, если оно ложно будет эхо, что электронная почта не существует в базе данных, как вы хотели, но если она существует, то «Выбрали пароль точно так, как хотите.

0

Я использовал оператор if для кода: $query->num_rows() (кредит для @MasterOdin для этого), а если количество строк равно 0, то я повторил, что вы ввели недопустимое электронное письмо.

Ex.

if ($query->num_rows==0){ 
    echo "You typed an invalid email!"; 
}else{ 
    I further verified information here... 
} 
Смежные вопросы