За последние 24 часа нас посетили 22553 программиста и 1141 робот. Сейчас ищут 564 программиста ...

проблема в логике

Тема в разделе "Сделайте за меня", создана пользователем Freekazoid, 7 сен 2013.

  1. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    Уважаемые программисты, у меня появилась нужда в использование php кода, но в сам язык я несилен и поэтому обращаюсь за помощью. Проблема проста но решения я так и не смог найти из за незнания где искать.
    итак, логика то го что нужно в итоги.
    1 пользователь попадает на сайт и идет проверка на авторизацию.
    2 если пользователь авторизован то загрузка страниц продолжается дальше.
    2 пользователь не авторизован следовательно переводим на страницу авторизации и даем заполнить форму.
    3 после заполнения проверка на заполнены все поля формы
    4 правильность введения капчи.
    5 продолжение работы с сайтом.
    6 работа с ошибками вывод на страницу.

    Я погуглин и по находил различные куски кода а вот собрать так и не получается.
    собственно код.
    Код (Text):
    1.  
    2. <?php
    3.  
    4.    $login = htmlspecialchars(stripslashes($_POST['login']));
    5.    if (isset($_GET['logout'])) unset($_SESSION['auth']);
    6.    $admins = include "test.php";
    7.    
    8. if ( isset($_POST['capcha']) )
    9.   {
    10.     $code = $_POST['capcha']; //Получаем переданную капчу
    11.     session_start();
    12.  
    13. if ( isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code) ) //сравниваем введенную капчу с сохраненной в переменной в сессии      
    14.    
    15.    
    16.    
    17. if(isset($admins[ $_POST['login'] ]) && $admins[ $_POST['login'] ] == $_POST['pass'] ){
    18.  $_SESSION['login']=$_POST['login'] = $_SESSION['auth'] = '1'; }
    19.     else
    20.      
    21.      echo 'ошибка капчи!';
    22.        unset($_SESSION['capcha']);
    23.     exit();
    24.       }
    25.  
    26.     //Удаляем капчу из сессии
    27.    
    28.    
    29. ?>
    30.  
    31. <html>
    32. <body>
    33.  
    34. <?php
    35. if (isset($_SESSION['auth']))echo 'Вы вошли как,<span style="color:red">&nbsp;' .$login.'</span>&nbsp;>>>&nbsp;&nbsp;<a href="test2.php?logout">Выход'; else {
    36. ?>
    37. <tt><H1>вы не авторизованы</H1></tt>
    38. <?php
    39. foreach($_POST as $G){
    40.   if(!$G){ die("не все поля заполнены\r\n"); }
    41. }?>
    42. <form method='POST' action = 'test2.php'>
    43. <table  width="27%" border="0">
    44. <tr><td>Логин<FONT color="#ff0000">*</FONT></td><td><input type='text' name='login'></td></tr>
    45. <tr><td>Пароль<FONT color="#ff0000">*</FONT></td><td><input type='password' name='pass'></td></tr>
    46. <tr> <td colspan="2"><img src="capcha/captcha.php" width="120" height="20"/></td></tr>
    47. <tr><td>Капча:<FONT color="#ff0000">*</FONT></td><td><INPUT name="capcha" class="$capcha" maxlength=40></td></tr>
    48. <tr><td>С уставом согласен:<FONT color="#ff0000">*</FONT></td><td><input type="checkbox" name="ustav" class="$ustav" /></TEXTAREA></td></tr>
    49. <tr> <td colspan="2"><input type='submit' value='Авторизоваться'></td></tr>
    50. </table>
    51. </form>
    52.  
    53. <?}?>
    54.  
    55. </body>
    56. </html>
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Сколько платите?
     
  3. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    я думал тут помогаю!
    Если бы я хотел заплатить, не стал бы на форуме писать.
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ты не правильно поставил вопрос.
    Напиши в чем конкретно проблема.Потом опиши следующую и т.д.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Бро, помоги мне плз, построй дом с такими-то характеристиками, будь добр, с нуля, а я пока фильм посмотрю. Ирония ясна? :)

    Помощь, это когда сделал все сам, но в чем-то вот не получается и надо чтобы помогли. Ты же даешь конкретное задание. Оно требует времени. Время стоит денег. Помощь и халявное исполнение - не одно и то же.

    В противном случае тебе сюды - viewforum.php?f=36
     
  6. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    вполне согласен.
    Если прочесть внимательнее мое "задание" то видно что должно быть по завершению.
    А так же я приложил сценарий исполнения на который по заданию я хотел бы услышать ответы что и желательно в каком месте недочет я не писал вот это я хочу делайте.
    А так же если бы вы прочли код, то заметили что большинство уже работает но не по логике задания в посте.
    Вполне возможно что не корректно подошел к вопросу задания и проблем.
    Буду исправлять ошибка в логики, код выполняет поставленные задачи, но как я и писал он сборный и поэтому он не корректно работает.
    Мне его бы распределить так как нужно но за незнания языка на должном уровне сам неспособен.
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    И что предлагаешь нам его запускать?
    Лично у меня сейчас под рукой нет php и я не компилятор.
    Опиши что не так может помогу.
     
  8. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    smitt Дело в логике.
    Более расширенно: В отсутствии таковой мне нужно перераспределить модули и связать их между собой что бы действия происходили по очередности а не как сейчас.
    Код работает капча проверяется и выдает сообщение верно/неверно, а так же осуществляется вход пользователя и идет проверка заполнения формы. Но все происходит сумбурно или капча выдает что все нормально и не срабатывает вход пользователя.
    А так же я не смог нагуглить закрытия сайта от не авторизованных пользователей.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    сборный, то бишь накопипащщеный с разных источников?
     
  10. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    Да уважаемый, вы прочтите о чем я выше писал!
     
  11. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Выбрась свой код, пойдем с начала.

    Вот ссылка разберись что там написано, если есть вопросы пиши.
    http://web3designing.in/php/posts/post1.php

    Тебе там потребуется начать сессию session_start();
    Если с авторизацией все OK пишем в переменную сессии какое то значение.
    Потом просто проверяем эту переменную когда надо знать авторизован человек или нет.
     
  12. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    smitt
    Можно сразу поправку перед началом работы.
    У нас на фирме у персонала свои логины и пароли и данный сайт делается для внутреннего использования без базы MySQL
    а для хранения паролей используется файл в моем случае
    Код (Text):
    1.  $admins = include "test.php";
    можно в принципе и .txt использовать это не столь важно главное что бы файл а не база.
    я вот нашол проверку имени думаю ее использовать в качестве уменьшения ошибок по выходу
    http://ruseller.com/lessons.php?rub=29&id=174
     
  13. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Мне без раздницы где вы там храните. Ты скопировал подряд но не понимаешь как все работает.
    Я хочу что бы ты по этапно шел и писал.Если есть вопросы обращался. Тогда ты сам все поймешь.

    Можешь написать без капчи?
     
  14. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    Увы но нельзя сам не знаю почему начальству она нужно!
    я могу написать на С++ но не знаю как его взаимодействовать с html или другими веб языками.
    Код я понять или по крайней мере разобраться смогу. Немного почитал уже.

    Добавлено спустя 3 минуты 6 секунд:
    smitt
    1 пользователь попадает на сайт и идет проверка на авторизацию.
    Это я так и не смог найти даже похожего аналога.
    как можно определить, "предполагаю через куки" что пользователь не авторизован.?

    Добавлено спустя 16 минут 51 секунду:
    smitt
    Вот тестовая работа страници.
    http://free-web.hol.es/temp/test2.php
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Аааа, так это типа страничка для клана онлайны? :)
     
  16. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    мои интересы вас не должны волновать.
    А страничка лежит не для показа чем я в свободное время увлекаюсь, а для тестовой проверки знающих людей.
    Вам часто говорят что вы мешаете сильно...
     
  17. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Аторизован или нет определяется через сессию.

    Общая схема такая:
    пользователь переходит на страницу ввода пароля и логина.
    Вводит, данные пересылаются на скрипт который проверяет введеные данные.Если все хорошо то создает переменную сессии с каким нибудь значением. На страницах предназначеные для авторизованных пользователей должна быть проверка задана эта переменная или нет.Если нет то пользователь не автортзован. Когда человек делает логаут то просто удаляем эту переменную unset($_SESSION['val'])

    Добавлено спустя 1 минуту 16 секунд:
    так же должены быть включены сессии session_start();
     
  18. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    smitt
    Как я понимаю у нас должен быть такой код.

    Форма регистрации
    Код (Text):
    1. <form method='POST' action = 'test2.php'>
    2. <table  width="30%" border="1">
    3. <tr><td width="15%">Логин<FONT color="#ff0000">*</FONT></td><td width="15%"><input type='text' id="login" name='login'><span id="msgbox_login" style="display:none"></span></td></tr>
    4. <tr><td width="15%">Пароль<FONT color="#ff0000">*</FONT></td><td width="15%"><input type='password' name='pass'></td></tr>
    5. <tr> <td width="30%" colspan="3"><img src="capcha/captcha.php" width="120" height="20"/></td></tr>
    6. <tr><td width="15%">Капча:<FONT color="#ff0000">*</FONT></td><td width="15%"><INPUT name="capcha" class="$capcha" maxlength=40></td></tr>
    7. <tr><td width="15%">С уставом согласен:<FONT color="#ff0000">*</FONT></td><td width="15%"><input type="checkbox" name="ustav" class="$ustav" /></td></tr>
    8. <tr> <td width="30%" colspan="3"><input type='submit' value='Авторизоваться'></td></tr>
    9. </table>
    10. </form>
    дальше код с переданной в него переменной!

    Код (Text):
    1.  
    2. session_start();
    3. if(isset($admins[ $_POST['login'] ]) && $admins[ $_POST['login'] ] == $_POST['pass'] ){
    4.  $_SESSION['login']=$_POST['login'] = $_SESSION['auth'] = '1';
    5. echo 'пользователь прошол регистрацию <a href="#"> переход </a> ';
    6.  
    7.     else
    8. echo 'пользователь не активирован'; }
    это я понял как работает!
    Трудность в соединение двух сесий проверки пользователя и капчи!
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Соединять сессии не нужно. Для каждого клиента открывается одна и та же сессия, если у него не сменился идентификатор сессии. То есть открыли сессию на одной странице, записали в нее что-то, потом открыли сессию на другой странице и вуаля - переменная там будет доступна.
     
  20. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Что нибудь стало понятно из ответа Fell-x27? Если нет то продолжим постепенное написание логин формы.
    ...........................................................................
    Не надо все впихивать в 1 файл.
    Потом другие не php программисты смотрят такие исходники и говорят что php хреновый язык а php программисты это низшее существо в айти экосистеме(((

    Конечно просить писать по MVC не стану, но хоть немного упростим работу...
    Создадим отдельный файл который будет обрабатывать запросы. В action формы укажем этот скрипт.Там вставь проверку.Вставь и проверь что все ОК работает. А то потом отлаживать искать ошибку сложно будет.


    Ну а теперь прошу меня извинить я пошел ставить CentOS. Если что завтра продолжим.
     
  21. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    Fell-x27

    Это код проверки капчи!

    Код (Text):
    1.  
    2. if ( isset($_POST['capcha']) )
    3.   {
    4.     $code = $_POST['capcha']; //Получаем переданную капчу
    5.     session_start();
    6.  
    7. if ( isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code) ) //сравниваем введенную капчу с сохраненной в переменной в сессии      
    8. echo 'капча верна';
    9. else
    10.      
    11.      echo 'ошибка капчи!';
    12.        unset($_SESSION['capcha']);   //Удаляем капчу из сессии
    13.     exit();
    14.       }
    проблема что коды мешают друг другу я не могу понять как в php объединить их между собой!
    нужно стобы они действовали по схеме пользователь ввел данные проверка на заполнение форм
    и дальше авторизация если капча верна если нет то вывод ошибки "echo 'ошибка капчи!';"
    собственно это и вывод ошибок мешает.
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    в чем это выражается?
     
  23. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    если бы я знал я бы не просил помощи!

    Добавлено спустя 51 секунду:
    идет перекрытие кодом другого кода и соответственно или нет авторизации или капча для красоты!
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    ну с чего-то же вы взяли, что они мешают друг другу? Это предположения, или есть какие-то признаки?

    Добавлено спустя 1 минуту:
    да не бывает так :)

    скорее всего у вас где-то какой-то IF не выполняется, только и всего.
     
  25. Freekazoid

    Freekazoid Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    17
    Симпатии:
    0
    признаки ? в не работе кода !

    Добавлено спустя 3 минуты 7 секунд:
    думаю что вы правы именно if но в коде заменить его на elseif код перестает вообще работать!
    Код (Text):
    1.  
    2.    $login = htmlspecialchars(stripslashes($_POST['login']));
    3.    if (isset($_GET['logout'])) unset($_SESSION['auth']);
    4.    $admins = include "test.php";
    5.    
    6. if ( isset($_POST['capcha']) )
    7.   {
    8.     $code = $_POST['capcha']; //Получаем переданную капчу
    9.     session_start();
    10.  
    11. if ( isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code) ) //сравниваем введенную капчу с сохраненной в переменной в сессии      
    12. elseif(isset($admins[ $_POST['login'] ]) && $admins[ $_POST['login'] ] == $_POST['pass'] ){
    13.  $_SESSION['login']=$_POST['login'] = $_SESSION['auth'] = '1'; }
    14.          
    15.      echo 'ошибка капчи!';
    16.        unset($_SESSION['capcha']);
    17.     exit();
    18.       }
    я пробовал так но что то в коде не правильно записано.