Вопрос № 166893: Доброе время суток товарищи эксперты..у меня сложилась такая ситуация: мне нужно кое что спрограммить.для реализации своих идей выбрал php..вобщем есть БД,в которой есть таблица с аккаунтами (логин и пароль)..используется базовая аутентификация..сейч...
Вопрос № 166921: Здравствуйте уважаемые эксперты программирования нужна ваша помощь имеется форма для регистрации нужно функцию проверки заполнения всех обязательных полей
и печать на новой странице данных, введенных пользователем в форме регистрации и подтверждение...
Вопрос № 166.893
Доброе время суток товарищи эксперты..у меня сложилась такая ситуация: мне нужно кое что спрограммить.для реализации своих идей выбрал php..вобщем есть БД,в которой есть таблица с аккаунтами (логин и пароль)..используется базовая аутентификация..сейчас у меня все работает вот так (привожу содержимое файлов): ****** index.php ******* <? require_once("header.php"); ?> <div id="body"> main </div> <? require_once("footer.php"); ?>
if(!isset($_SERVER['PHP_AUTH_USER'])) { Header("WWW-Authenticate: Basic realm="Авторизация""); Header("HTTP/1.0 401 Unauthorized"); echo "Вы не ввели логин и пароль.";
exit; } else { $mysql=@mysql_connect($db_host,$db_user,$db_pass) or die("Невозможно соединиться с сервером $db_host: ".mysql_error()); $mysql=@mysql_select_db($db_name) or die("Невозможно подключиться к базе $db_name: ".mysql_error()); $name=$_SERVER['PHP_AUTH_USER']; $passw=$_SERVER['PHP_AUTH_PW']; $passw=md5($passw); $query="select * from users where name='$name'"; $resultat = mysql_query($query); $obj = mysql_fetch_object($resultat); if
(($obj->pass!=$passw)||($passw=="")) { echo 'Неправильное имя пользователя или пароль<br>Закройте окно и повторите вход в систему'; exit; } } ?>
В этом файле все необходимые данные для подключения к БД берутся из файла conf.php.. Вот в таком виде все в принципе работает.. Но есть один момент..Мне понадобилось использование js-скрипта,который бы запускался при откр
ытии страницы (onLoad())..для этого нужен тег <body>..но после добавления тегов все перестает работать..Говорит типа файл login.php не может изменить заголовочную информацию (базовая аутентификация перестает работать)..Я так понимаю это из-за операторов require_once (получается што я уже как бы отправил данные в страницу,а базовая аутен-ция должна работать еще до отправки данных страницы,когда формируется ее заголовок)...Вопрос: как мне заставить работать баз. аутен-цию с тегами <html> <head>
<body>...Заранее спасибо.
Отправлен: 10.05.2009, 15:39
Вопрос задал: psevdo (статус: 1-й класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Hubbitus
Здравствуйте, psevdo! Первый вариант - использовать буферизацию вывода - http://ru2.php.net/manual/en/book.outcontrol.php тогда нету зависимости от вывода. Второй Вариант, подробнее описать что Вы делаете на JavaScrip и почему это ломает текущую схему авторизации. Это ОЧЕНЬ страннно. Т.к. у Вас авторизация происходит ДО <body> то и мешать ничего в теле документа ей не должно.
--------- Если у Вас есть все что Вы хотите - значит Вы мало хотите!
Ответ отправил: Hubbitus (статус: 10-й класс)
Ответ отправлен: 10.05.2009, 16:23
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 248910 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 166.921
Здравствуйте уважаемые эксперты программирования нужна ваша помощь имеется форма для регистрации нужно функцию проверки заполнения всех обязательных полей и печать на новой странице данных, введенных пользователем в форме регистрации и подтверждение(типа подтвердить введенные данные перед отправкой или изменить)
Приложение:
Отправлен: 10.05.2009, 22:46
Вопрос задал: Sky-er (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Волков Алексей
Здравствуйте, Sky-er! Как правило, первичная проверка обязательных для заполнения полей реализуется на javascript - это позволяет не гонять данные на сервер без проверки. Концепция безопасности при этом диктует повторную проверку данных уже на сервере средствами, например, РНР. Проверка на javascript может выглядеть в простейшем лучае так:
1) пишем скрипт фуекции проверки:
<script> function test() {
if (document.getElementByName("email").value.lastIndexOf("@")
== -1) return false; // проверки других полей return true; } 2) добавляем в тэг <form вызов функции проверки: <form ...... onSubmit="return test();">
после передачи данных они становятся доступны для обработки в глобальном массиве $_POST.
проверку переданных данных можно выполнить следующим образом:
if (isset($_POST['email']) || $_POST['email'] == '') { // вывод сообщения об ошибке в
вода и формы } else ...
// правильнее при проверке введённых данных воспользоваться регулярными выражениями, таким образом Вы избежите возможного взлома через форму ввода, например, так:
if ( !preg_match('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*@([a-z0-9])*(.([a-z0-9])([-a-z0-9_-])([a-z0-9])+)*$/i', $_POST['email']) { // вывод сообщения об ошибке ввода и формы } else
// вывод: { foreach ($_POST as $key => $value) { echo "в поле $key введено
значение $value<br>"; } };
и ещё, если Вы в фразе "печать на новой странице данных" имели в виду новое окно, то Вам тег формы нужно дополнить параметром target="_blank"
Удачи.
--------- Всё, что есть хорошего в жизни - либо незаконно, либо аморально, либо ведёт к ожирению...
Ответ отправил: Волков Алексей (статус: 3-й класс)
Ответ отправлен: 11.05.2009, 20:26
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 248961 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.