|
|
|
| Здравствуйте, я не давно учу php, и столкнулся с такой проблемой, вод код регистрации нового пользователя, он работает, все хорошо... но если он будет в том виде в котором сейчас, то все что между разрывом PHP кода игнорируется браузером... то есть
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
".................../TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML xmlns="...............1999/xhtml">
<HEAD>
<LINK rel="stylesheet" type="text/css" href="mystyle.css" />
<TITLE>Регистрация</TITLE>
</HEAD>
<BODY>
<DIV id="head">Общение на .............</DIV>
<div id='reg' ><b>Регистрация</b></div>
|
вот этот участок кода броузер не видит( и не подгружает CSS... помогите пожалуйста реализовать это... мучась второй день над этим, мне необходимо, что бы было именно так... чтобы в случаи некорректного заполнения Формы, выдовалось об этом сообщение именно в том месте где сейчас стоит. Прошу прощение за громоскость кода.
<?php include 'blocks/db.php';
function clearText($test){
return mysql_escape_string(htmlspecialchars(trim($test)));
}
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$login = clearText($_POST['login']);
$pass = clearText($_POST['pass']);
$clear_pass = clearText($_POST['clear_pass']);
$name = clearText($_POST['name']);
$surname = clearText($_POST['surname']);
$pol = $_POST['pol'];
$check = $_POST['check'];
$date_reg = date('d.m.Y H:i');
if(!empty($login)&&!empty($pass)&&isset($check)&&$pass==$clear_pass){
$query = mysql_query("SELECT COUNT(*) FROM users WHERE login='$login'");
if(!$query) exit(mysql_error().' ошибка, попробуйте позже!');
$res = mysql_result($query, 0);
if($res == 0){
$query = mysql_query("INSERT INTO users (login, password, date_reg,
name, surname, pol)
VALUES ('$login', '$pass', '$date_reg', '$name',
'$surname', '$pol')");
if($query){
setcookie('login',$login);
setcookie('pass', $pass);
$login = $_COOKIE['login'] = $login;
$pass = $_COOKIE['pass'] = $pass;
header('Location: testcookie.php');
exit();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"..............................TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML xmlns="................./1999/xhtml">
<HEAD>
<LINK rel="stylesheet" type="text/css" href="mystyle.css" />
<TITLE>Регистрация</TITLE>
</HEAD>
<BODY>
<DIV id="head">Общение на .......................</DIV>
<div id='reg' ><b>Регистрация</b></div>
<?php // продолжения кода
}elseif(!$query){
echo 'Ошибка при добавлении данный. Попробуйте позднее.';
}
}elseif($res > 0){
echo "<div id='error'>Логин занят, пожалуйста, выберите другой.</div>";
}
}elseif(empty($login)&&empty($pass)){
echo "<div id='error'>Вы не заполнили обязательные поля!</div>";
}elseif(empty($login)){
echo "<div id='error'>Укажите логин!</div>";
}elseif(empty($pass)){
echo "<div id='error'>Укажите пароль!</div>";
}elseif($pass!=$clear_pass){
echo "<div id='error'>Пароли не совпадают!</div>";
}elseif(!isset($check)){
echo "<div id='error'>Необходимо согласиться с правилами!</div>";
}
}
?>
<center>Обязательные поля</center>
<hr align="center" color="#3366FF" noshade="noshade"/>
<p>
<FORM action = '<?=$_SERVER['PHP_SELF'];?>' method = 'POST'>
<font color='red'>*</font>Введите логин:<br>
<INPUT type = 'text' name = 'login' value = "<?=$_COOKIE['login'];?>"><br>
<font color='red'>*</font>Введите пароль:<br>
<INPUT type = 'password' name = 'pass' value = "<?=$_COOKIE['pass'];?>"><br>
<font color='red'>*</font>Подтвердите пароль:<br>
<INPUT type = 'password' name = 'clear_pass'><br>
</p>
<center>Личные данные</center>
<hr align="center" color="#3366FF" noshade="noshade"/>
<p>
Ваше имя:<br>
<INPUT type = 'text' name = 'name'><br>
Ваша фамилия:<br>
<INPUT type = 'text' name = 'surname'><br>
Ваш пол:<br>
<SELECT name = 'pol'>
<option value="------" selected="selected">------</option>
<option value="Мужской">Мужской</option>
<option value="Женский">Женский</option>
</SELECT><br>
<INPUT type = 'checkbox' name = 'check'> Соглашение с пользовательскими <a href='#'>правилами</a>.<br>
<INPUT type = 'submit' value = 'Зарегистрироваться' class="button">
</FORM>
</p>
<a href='#'>Назад</a><br>
<DIV id='footer'><a href='index.php'>На главную</a></div>
</BODY>
</HTML>
|
| |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 15:48)
| | А зачем вам exit()? | |
|
|
|
|
|
|
|
для: Киналь
(03.03.2012 в 15:53)
| | header('Location: testcookie.php');
exit(); Вы про это место? | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 15:59)
| | Да, про это. Только неудачно выразился. У вас написано:
if($query){
.....
exit();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
.....
|
Не хватает закрывающей фигурной скобки после exit(). Потому что exit() останавливает работу скрипта и, естественно, после него ничего не выводится. | |
|
|
|
|
|
|
|
для: Киналь
(03.03.2012 в 16:18)
| |
<?php
if($query){
.....
exit();
} // тут добавил
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
<?php
..............
}elseif(!isset($check)){
echo "<div id='error'>Необходимо согласиться с правилами!</div>";
}
// } но вот эту пришлось убрать, выдовало ошибку...
?>
|
Но ничего не поменялось, стало только хуже... при неправильно заполнении формы ошибки выдаваться перестали | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 16:58)
| | Скобка — это не волшебное заклинание, это выражение логики работы скрипта) Вы это всё сами писали или копировали откуда-то? И понимаете ли вы, как это всё должно работать? Именно на словах, наподобие «если пользователь... , то тогда ... , а иначе ..., потом ...»? | |
|
|
|
|
|
|
|
для: Киналь
(03.03.2012 в 17:14)
| | да, код мой и я понимаю как оно должно все работать, и оно работает все замечательно, но вот только это... | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 17:22)
| | и я понимаю как оно должно все работать
судя по этой строке не понимаете
mysql_escape_string(htmlspecialchars(trim($test)));
|
mysql_escape_string - предназначена для обработки текста перед занесением в базу данных, и не только из-за SQL-инъекций.
htmlspecialchars - предназначена для обработки данных перед выводом в браузер.
___
и это только третья строка кода, дальше ещё не успел посмотреть | |
|
|
|
|
|
|
|
для: Valick
(03.03.2012 в 17:30)
| |
<?php
if($query){
setcookie('login',$login);
setcookie('pass', $pass);
$login = $_COOKIE['login'] = $login;
$pass = $_COOKIE['pass'] = $pass;
header('Location: testcookie.php');
exit();
}elseif(!$query){
exit( 'Ошибка при добавлении данный. Попробуйте позднее.');
}
} ////////////
} // закрыл полностью тут все
} ///////////
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"..............................TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php
.............
// открыл новый код ....
if($res > 0){
echo "<div id='error'>Логин занят, пожалуйста, выберите другой.</div>";
}
if(empty($login)&&empty($pass)){
echo "<div id='error'>Вы не заполнили обязательные поля!</div>";
}elseif(empty($login)){
echo "<div id='error'>Укажите логин!</div>";
}elseif(empty($pass)){
echo "<div id='error'>Укажите пароль!</div>";
}elseif($pass!=$clear_pass){
echo "<div id='error'>Пароли не совпадают!</div>";
}elseif(!isset($check)){
echo "<div id='error'>Необходимо согласиться с правилами!</div>";
}
?>
|
Проблема решена, все что между PHP кодом выводиться, CSS в том числе... проблема единственном что при запросе этой страницы сразу идет проверка на empty($login)&&empty($pass), так что при загрузки этой страницы сразу выводиться
echo "<div id='error'>Вы не заполнили обязательные поля!</div>";
СПАСИБО | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 17:33)
| | можете объяснить вот эти строки?
$login = $_COOKIE['login'] = $login;
$pass = $_COOKIE['pass'] = $pass;
|
| |
|
|
|
|
|
|
|
для: Valick
(03.03.2012 в 17:40)
| | это критика? ) я передаю значения куки в массив и уже на другой странице проверяю их | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 17:42)
| | судя по коду вы их проверяете сразу после установки
нет это не критика, судя по коду вы его слепили из разных кусков что нашли на просторах интернета, хотя подозрения есть что просто откуда-то скачали, но раз вы говорите что писали сами у меня нет повода вам не верить.
у вас есть какие-нибудь книги по РНР? | |
|
|
|
|
|
|
|
для: Valick
(03.03.2012 в 17:50)
| | да, конечно есть... PHP5 для чайников Джанет Валейд... + манул. Я не учу сразу 5-ть книг, так как считаю, что у каждого автора своя точка зрения, и если новичек будет учить нескольких авторов, то просто запутается, так что мне пока одной книги хватает. что касается кода, да, я его сразу проверяю. основное, что должно работать при правельных действиях у меня сверху, а что -то другое идет уже под ним... | |
|
|
|
|
|
|
|
для: Valick
(03.03.2012 в 17:30)
| |
mysql_escape_string(htmlspecialchars(trim($test)));
|
может я что-то и не до понимаю, молодой еще в этом, но эти ф-ции обрабатывают только то, что ввел пользователь и не как не может влиять на работу всего скрипта и в том числе на вывод данных в броузер всего, что не касается данными введенные пользователем | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 15:48)
| | Так, ну поехали. Для начала мы от вашего кода оставим только логику и отформатируем его почётче, . Как-то так:
<?php include 'blocks/db.php';
function clearText($test){ return mysql_escape_string(htmlspecialchars(trim($test)));}
if($_SERVER['REQUEST_METHOD'] == 'POST') // если что-то пришло POST'ом
{
// заполняем переменные пользователя
if(!empty($login)&&!empty($pass)&&isset($check)&&$pass==$clear_pass) // если всё хорошо
{
//Ищем пользователя в базе
if($res == 0) // пользователя нет в базе
{
// Заносим его в базу
if($query) // если занесли успешно
{
// ставим куки с логином и паролем
// переопределяем переменные $login и $pass, беря значения из только что поставленных кук
// Смысл этого мне неясен, но пока оставим
// перенаправляем на testcookie.php и завершаем работу скрипта
?>
<!--HTML-код, который не выполнится никогда, так как стоит после команды exit()-->
<?php // продолжения кода
}
elseif(!$query) // что-то не так
{
echo 'Ошибка при добавлении данный. Попробуйте позднее.';
// однако работа скрипта продолжается, нет ни exit(), ни чего-то аналогичного
}
// нет соответствующего else; возможно, нужно чуть выше писать не elseif, а else
}
elseif($res > 0) // пользователь есть в базе
{
echo "<div id='error'>Логин занят, пожалуйста, выберите другой.</div>";
}
// опять не вижу else
}
elseif(/*одно из условий не выполнено*/)
{
// уведомляем об этом пользователя. Опять нет else.
}
}
?>
<!--всякий разный HTML-->
|
Посмотрите на код теперь. Это соответствует той логике, которую вы хотели получить? | |
|
|
|
|
|
|
|
для: Киналь
(03.03.2012 в 17:47)
| | Долго писал, уже всё решили=) | |
|
|
|
|
|
|
|
для: Киналь
(03.03.2012 в 17:48)
| | Спасибо конечно, но я не заметил разницы))) | |
|
|
|
|
|
|
|
для: Default
(03.03.2012 в 17:55)
| | приду домой, попробую поправить ваш код | |
|
|
|
|
|
|
|
для: Valick
(03.03.2012 в 17:59)
| | то что он грубо написан я и сам понимаю, я же говорю, что я только учусь) и просто не вижу смыла втыкать везде else, если мне вполне хватает elseif ()... этот код будет еще раз 10 переделываться, будет добавлено в ф-ию обработки данных введеных пользователем регулярные выражения, и хочу поставить еще защиту от роботов, но вот с последним у меня даже представления нет как работать... но это дело времени... мануал мне в помощь и форум наподобие этого) вопрос стоял в том, чтобы сделать вывод CSS, получилось... теперь думать буду как убрать при запросе этой страницы сразу вывод оповещения о не заполненых полях ) А на Ваш код с удовольствием посмотрю ) | |
|
|
|
|