Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > *.csv & POST


Автор: Bacardi 14.10.2005, 15:43
Пытаюсь сделать авторизацию. Но результат меня не устраивает ввиду того, что что-то работает не так, как я того хочу.)

В файле auth.csv храню логины и пароли:
Код

L111;P111;
L222;P222;


Скрипт login.php предоставляет пользователю форму ввода логина и пароля и отправляет его файлу проверки ввода:
Код

<?
#запрет кэширования
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0",false);
header("Pragma: no-cache");
?>
<!--форма ввода-->
<form action="checklogin.php" method="post">
<p>Имя пользователя:
<input type="text" name="login" value="<? if (isset($_COOKIE["login"])) {echo $_COOKIE["login"];}?>"></p>
<p>Пароль:
<input type="password" name="password"></p>
<input type="submit" value="Вход">
<input type="button" onClick="javascript: history.back()" value="Назад">
</form>


файл проверки ввода checklogin.php открывает файл с логинами и паролями, получает из массива $_POST введенные строки, и в цикле пытается их сравнить:
Код

#--------------------------------------------------------------------------
$log = $_POST["login"];
$pas = $_POST["password"];
setcookie("login",$log, time() + 60*60*24*30);
#--------------------------------------------------------------------------
$auths = fopen("../../catalogs/auth.csv","r");
if(!$auths)
    {echo"Ошибка открытия файла аутентификации!";}
else
    {
    $i=0;
    while($data = fgetcsv($auths,65535,";"))
        {
        $num=count($data);
        $login[$i]=$data[0];
        $pass[$i]=$data[1];
        $i++;
        }
    fclose($auths);
    $auths_count=$i;
    }
#--------------------------------------------------------------------------    
for ($i=0; $i<$auths_count; $i++)
    {
    if (strcmp($login[$i],$log)==0 && strcmp($pass[$i],$pas)==0)
    {
    session_start();
    session_register("auth");
    $_SESSION["auth"] = true;
    header("Location: info.php?cat_id=".$_SESSION["cat_id"]."&type_id=".$_SESSION["type_id"]."&prod_id=".$_SESSION["prod_id"]);
    exit;
    }
    else
    {
    header("Location: login.php");
    exit;
    }
    }


В результате ввода правильного логина и пароля скрипт мне открывает страницу login.php, будто они не правильные.

Я написал в нужных местах операторы echo, для проверки данных:
Код

...
    while($data = fgetcsv($auths,65535,";"))
        {
        $num=count($data);
        $login[$i]=$data[0];
        echo "data[0]: ".$data[0]."<br>";
        echo "login[$i]: ".$login[$i]."<br>";
        $pass[$i]=$data[1];
        echo "data[1]: ".$data[1]."<br>";
        echo "pass[$i]: ".$pass[$i]."<br>";
        $i++;
        }
...
for ($i=0; $i<$auths_count; $i++)
    {
    echo "login[$i]: ".$login[$i]."    log: ".$log."<br>";
    echo "pass[$i]: ".$pass[$i]."    pas: ".$pas."<br>";
    if (strcmp($login[$i],$log)==0 && strcmp($pass[$i],$pas)==0)
...


и вот, что я получил:
Код

data[0]: L111
login[0]: L
data[1]: P111
pass[0]: P111
data[0]: L222
login[1]: L
data[1]: P222
pass[1]: P222
login[0]: L log: L111
pass[0]: P111 pas: P111


Вопрос: какого ... он не хочет полностью сохранять строку в массив login[].

Автор: Darhazer 14.10.2005, 15:48
Не нужно так долго ... делай проверку еще при четение файла:

Код

 while($data = fgetcsv($auths,65535,";"))
        {
        if (strcmp($data[0],$log)==0 && strcmp($data[1],$pas)==0)
    {
    fclose($auths);
    session_start();
    session_register("auth");
    $_SESSION["auth"] = true;
    header("Location: info.php?cat_id=".$_SESSION["cat_id"]."&type_id=".$_SESSION["type_id"]."&prod_id=".$_SESSION["prod_id"]);
    exit;
    }
  }
    fclose($auths);
    header("Location: login.php");
    exit;
    }


P.S. Насчет проблема - может быт у тебя включено register_globals и скрипт выполняет $login[0] как $_POST["login"][0]... попробуй имя переменной променить

Автор: Bacardi 14.10.2005, 15:55
Цитата(Darhazer @ 14.10.2005, 16:48)
делай проверку еще при четение файла

идея классная. щас попробую.


Цитата(Darhazer @ 14.10.2005, 16:48)
попробуй имя переменной променить

попробую, хотя и сомневаюсь немного.)
Добавлено @ 16:00
а чего ее менять, когда у тебя уже проверка без них обходится.
др дело, что опять не работает. не хочет распознавать логины и пароли.
Добавлено @ 16:02
ой. соврал. все работает.
спасибо! smile

off topic smile

Автор: Darhazer 14.10.2005, 16:08
Провер значения $log и $pas, которые получаеш?
P.S. Опоздал.

Автор: Mal Hack 14.10.2005, 17:04
Для кого писал: http://vingrad.ru/PHP-ART-002849
Есть там правда, пара недочотов, но суть - работает.

Автор: Darhazer 14.10.2005, 17:22
Цитата(Mal @ 14.10.2005, 17:04)
Для кого писал: http://vingrad.ru/PHP-ART-002849
Есть там правда, пара недочотов, но суть - работает.

А если на сервере нет БД ?

Автор: Mal Hack 14.10.2005, 20:30
Цитата(Darhazer @ 14.10.2005, 18:22)
А если на сервере нет БД ?

А где ты такие сервера видел? Да, в теории и на практике есть, но блин, как без БД работать-то? Авторизация просто так не бывает, а бывает на каких-то проектах. Их тоже на файлы все?

В конце концов есть бесплатные сервера БД.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)