2016-11-02 3 views
1

Я работаю над простой системой входа, чтобы улучшить свои знания, и я хотел бы знать, как я могу показывать предупреждающие сообщения, если пользователь вводит неверный пароль или имя пользователя или не заполняет какие-либо поля, я начал с чего-то но я не уверен, что это правильный путь, и я не знаю, как показать сообщение на странице с формой входа. Большое спасибо за вашу помощь :)Как показать ошибки входа php?

Это мой контроллер Войти

<?php 
/** 
* Nome File : ctrl_login.php 
* Descrizione: File che gestisce i dati inseriti nella pagina di login 
*/ 

include('../config/konasi.php'); 
include('functions.php'); 

$user_name = check_input($_POST['username']); 
$user_password = check_input($_POST['userpassword']); 

if (!$user_name || !$user_password) { 
    echo "Non hai inserito username o password"; 
    exit(); 
} 

if ($stmt = mysqli_prepare($conn, "SELECT user_password FROM users WHERE user_name= ? ")) { 
    /* Bind parameters: s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("s", $user_name); 
    /* Execute it */ 
    $stmt -> execute(); 
    /* Bind results */ 
    $stmt -> bind_result($result); 
    /* Fetch the value */ 
    $stmt -> fetch(); 
    /* Close statement */ 
    $stmt -> close(); 
} 

if(password_verify($user_password, $result)) {  
    echo "you are connected!";  
} else {   
    echo "Ops, wrong password"; 
} 

mysqli_close($conn); 

Это мой индексный файл с формой входа

<form class="form-signin" action="includes/ctrl_login.php" method="post"> 
    <h3 class="form-signin-heading">Login </h3> 

    <div class="form-group"> 
     <label for="username" class="sr-only">Username </label> 
     <input type="text" id="username" name="username" class="form-control" placeholder="Username"> 
    </div> 
    <div class="form-group"> 
     <label for="password" class="sr-only">Password</label> 
     <input type="password" id="password" name="userpassword" class="form-control" placeholder="Password"> 
    </div> 

    <button class="btn btn-lg btn-primary btn-block" type="submit">login</button> 
</form> 

Это мой function.php

function check_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
+0

У вас есть много возможностей. На 'ctrl_login.php' вы можете перенаправить пользователя на регистрацию формы и передать ошибки внутри строки запроса (например,' your_form_page.php? Errors = Non hai inserito username o password'), а затем показать сообщение там, где хотите. На самом деле это вопрос, основанный прежде всего на мнениях. Выберите то, что лучше для вас. Чао. – Federkun

+0

Ciao Federkun большое спасибо за ваш ответ. Я попробую и дам вам знать;) grazie – pippo

ответ

0

одним из способов является установка переменной сессии в контроллере и перенаправить их на страницу входа в систему, то показать их на странице входа в систему.

введите следующую строку над вашей страницей входа и контроллером.

session_start(); 

добавить следующую строку в форме входа странице

<p><?=$_SESSION['error_msg']?></p> 

в контроллере вместо эхо-сообщения установить их в переменной сеанса. таких как

$_SESSION['error_msg'] = 'Ops, wrong password'; 
header("location: link_to_login_form"); 
exit(); 

Надеюсь, это поможет.

+0

Привет, Reza большое спасибо за вашу поддержку. Мне удалось передать сообщение об ошибке с помощью сеансов. Теперь я хотел бы создать переадресацию с использованием сеанса, поэтому, если пользователь будет администратором, вы попадете на панель управления администратора, и если клиент перейдет на панель управления клиента. Я создал новую таблицу в базе данных, и я назвал ее user_role, где я могу установить в int 1 или 0, можете ли вы мне помочь? – pippo

+0

После успешной аутентификации. Проверьте роль пользователя из базы данных. Затем введите if (user == 'admin') header ("location: admin.php"); else header ("location: user.php"); – reza

-1

Просто используйте эту функцию для проверки Логин:

function login_check($username,$pwd){ 

    if ($stmt = mysqli_prepare($conn, "SELECT COUNT(id) FROM `users` WHERE `user_name`=? AND `user_password`=? ")) { 
     /* Bind parameters: s - string, b - blob, i - int, etc */ 
     $stmt -> bind_param("ss", $user_name,,$pwd); 
     /* Execute it */ 
     $stmt -> execute(); 
     /* Bind results */ 
     $stmt -> bind_result($result); 
     /* Fetch the value */ 
     $login_row=$stmt -> fetch(); 

     if($login_row[0]>=1) { 
      echo "You are connected"; 
     } else { 
      echo "Ops, wrong password"; 
     } 

     /* Close statement */ 
     $stmt -> close(); 
    } 
} 
+0

Привет, Сарат большое спасибо за ваш ответ. Я читал в php-книге, я не должен использовать переменные в запросе SELECT, чтобы избежать инъекций SQL. Также, если я использую эту функцию, могу ли я показать сообщение на странице, где находится форма входа? Это другой файл с php-контроллера – pippo

+0

См. Обновленный ответ. –

+0

согласен с ответом. Если это вам поможет. –

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