2012-02-19 2 views
0

Я сделал две формы: один для входа в систему, если пользователь уже зарегистрирован, а другой для регистрации. Дата пользователя Я сохраняю файл date.txt таким образом: Peter, login: pet123, pass: 12345 | имя: John, login: joh123, pass: 54321 ect., я еще не использую DB. Вот этоКак проверить имя пользователя и пароль с помощью PHP

<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> 

и РНР для входа

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; 

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

+1

@Mat: Удивительно, PHP на самом деле поддерживает это. Использование этого, как правило, неверно, и его смешивание с кодом, использующим фигурные скобки, определенно неверно. – duskwuff

+0

@ duskwuff: ничего себе, обнаружил что-то сегодня, спасибо! – Mat

+0

Что вы пытаетесь достичь «unset» ($ us ['name'], $ us ['username'], $ us ['password']); ? – lvil

ответ

2

Вы не правильно обрабатываете свои строки и массивы с помощью 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 автоматически предоставит вам массив всех записей в файле (по одному в каждой строке).

2

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

<input type="image" src="img/singIn.png" name="signIn" /> Ваше имя пользователя = "signIn".

if (isset($_POST['singIn'])): - ваше сообщение «singIn», они должны соответствовать.

+0

в обоих случаях name = 'signIn' – Danis

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