PHP и с чем его едят....

[fly]

Sweet orange
ну как бы тоже не то, что нужно. При успешной авторизации, пишет следующее:

Вход невозможен. Проверьте верно ли введены данные.
Вход невозможен. Проверьте верно ли введены данные.
Добрый день stas
ВЫ АВТОРИЗОВАНЫ

А при не успешной:

Вход невозможен. Проверьте верно ли введены данные.
Вход невозможен. Проверьте верно ли введены данные.
Вход невозможен. Проверьте верно ли введены данные..

Пишет три подряд, потому что в базе есть три пользователя. Когда их там 4е, то и строк выводит тоже 4е!
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Сделай через мускуль и не парься)
 

dreamer

Member
PHP:
<?php
$name     = trim($_POST['email']);
$password = trim($_POST['password']);

if (isset($name) && isset($password)) {
	$data = file("data/users.dat");
	$logged_in_as = null;
	
	for ($i = 0; $i < count($data); $i++) {
		list($username, $userpass) = explode("|", $data[$i]);
		
		if ($name == trim($username) 
		    && md5($password) == trim($userpass)) {
			
			$logged_in_as = $name;
			break;
		} 
	}
	if ($logged_in_as) 
	    echo "<h2>Добрый день <b>$dat[3]</b><br />ВЫ АВТОРИЗОВАНЫ</h2>"; 
    else
        echo "<h2>Вход невозможен. Проверьте верно ли введены данные.</h2>";
}
 

[fly]

Sweet orange
PainKiller, да я и не программист, чтобы оперировать сразу несколькими способами. Хотел понять почему этот скрипт не правильно работает.
dreamer, спасибо, вроде все работает. А можешь кратко прокомментировать изменения, чтобы внести для меня ясность:)
И еще, как теперь вывести имя пользователя в приветствие?
 
Останнє редагування:

Пух

كنت بلهاء
Модератор
Вот код Тагрима.
PHP:
<?php 
$name   = trim($_POST['email']); 
$password = trim($_POST['password']); 

if (isset($name) && isset($password)) { 
    $data = file("data/users.dat"); 
    for ($i = 0; $i < count($data); $i++) { 
        $dat = explode("|", $data[$i]); 
         
        if ($name == trim($dat[0]) && md5($password) == trim($dat[1])) { 
            echo "<h2>Добрый день <b>$dat[3]</b><br />ВЫ АВТОРИЗОВАНЫ</h2>";  
            exit; 
        } else { 
            echo "<h2>Вход невозможен. Проверьте верно ли введены данные.</h2>";  
        } 
    } 
    echo "</td>";  
    include ("bottom.html"); 
}
Тут считывается строка с файла. Если логин и пароль совпали с теми, что ввел пользователь - пишет "Добрый день" и выходит с цикла. Если нет - пишет "Вход не возможен" и переходит на следующую строку.
То есть, будет писать "вход не возможен" пока не найдет нужную строчку в файле (или вообще до конца файла, если такой комбинации логина / пароля не существует).
Проблема в том, что для каждого найденного пользователя в базе будет писать либо "добрый день" либо "вход не возможен", а этого делать не нужно.

А делать нужно было по-другому. Описать переменную (флаг) и задать ему стартовое значение (у dreamer флаг - переменная $logged_in_as, начальное значение - null) . Искать в файле совпадение логина и пароля с теми, которые ввел пользователь. Если совпадение найдено, то назначить флагу нужно присвоить какое-то значение (dreamer присваивает $logged_in_as = $name) и выйти с цикла (т.к. дальше искать нету смысла, все уже найдено), если не найдено - считать другую строчку.
После цикла проверить флаг. if ($logged_in_as) перейдет на ветку ИСТИНА тогда, когда в переменной $logged_in_as будет не null (то есть в цикле было произведено присваивание), иначе - переход на ветку ЛОЖЬ.
Как-то так.
 
Останнє редагування:

bllem

New Member
PHP:
<?php 
$name   = trim($_POST['email']); 
$password = trim($_POST['password']); 

if (isset($name) && isset($password)) { 
    $data = file("data/users.dat"); 
    $dat = array();
    foreach($data as $v) {
      $tmp = explode ("|",$v);
      if(trim($tmp[0]) == $name) {
        $dat = $tmp;
        break;
      }
    }
    if($dat[0] != '') {
       if ($name == trim($dat[0]) && md5($password) == trim($dat[1])) { 
            echo "<h2>Добрый день <b>$dat[3]</b><br />ВЫ АВТОРИЗОВАНЫ</h2>";  
       } else {
			echo "<h2>Неправильный пароль.</h2>";
	   }
    } else {
		echo "Нет такого пользователя.";
    }
    echo "</td>";
    include_once ("bottom.html"); 
}
если надо быстро - проще уже БДБ
 

bllem

New Member
count($dat) > 0
вам так, или лучше еще аррей_фильтр с колбеком?
 
Зверху