За последние 24 часа нас посетили 17073 программиста и 1688 роботов. Сейчас ищет 921 программист ...

Проверка логина и пароля для входа на сайт

Тема в разделе "PHP для новичков", создана пользователем Mary16, 12 окт 2016.

  1. Mary16

    Mary16 Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Добрый день ! я только изучаю рнр , мне нужно сделать проверку на сайте логина и пароля. Я написала код но он не работает, подскажите пожалуйста почему ... :)

    PHP:
    1. if (isset($_POST ["login"]) && ($_POST["passworld"])){
    2.     echo "thanks for  data!";
    3.     user_data_check ($_POST["login"], $_POST["passworld"]);
    4. }
    5. else {
    6.     header ("location: buy.php");
    7. }
    8.  
    9. $login= $_POST["login"];
    10. $passworld = $_POST["passworld"];
    11.  
    12.  
    13.  
    14. function user_data_check ($login, $passworld){
    15.     $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"];
    16.  
    17.     foreach ($arr as $key => $val){
    18.  
    19.                 if ($key == $login){
    20.         echo $key . "проверка пройдена";;
    21.                                     }
    22.    
    23.                                     }
    24. }
     
    #1 Mary16, 12 окт 2016
    Последнее редактирование модератором: 12 окт 2016
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Что значит не работает - он делает ровно то что вы написали

    Опишите пожалуйста, что, по-вашему, он должен делать?
     
  3. Mary16

    Mary16 Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Вот простая форма :
    HTML:
    1. <form action="toadd.php" method="post">
    2. Enter you credentials:<br>
    3. Login <input type="text" name="login"/><br><br>
    4. Passworld <input type="passworld" name="passworld" />
    5. <br><br>
    6. <input type="submit" value="send">
    7.  
    8.  
    9. </form>
    Нужно что бы он во 2-й части кода (там где обработчик) , проверял введенные пользователя данные введенные (имя + пароль) на соответствие с теми что обозначены в массиве
    PHP:
    1. $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"];
    и если проверка пройдена выдавал это сообщение. :)

    PHP:
    1. $login= $_POST["login"];
    2. $passworld = $_POST["passworld"];
    3. function user_data_check ($login, $passworld){
    4. $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"];
    5.  
    6. foreach ($arr as $key => $val){
    7. if ($key == $login){
    8. echo  $key. "проверка пройдена";
    9. }
    10.  
    11. }
    12. }
    Когда он выполняет эту часть кода на проверку ключа массива $arr и $login , выдает только раз проверка пройдена когда данные вводятся "Rita"=> "5050", а при других не выдает. Если ввести эти "Nick" => "6666" например.

    PHP:
    1. foreach ($arr as $key => $val){
    2. if ($key == $login){
    3. echo $key. "проверка пройдена";
    4. }
    спасибо :)
     
    #3 Mary16, 12 окт 2016
    Последнее редактирование модератором: 12 окт 2016
  4. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    PHP:
    1. <?php
    2.  
    3. $_POST['login'] = 'Vova';
    4. $_POST['password'] = '1111';
    5.  
    6. if (isset($_POST["login"]) && ($_POST["password"])){
    7.     echo "thanks for data!";
    8.     user_data_check($_POST["login"], $_POST["password"]);
    9. }
    10.  
    11. function user_data_check($login, $password){
    12.     $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"];
    13.     foreach ($arr as $key => $val){
    14.         if ($key == $login){
    15.             echo $key . "проверка пройдена";;
    16.         }
    17.     }
    18. }
    Вы не поверите, но у меня ваш код прекрасно работает. Это выведет на экран
    Код (Text):
    1. thanks for data!Vovaпроверка пройдена
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. function user_data_check( $LOGIN, $PASS )
    4. {
    5.    $arr =
    6.    [
    7.      'Rita' => "5050",
    8.      'Nick' => "6666",
    9.      'Vova' => "999"
    10.    ];
    11.  
    12.    if ( !in_array ( $PASS, $arr ) )
    13.    {
    14.      echo 'Passworld error';
    15.    }
    16.    elseif ( !isset ( $arr[$LOGIN] ) )
    17.    {
    18.      echo 'Login error';
    19.    }
    20.    else
    21.    {
    22.      echo "{$LOGIN}проверка пройдена";
    23.    }
    24. }
    25.  
    26. if ( !empty ( $_POST['login'] ) && !empty ( $_POST['passworld'] ) )
    27. {
    28.    echo 'thanks for data!<br>' . PHP_EOL;
    29.    user_data_check ( $_POST['login'], $_POST['passworld'] );
    30. }
    31. else
    32. {
    33.    header ( 'location: /buy.php' );
    34. }
    --- Добавлено ---
    Если просто тупо скопировать, то на врятли пойдет вам это на пользу.
     
    #6 MouseZver, 12 окт 2016
    Последнее редактирование: 12 окт 2016
    Mary16 нравится это.
  7. Mary16

    Mary16 Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    спасибо :) Все работает ))
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Рано или поздно поймете, что ни черта код не работает (с)
     
  9. Mary16

    Mary16 Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    MAN_IFE_ST, сейчас как раз ваш изучаю)
    --- Добавлено ---
    MAN_IFE_ST, вы сказали "что ни черта код не работает рано или поздно поймете" , а чего?
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ну уж если на то пошло, то давайте разделим логику проверки пользователя и шаблон отображения.

    Сейчас, у вас функция user_data_check что-то проверяет и выводит данные в html, по-сути на экран пользователю
    Если бы ваша функция вместо того чтобы что-то выводить на экран просто возвращала результат авторизации (true или false), а вот вызывающий код уже решал что делать то было бы всё намного симпатичнее.

    Это несложно для понимания (сложнее описать этот процесс словами), но если вы освоите этот приём, ваш код будет на порядок "чище" и "изящнее"

    Второй момент: вы в цикле проходите по всем пользователям и ищете соответствие. Если у вас немного пользователей, скажем порядка 100 или 1000, то такой подход вполне имеет место быть. Но если пользователей становится больше, то лучше обращаться к вашем ассоциативному массиву напрямую.

    Код (PHP):
    1. <?php
    2. if (isset($arr[$login]) === false) {
    3.     // пользователь не найден
    4.     return false;
    5. }
    6.  
    7. $pwd = $arr[$login];
    8. if ($pwd !== $password) {
    9.     // пароль не подходит
    10.     return false;
    11. }
    12.  
    13. // Авторизация прошла успешно
    14. return true;
     
    Mary16 нравится это.
  11. Mary16

    Mary16 Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    спасибо за ответы и советы :)
     
  12. Mary16

    Mary16 Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    topas, скажите вот этот кусок кода -проверки,
    if (isset($arr[$login]) === false)
    // пользователь не найден
    return false;}

    можно записать так , или нет?
    if (! isset($arr[$login]))
    // пользователь не найден
    return false;}
     
  13. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    конечно