[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: If-else
Druids
Ребят выручайте. Скрипт у меня простой - регистрация. Собственно перерыр кучу инфы в интернете и той что касается if else и данного скрипта. но разобраться не смог.

[php]<h4>Регистрация</h4><br>
<form
action="" method="post">
<h4>
Логин:</h4>
<input
type="text" name="name" value=""><br>
<h4>
Пароль:</h4>
<input
type="password" name="pass"><br>
<h4>
Повторите пароль</h4>
<input
type="password" name="repass"><br>
<h4>
Email:</h4>
<input
type="text" name="email" value=""><br>
<input
type="submit" name=regvalue="Зарегистрироваться">
</form>

<?php


if ($_POST)
{

$name = trim($_POST['name']);
$pass = trim($_POST['pass']);
$repass = trim($_POST['rerpass']);
$email = trim($_POST['email']);
$pass=md5($pass);
//Проверка логина на ошибки
$error=false;
if (empty($name))
{
$error=true;
$errortext = "Логин не введен";
}
else
{
if (strlen($name)<5 || strlen($name)>15) //проверка на длину
$error=true;
$errortext='Длина логина должна быть от 5 до 15 символов';
}

if (empty($pass))
{
$error=true;
$errortext = "Pass не введен";
}
else
{
if (strlen($pass)<5 || strlen($pass)>15) //проверка на длину
$error=true;
$errortext='Длина Pass должна быть от 5 до 15 символов';
}

if ($error)
{
echo($errortext);//Выводим текст ошибок.
}

else
{
require_once("connect.php");
$sql="INSERT INTO USERS SET name='".$name."', pass='".$pass."', email='".$email."'";
$result = mysql_query ($sql);
if (!$result) echo "Не удалось выполнить запрос по причине: ".mysql_error();
else
{
echo "Всё верно";
}
}
}

?>[/php]



Проблема в данном участке

[php]f (strlen($name)<5 || strlen($name)>15) //проверка на длину
$error=true;
$errortext='Длина логина должна быть от 5 до 15 символов';
}

if (empty($pass))
{
$error=true;
$errortext = "Pass не введен";
}
else
{
if (strlen($pass)<5 || strlen($pass)>15) //проверка на длину
$error=true;
$errortext='Длина Pass должна быть от 5 до 15 символов';
}

if ($error)
{
echo($errortext);//Выводим текст ошибок.
}[/php]


В данном случае если я жму на кнопку регистрация (поля все пустые) то выводится сообщение на экран о том что "только пароль состоит не из 5-15 символов" логин не затрагивается. Если прописываем пароль нормальный (по условию), а логин оставляем пустой - ошибка так-же не выводится. Но как только убираем вот этот кусок
if (empty($pass))
{
$error=true;
$errortext = "Pass не введен";
}
else
{
if (strlen($pass)<5 || strlen($pass)>15) //проверка на длину
$error=true;
$errortext='Длина Pass должна быть от 5 до 15 символов';
}

То выводятся все ошибки которые связаны с логином. Где и что я напутал?



Спустя 5 минут, 13 секунд (5.07.2011 - 14:33) Renden написал(а):

$name = trim($_POST['name']);
$pass = trim($_POST['pass']);
$repass = trim($_POST['rerpass']);
$email = trim($_POST['email']);
$pass = md5($pass);
//Проверка логина на ошибки
$error = false;
$errortext = '';
if (empty($name))
{
$error = true;
$errortext .= "Логин не введен";
}
if (strlen($name)<5 || strlen($name)>15)
{
$error = true;
$errortext .= 'Длина логина должна быть от 5 до 15 символов';
}

if (empty($pass))
{
$error=true;
$errortext .= "Pass не введен";
}

if (strlen($pass)<5 || strlen($pass)>15)
{
$error=true;
$errortext .='Длина Pass должна быть от 5 до 15 символов';
}

if ($error)
{
echo($errortext);//Выводим текст ошибок.
}
...

Спустя 2 минуты, 22 секунды (5.07.2011 - 14:35) Druids написал(а):
А почему в данном случае else не применим? с чем это можно свзяать?

Спустя 1 минута, 30 секунд (5.07.2011 - 14:37) Krevedko написал(а):
Цитата
о том что "только пароль состоит не из 5-15 символов" логин не затрагивается


ты каждый раз перетираешь предыдущую ошибку. используй конкатенацию или складывай ошибки в массив

Спустя 1 минута, 41 секунда (5.07.2011 - 14:39) Krevedko написал(а):
Цитата (Druids @ 5.07.2011 - 11:35)
А почему в данном случае else не применим? с чем это можно свзяать?

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

Спустя 2 минуты, 33 секунды (5.07.2011 - 14:41) Renden написал(а):
Druids
Можно, креведко прав мне лень просто было:)
И я думаю лучше elseif использовать smile.gif

Спустя 1 минута, 14 секунд (5.07.2011 - 14:42) Druids написал(а):
Цитата (Krevedko @ 5.07.2011 - 11:37)
Цитата
о том что "только пароль состоит не из 5-15 символов" логин не затрагивается


ты каждый раз перетираешь предыдущую ошибку. используй конкатенацию или складывай ошибки в массив

Предлагаешь использовать так? я просто новичек =)

if (strlen($pass)<5 || strlen($pass)>15)  and (strlen($name)<5 || strlen($name)>15) //проверка на длину
$error=true;
$errortext='Длина Pass'а и Логина должна быть от 5 до 15 символов';

Спустя 3 минуты, 26 секунд (5.07.2011 - 14:46) Renden написал(а):
Druids
он имелл виду что ты точку не используешь перед равно, или переменная с ошибками не массив.

Спустя 30 секунд (5.07.2011 - 14:46) Krevedko написал(а):
$errortext .= '<br>текст ошибки';
и забыл фигурные скобки. иф затронет только $error=true;

Спустя 1 минута, 17 секунд (5.07.2011 - 14:48) Krevedko написал(а):
я лично складываю в массив и использую implode, если надо выести скопом, либо элементы массива раскидываю между полями, если надо например вывести ошибку для логина возле логина, ошибку для пароля возле пароля итд

Спустя 2 минуты, 21 секунда (5.07.2011 - 14:50) Druids написал(а):
т.е. мой код с if else будет таким?

if (empty($name))
{
$error = true;
$errortext .= "Логин не введен";
}
else
{
(strlen($name)<5 || strlen($name)>15)
$error = true;
$errortext .= 'Длина логина должна быть от 5 до 15 символов';
}


и полная копия будет и для пароля.

Цитата
я лично складываю в массив и использую implode, если надо выести скопом, либо элементы массива раскидываю между полями, если надо например вывести ошибку для логина возле логина, ошибку для пароля возле пароля итд


Можно показать пример? на моём коде?

Спустя 7 минут, 55 секунд (5.07.2011 - 14:58) Krevedko написал(а):
Цитата
т.е. мой код с if else будет таким?


можно даже проще. вверху где-нить
$errortext = '';
это чтобы нотиса не было. и потом:

if (empty($name))
$errortext .= "Логин не введен";
elseif(strlen($name)<5 || strlen($name)>15)
$errortext .= 'Длина логина должна быть от 5 до 15 символов';}

и собсно проверка
if(!empty($errortext ))
выводим ошибки

Спустя 6 минут, 3 секунды (5.07.2011 - 15:04) Krevedko написал(а):
Цитата
Можно показать пример? на моём коде?


тоже самое, только выше вместо $errortext = '';
пишешь
$errortext = array();
и вместо $errortext .= ... пишешь $errortext[] = ...

проверка вместо
if(!empty($errortext ))
echo $errortext;
будет

if(count($errortext))
echo '<br>' . implode('<br>', $errortext);


Спустя 4 минуты, 39 секунд (5.07.2011 - 15:09) Druids написал(а):
Цитата (Renden @ 5.07.2011 - 11:33)

$name = trim($_POST['name']);
$pass = trim($_POST['pass']);
$repass = trim($_POST['rerpass']);
$email = trim($_POST['email']);
$pass = md5($pass);
//Проверка логина на ошибки
$error = false;
$errortext = '';
if (empty($name))
{
$error = true;
$errortext .= "Логин не введен";
}
if (strlen($name)<5 || strlen($name)>15)
{
$error = true;
$errortext .= 'Длина логина должна быть от 5 до 15 символов';
}

if (empty($pass))
{
$error=true;
$errortext .= "Pass не введен";
}

if (strlen($pass)<5 || strlen($pass)>15)
{
$error=true;
$errortext .='Длина Pass должна быть от 5 до 15 символов';
}

if ($error)
{
echo($errortext);//Выводим текст ошибок.
}
...

Почему-то не срабатывает участок

if (empty($pass))
{
$error=true;
$errortext .= "Pass не введен";
}


т.е. 3 проверки разом срабатывают, а данная отмалчивается =(

Спустя 6 минут, 41 секунда (5.07.2011 - 15:15) Krevedko написал(а):
из-за этого
$pass = md5($pass);

Спустя 6 минут, 33 секунды (5.07.2011 - 15:22) Druids написал(а):
Цитата (Krevedko @ 5.07.2011 - 12:15)
из-за этого
$pass = md5($pass);

я знаю, что можно, как-то при отправке запроса в md5 шифровать, только не знаю как =) как это будет на моём запросе выглядеть?

$pass = md5($pass); - я так понимаю придётся удалить =)

Спустя 8 минут, 35 секунд (5.07.2011 - 15:30) Druids написал(а):
Извиняюсь, опустил просто $pass= md5($pass) в низ =)

Спустя 3 минуты, 38 секунд (5.07.2011 - 15:34) Krevedko написал(а):
ты пустоту просто шифровал ) она видимо тоже шифруется. поэтому переменная перестала быть пустотой )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.