Уважаемые программисты, у меня появилась нужда в использование php кода, но в сам язык я несилен и поэтому обращаюсь за помощью. Проблема проста но решения я так и не смог найти из за незнания где искать. итак, логика то го что нужно в итоги. 1 пользователь попадает на сайт и идет проверка на авторизацию. 2 если пользователь авторизован то загрузка страниц продолжается дальше. 2 пользователь не авторизован следовательно переводим на страницу авторизации и даем заполнить форму. 3 после заполнения проверка на заполнены все поля формы 4 правильность введения капчи. 5 продолжение работы с сайтом. 6 работа с ошибками вывод на страницу. Я погуглин и по находил различные куски кода а вот собрать так и не получается. собственно код. Код (Text): <?php $login = htmlspecialchars(stripslashes($_POST['login'])); if (isset($_GET['logout'])) unset($_SESSION['auth']); $admins = include "test.php"; if ( isset($_POST['capcha']) ) { $code = $_POST['capcha']; //Получаем переданную капчу session_start(); if ( isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code) ) //сравниваем введенную капчу с сохраненной в переменной в сессии if(isset($admins[ $_POST['login'] ]) && $admins[ $_POST['login'] ] == $_POST['pass'] ){ $_SESSION['login']=$_POST['login'] = $_SESSION['auth'] = '1'; } else echo 'ошибка капчи!'; unset($_SESSION['capcha']); exit(); } //Удаляем капчу из сессии ?> <html> <body> <?php if (isset($_SESSION['auth']))echo 'Вы вошли как,<span style="color:red"> ' .$login.'</span> >>> <a href="test2.php?logout">Выход'; else { ?> <tt><H1>вы не авторизованы</H1></tt> <?php foreach($_POST as $G){ if(!$G){ die("не все поля заполнены\r\n"); } }?> <form method='POST' action = 'test2.php'> <table width="27%" border="0"> <tr><td>Логин<FONT color="#ff0000">*</FONT></td><td><input type='text' name='login'></td></tr> <tr><td>Пароль<FONT color="#ff0000">*</FONT></td><td><input type='password' name='pass'></td></tr> <tr> <td colspan="2"><img src="capcha/captcha.php" width="120" height="20"/></td></tr> <tr><td>Капча:<FONT color="#ff0000">*</FONT></td><td><INPUT name="capcha" class="$capcha" maxlength=40></td></tr> <tr><td>С уставом согласен:<FONT color="#ff0000">*</FONT></td><td><input type="checkbox" name="ustav" class="$ustav" /></TEXTAREA></td></tr> <tr> <td colspan="2"><input type='submit' value='Авторизоваться'></td></tr> </table> </form> <?}?> </body> </html>
Бро, помоги мне плз, построй дом с такими-то характеристиками, будь добр, с нуля, а я пока фильм посмотрю. Ирония ясна? Помощь, это когда сделал все сам, но в чем-то вот не получается и надо чтобы помогли. Ты же даешь конкретное задание. Оно требует времени. Время стоит денег. Помощь и халявное исполнение - не одно и то же. В противном случае тебе сюды - viewforum.php?f=36
вполне согласен. Если прочесть внимательнее мое "задание" то видно что должно быть по завершению. А так же я приложил сценарий исполнения на который по заданию я хотел бы услышать ответы что и желательно в каком месте недочет я не писал вот это я хочу делайте. А так же если бы вы прочли код, то заметили что большинство уже работает но не по логике задания в посте. Вполне возможно что не корректно подошел к вопросу задания и проблем. Буду исправлять ошибка в логики, код выполняет поставленные задачи, но как я и писал он сборный и поэтому он не корректно работает. Мне его бы распределить так как нужно но за незнания языка на должном уровне сам неспособен.
И что предлагаешь нам его запускать? Лично у меня сейчас под рукой нет php и я не компилятор. Опиши что не так может помогу.
smitt Дело в логике. Более расширенно: В отсутствии таковой мне нужно перераспределить модули и связать их между собой что бы действия происходили по очередности а не как сейчас. Код работает капча проверяется и выдает сообщение верно/неверно, а так же осуществляется вход пользователя и идет проверка заполнения формы. Но все происходит сумбурно или капча выдает что все нормально и не срабатывает вход пользователя. А так же я не смог нагуглить закрытия сайта от не авторизованных пользователей.
Выбрась свой код, пойдем с начала. Вот ссылка разберись что там написано, если есть вопросы пиши. http://web3designing.in/php/posts/post1.php Тебе там потребуется начать сессию session_start(); Если с авторизацией все OK пишем в переменную сессии какое то значение. Потом просто проверяем эту переменную когда надо знать авторизован человек или нет.
smitt Можно сразу поправку перед началом работы. У нас на фирме у персонала свои логины и пароли и данный сайт делается для внутреннего использования без базы MySQL а для хранения паролей используется файл в моем случае Код (Text): $admins = include "test.php"; можно в принципе и .txt использовать это не столь важно главное что бы файл а не база. я вот нашол проверку имени думаю ее использовать в качестве уменьшения ошибок по выходу http://ruseller.com/lessons.php?rub=29&id=174
Мне без раздницы где вы там храните. Ты скопировал подряд но не понимаешь как все работает. Я хочу что бы ты по этапно шел и писал.Если есть вопросы обращался. Тогда ты сам все поймешь. Можешь написать без капчи?
Увы но нельзя сам не знаю почему начальству она нужно! я могу написать на С++ но не знаю как его взаимодействовать с html или другими веб языками. Код я понять или по крайней мере разобраться смогу. Немного почитал уже. Добавлено спустя 3 минуты 6 секунд: smitt 1 пользователь попадает на сайт и идет проверка на авторизацию. Это я так и не смог найти даже похожего аналога. как можно определить, "предполагаю через куки" что пользователь не авторизован.? Добавлено спустя 16 минут 51 секунду: smitt Вот тестовая работа страници. http://free-web.hol.es/temp/test2.php
мои интересы вас не должны волновать. А страничка лежит не для показа чем я в свободное время увлекаюсь, а для тестовой проверки знающих людей. Вам часто говорят что вы мешаете сильно...
Аторизован или нет определяется через сессию. Общая схема такая: пользователь переходит на страницу ввода пароля и логина. Вводит, данные пересылаются на скрипт который проверяет введеные данные.Если все хорошо то создает переменную сессии с каким нибудь значением. На страницах предназначеные для авторизованных пользователей должна быть проверка задана эта переменная или нет.Если нет то пользователь не автортзован. Когда человек делает логаут то просто удаляем эту переменную unset($_SESSION['val']) Добавлено спустя 1 минуту 16 секунд: так же должены быть включены сессии session_start();
smitt Как я понимаю у нас должен быть такой код. Форма регистрации Код (Text): <form method='POST' action = 'test2.php'> <table width="30%" border="1"> <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> <tr><td width="15%">Пароль<FONT color="#ff0000">*</FONT></td><td width="15%"><input type='password' name='pass'></td></tr> <tr> <td width="30%" colspan="3"><img src="capcha/captcha.php" width="120" height="20"/></td></tr> <tr><td width="15%">Капча:<FONT color="#ff0000">*</FONT></td><td width="15%"><INPUT name="capcha" class="$capcha" maxlength=40></td></tr> <tr><td width="15%">С уставом согласен:<FONT color="#ff0000">*</FONT></td><td width="15%"><input type="checkbox" name="ustav" class="$ustav" /></td></tr> <tr> <td width="30%" colspan="3"><input type='submit' value='Авторизоваться'></td></tr> </table> </form> дальше код с переданной в него переменной! Код (Text): session_start(); if(isset($admins[ $_POST['login'] ]) && $admins[ $_POST['login'] ] == $_POST['pass'] ){ $_SESSION['login']=$_POST['login'] = $_SESSION['auth'] = '1'; echo 'пользователь прошол регистрацию <a href="#"> переход </a> '; else echo 'пользователь не активирован'; } это я понял как работает! Трудность в соединение двух сесий проверки пользователя и капчи!
Соединять сессии не нужно. Для каждого клиента открывается одна и та же сессия, если у него не сменился идентификатор сессии. То есть открыли сессию на одной странице, записали в нее что-то, потом открыли сессию на другой странице и вуаля - переменная там будет доступна.
Что нибудь стало понятно из ответа Fell-x27? Если нет то продолжим постепенное написание логин формы. ........................................................................... Не надо все впихивать в 1 файл. Потом другие не php программисты смотрят такие исходники и говорят что php хреновый язык а php программисты это низшее существо в айти экосистеме((( Конечно просить писать по MVC не стану, но хоть немного упростим работу... Создадим отдельный файл который будет обрабатывать запросы. В action формы укажем этот скрипт.Там вставь проверку.Вставь и проверь что все ОК работает. А то потом отлаживать искать ошибку сложно будет. Ну а теперь прошу меня извинить я пошел ставить CentOS. Если что завтра продолжим.
Fell-x27 Это код проверки капчи! Код (Text): if ( isset($_POST['capcha']) ) { $code = $_POST['capcha']; //Получаем переданную капчу session_start(); if ( isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code) ) //сравниваем введенную капчу с сохраненной в переменной в сессии echo 'капча верна'; else echo 'ошибка капчи!'; unset($_SESSION['capcha']); //Удаляем капчу из сессии exit(); } проблема что коды мешают друг другу я не могу понять как в php объединить их между собой! нужно стобы они действовали по схеме пользователь ввел данные проверка на заполнение форм и дальше авторизация если капча верна если нет то вывод ошибки "echo 'ошибка капчи!';" собственно это и вывод ошибок мешает.
если бы я знал я бы не просил помощи! Добавлено спустя 51 секунду: идет перекрытие кодом другого кода и соответственно или нет авторизации или капча для красоты!
ну с чего-то же вы взяли, что они мешают друг другу? Это предположения, или есть какие-то признаки? Добавлено спустя 1 минуту: да не бывает так скорее всего у вас где-то какой-то IF не выполняется, только и всего.
признаки ? в не работе кода ! Добавлено спустя 3 минуты 7 секунд: думаю что вы правы именно if но в коде заменить его на elseif код перестает вообще работать! Код (Text): $login = htmlspecialchars(stripslashes($_POST['login'])); if (isset($_GET['logout'])) unset($_SESSION['auth']); $admins = include "test.php"; if ( isset($_POST['capcha']) ) { $code = $_POST['capcha']; //Получаем переданную капчу session_start(); if ( isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code) ) //сравниваем введенную капчу с сохраненной в переменной в сессии elseif(isset($admins[ $_POST['login'] ]) && $admins[ $_POST['login'] ] == $_POST['pass'] ){ $_SESSION['login']=$_POST['login'] = $_SESSION['auth'] = '1'; } echo 'ошибка капчи!'; unset($_SESSION['capcha']); exit(); } я пробовал так но что то в коде не правильно записано.