Как проверить имя пользователя и пароль с помощью PHP - PullRequest
0 голосов
/ 19 февраля 2012

Я сделал две формы - одну для входа в систему, если пользователь уже зарегистрирован, а другую для регистрации. Дату пользователя я сохраняю в файл date.txt таким образом имя: Питер, логин: pet123, пароль: 12345 | имя: Джон, логин: joh123, пароль: 54321 и т. д., я еще не пользуюсь БД. Вот оно

<form action="#" method="post" id="user_new" class="user_new">`<br/>

        <label for="name">Name:</label><input type="text" name="name" id="name" required/>
        <label for="username">Username:</label><input type="text" name="username" id="username" required />
        <label for="password">Password:</label><input type="password" name="password" id="password"  required/>
        <input type="image" src="img/singUp.png" name="signUp" />
</form>  

И вторая форма для входа в систему

<form action="#" method="post" id="login" class="login">

        <label for="username">Username:</label><input type="text" name="username" id="username" required="required" />
        <label for="password">Password:</label><input type="password" name="password" id="password" required="required"/>
        <input type="image" src="img/singIn.png" name="signIn" />
        <a href="registration.php" class="custom_link">Registrate Now</a>
</form>   

и php для входа в систему

 if (isset($_POST['singIn'])):

        $users = file('date.txt');
        foreach ($users as $key => $value)
        {
            $user = explode('|', $value);
            $use  = explode(',', $user);
            $us    = explode(':', $use);
            unset($us['name'], $us['username'], $us['password']);
        }
        if (!in_array(trim($_POST['username']), $us)) die('There is no user with this username');
endif;

а этот код не работает? В чем проблема? Второй вопрос, почему, когда я пишу

if(isset($_POST["signUp"])): 

      $name = $_POST["name"]; 
      $uname = $_POST["username"];
      $upass = $_POST["password"];
      $users = fopen("date.txt", "a") or die("Couldn't open date.txt for add record"); 
      $record ="name:".$name . ",username:" .$uname . ",password:" . $upass . "|";     
      fwrite($users,$record) or die ("Couldn't add record");
      fclose($users);
endif;  

код не работает, но работает без isset. Во втором случае я получаю двойные записи

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

Ваша самая большая проблема - правописание.В этом коде есть несколько экземпляров с «singIn» или «signIn» и «singUp» или «signUp».Неважно, какой вы используете, если вы всегда используете его одинаково.

<input type="image" src="img/singIn.png" name="signIn" /> - это ваше имя для ввода = " signIn ".

if (isset($_POST['singIn'])): - это значение вашего поста ' singIn ', они должны совпадать.

2 голосов
/ 19 февраля 2012

Вы неправильно обрабатываете свои строки и массивы с помощью explode. explode разбивает строку и возвращает массив строк компонентов, поэтому $user = explode('|', $value) создает массив; использование explode в массиве строк (например, explode(',' $user)) не будет работать.

Что вам нужно сделать, это ввести вложенные циклы; как то так:

foreach ($users as $line)
{
    // Iterate over all the records in the file.
    $records = explode('|', $line);
    foreach ($records as $record)
    {
        // Iterate over all the fields in this record and extract the user's details.
        $fields = explode(',', $record);
        $user = array();
        foreach ($fields as $field)
        {
            list($key, $value) = explode(':', $field);
            $user[$key] = $value;
        }

        // Now check whether this user matches the details in $_POST.
        // ...
    }
}

Я хотел бы предложить, однако, чтобы вместо разделения записей на | в вашем файле, у вас была только одна запись на строку. Это значительно упростит анализ, поскольку file автоматически выдаст вам массив всех записей в файле (по одной на строку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...