За последние 24 часа нас посетили 57605 программистов и 1683 робота. Сейчас ищут 1180 программистов ...

Помогите начинающему

Тема в разделе "PHP для новичков", создана пользователем smala, 8 июн 2011.

  1. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    было тестовое задание: сделать регистрацию пользователей, чтоб при успешном входе открывалась страница пользователя, при неудачном входе перенаправляло на точку входа, при трех неудачных попытках чтоб блокировало страницу входа на 5 минут и выдавало сообщение "осталось н минут", все это нужно сделать без БД но наверно я нетак авторизацию устроил, смысл моей регистрации что данные всех пользователей находятса в файле
    PHP:
    1. admin1|pass1|1
    2. admin2|pass2|2
    3. admin3|pass3|3
    4. admin4|pass4|4
    5. admin5|pass5|5
    6. admin6|pass6|6
    если пользовател ввел данные которые присутствуют в этой таблице, то открывается его страница, в противном случае переходит на страницу авторизации с сообщением "данные указаны неверно", вот сам файл авторизации
    PHP:
    1. <?php
    2.  
    3.  $login = $_POST['login'];
    4.  $pasw = $_POST['pass'];
    5.  $lines = file("1.php");
    6.  foreach($lines as $data){
    7.  list($user, $pass, $uid) = explode("|", $data);
    8.  if ($user == $login && $pass == $pasw) { $in = 1 ; $gen = "page.php?log=$login&pass=$pasw"; break;  } else { $gan = "<meta http-equiv=\"refresh\" content=\"0; url=/index.php?pan=1\">"; }
    9.  }
    10.  
    11. if ($uid =="6") echo $gan;
    12.  
    13. if ($in == 1) echo "<meta http-equiv=\"refresh\" content=\"0; url=/$gen\">";
    14.  
    15.  
    16.  
    17.  
    18. ?>
    вот так я оборудовал страницу авторизации
    PHP:
    1. <html>
    2. <title>Логин</title>
    3. <form action="polza.php" method="post">
    4. Ваше имя: <input type="text" name="login"><br>
    5. Ваш пароль: <input type="password" name="pass"><br>
    6. <input type="submit" name="go" value="Enter!">
    7. </form>
    8. </html>
    9. <?
    10. $login = $_GET['pan'];
    11.  
    12. if($login=="1"){echo "Данные введены неверно";}
    13. ?>
    персональная страница пользователя при успешном входе
    PHP:
    1. <?
    2.  
    3.  
    4.  
    5. $login = $_GET['log'];
    6. $pasw = $_GET['pass'];
    7. if($login == "") echo "<meta http-equiv=\"refresh\" content=\"0; url=/\">";
    8. $lines = file("1.php");
    9.  foreach($lines as $data){
    10.  list($user, $pass, $uid) = explode("|", $data);
    11.  if ($user == $login && $pass == $pasw) { $gem = $user; break;  }
    12. }
    13. if ($gem !== "") {echo "Добро пожаловать $user";} else {echo "<meta http-equiv=\"refresh\" content=\"0; url=/\">";}
    14.  
    15. echo "<a href = \"/page.php?log=&pass=\">выход</a>"
    16.  
    17.  
    18. ?>
    а вот как быть с таймером и блоком отдельного пользователя, я начал експерементировать с IP и таймер через date() но както все слишком уж запутано выходит, может есть более простое решение?))) очень жду ответом, пока что кроме форумчан у меня спросить неукого!!!!
     
  2. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    наверно надо использовать еще КУКИ ??
     
  3. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Можно использовать куки - при неудачной попытке ставить куку с количеством попыток, при удачной эту куку стирать, при третьей неудачной ставить куку сроком на 5 минут и проверять при попытке логина.

    Можно писать в тот же файл количество неудачных попыток и время последней из них. если попытка удачная - обнулять. Если количество записанных попыток больше трех и записанное время отличается от текущего меньше чем на 5 минут, выдавать сообщение.

    Можно делать то же самое, но сохранять все это в массив, который скидывать в файл с помощью var_dump и подгружать к скрипту через include, так с ним в разы удобнее работать имхо.
     
  4. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    вот переделал немного:

    PHP:
    1. <html>
    2. <title>Логин</title>
    3. <form action="index.php" method="post">
    4.  
    5. <TABLE>
    6. <TR><TD>Логин:</TD><TD><input type="text" name="login"></TD></TR>
    7. <TR><TD>Пароль:</TD><TD><input type="password" name="pass"></TD></TR>
    8. <TR><TD><input type="submit" name="go" value="Вход !"></TD><TD></TD></TR>
    9. </TABLE>
    10.  
    11.  
    12. </form>
    13. </html>
    14. <?
    15.  
    16.  
    17.  $login = $_POST['login'];
    18.  $pasw = $_POST['pass'];
    19.  
    20.  
    21.  
    22. if ($login == true or $pasw == true) {
    23.  
    24.  
    25.  
    26.  
    27.  
    28.  $lines = file("1.php");
    29.  foreach($lines as $data){
    30.  list($user, $pass, $uid) = explode("|", $data);
    31.  if ($user == $login && $pass == $pasw) { $in = 1 ; $gen = "page.php?log=$login&pass=$pasw"; }
    32.  }
    33.  
    34.  
    35.  
    36. if ($in == 1) {echo "<meta http-equiv=\"refresh\" content=\"0; url=/$gen\">";
    37. echo "<center><br><b>Уважаемый ",$login," Вы успешно авторизированы</b><br> Если не сработала автоматическая переадресация нажмите <a href = \"/$gen\"><b>Здесь</b></a></center>";
    38.  
    39. } else {echo "Неверные данные";}
    40. }
    41.  
    42.  
    43. ?>
    вот почему не выходит передать данные в КУКИ ???


    PHP:
    1.  $login = $_POST['login'];
    2.  $pasw = $_POST['pass'];
    3.  
    4.  
    5.  
    6. if ($login == true or $pasw == true) {
    7.  
    8. [b]!!!!!!!!!!!!!<вот тут>!!!!!!!!!!!!!!![/b]
    9.  
    10.  
    11.  
    12.  $lines = file("1.php");
    13.  foreach($lines as $data){
    14.  list($user, $pass, $uid) = explode("|", $data);
    15.  if ($user == $login && $pass == $pasw) { $in = 1 ; $gen = "page.php?log=$login&pass=$pasw"; }
    16.  }
    Вот в этом месте вставляю setcookie('pol', '1'); пишет ошибку, я вычитал что это связано с тем что запускаю сессию не с самого начала скрипта(( как решить эту проблему ?)))
     
  5. Benjamin

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

    С нами с:
    23 янв 2009
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Тула
  6. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    я же говорю что новичок(((( посмотрел ничего ненашел, а както поточней есть что то?)
     
  7. Alex_pac

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

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    имхо авторизацию и все ее системы надо в модуль вынести, иначе будет высокий уровень говнокода.
     
  8. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    согласен, вот уже какая хрень вышла, и это только 3 неудачных попытки входа и вывод сообщения "вы заблокированы" шош там с таймером будет гг
    PHP:
    1. $barr = is_file($ip.'.dat');
    2.  
    3.  
    4.  
    5. if ($barr == false ) {
    6.  
    7. $fp = fopen($ip.'.dat', 'w+');
    8. fwrite($fp,1);
    9. fclose($fp);
    10.  
    11. } else {
    12.  
    13. $fp = fopen($ip.'.dat', 'r');
    14. $bann = fread($fp,100);
    15. fclose($fp);
    16. }
    17. if ($bann == 1) {
    18. $banr = $bann +1;
    19. $fp = fopen($ip.'.dat', 'w+');
    20. fwrite($fp,$banr);
    21. fclose($fp);
    22. }
    23. if ($bann == 2) {
    24. echo "вы заблокированы<br>";
     
  9. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    Ураааааааааааааааааа сделал)))) все работает))))