[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с if else.
DarkStalker
<?
include ('header.php');
include ('settings.php');
if (isset($_POST['submit']))
{
if (isset($_POST['login']) or isset($_POST['pass']))
{
echo "Не заполнено одно или несколько полей.<br><br>";
}
else
{
$login = mysql_real_escape_string($_POST['login']);
$pass = mysql_real_escape_string($_POST['pass']);
$login = trim($login);
$pass = trim($pass);
$sql = mysql_query('INSERT INTO users (login, pass) VALUES ($login, $pass)');
}
}

echo <<<TEXT
<form method='post' action='registration.php'>
Логин (макс. 10 символов):<br><input type='text' maxlenght=10 name='login'><br>
Пароль:<br><input type='text' name='pass'><br>
<input type='submit' name='submit' value='Зарегистрироваться'><br>

TEXT;
include ('footer.php');
?>


получилось так, что в любом случае, заполнены поля или нет, выводится ошибка Не заполнено одно или несколько полей. Почему?



Спустя 7 минут, 20 секунд (10.04.2011 - 12:30) sharki написал(а):
if (!isset($_POST['login']) or !isset($_POST['pass']))

Здесь вы проверяете если НЕ введено, не существует..т.е отрицание !isset

Спустя 1 минута, 27 секунд (10.04.2011 - 12:31) Mirexzpalich написал(а):
if (isset($_POST['login']) or isset($_POST['pass'])) у тебя же написано, что если ЕСТЬ какое либо из этих полей, то вывести что не заплнены поля.... ОНИ ЕСТЬ ВСЕГДА КОГДА ФРМА ОТПРАВЛЕНА. надо белать проверку на содержание.

if ((isset($_POST['login']) and !$_POST['login'])or(isset($_POST['pass']) and !$_POST['pass']))

Спустя 1 минута, 19 секунд (10.04.2011 - 12:33) alex12060 написал(а):

if (isset($_POST['login']) or isset($_POST['pass']))
{
echo "Не заполнено одно или несколько полей.<br><br>";
}


Если (существует отправка поля под именем `логин` или существует отправка поля под именем `пароль`)
{
выводим "Не заполнено одно или несколько полей.<br><br>"
}

Спустя 50 секунд (10.04.2011 - 12:33) sharki написал(а):
тогда уж не
 if ((isset($_POST['login']) and !$_POST['login'])or(isset($_POST['pass'] and !$_POST['pass']))

А
if ( ( isset($_POST['login']) and !empty($_POST['login']) ) or ( isset($_POST['pass']) and !empty($_POST['pass']) )

Спустя 1 минута, 21 секунда (10.04.2011 - 12:35) Mirexzpalich написал(а):
sharki
Согласен, забыл про возможность вводить нолики =)

Спустя 50 минут, 10 секунд (10.04.2011 - 13:25) DarkStalker написал(а):
if (!isset($_POST['login']) or !isset($_POST['pass']))
{
echo "Не заполнено одно или несколько полей.<br><br>";
}


а так можно?

Ну и чтобы не создавать множество тем, задам вопрос здесь:

<?
include ('header.php');
include ('settings.php');
if (isset($_POST['submit']))
{
if (!isset($_POST['login']) or !isset($_POST['pass']))
{
echo "Не заполнено одно или несколько полей.<br><br>";
}
else
{
$login = mysql_real_escape_string($_POST['login']);
$pass = mysql_real_escape_string($_POST['pass']);
$login = trim($login);
$pass = trim($pass);
$md5 = md5($pass);
$sql = mysql_query("INSERT INTO users (login, pass) VALUES ('$login', '$md5')");
echo "<b>Спасибо за регистрацию!</b><br>Ваш логин: <b>$login</b><br>Ваш пароль: <b>$pass</b><br><br>";
}
}

echo <<<TEXT
<form method='post' action='registration.php'>
Логин (макс. 10 символов):<br><input type='text' maxlenght=10 name='login'><br>
Пароль:<br><input type='text' name='pass'><br>
<input type='submit' name='submit' value='Зарегистрироваться'><br>

TEXT;
include ('footer.php');
?>


Предположим пользователь вводит данные логин: te st и пароль <<<gfhjkm>>>. В базу должны занестись данные test (пробелы ведь мы убрали) и <<<gfhjkm>>> (экранируем знаки < и >). Но получилось так:

Ваш логин: te st
Ваш пароль: <<>>

Почему остались пробелы? Почему исчезли буквы в пароле?

Спустя 3 минуты, 7 секунд (10.04.2011 - 13:28) neadekvat написал(а):
Во-первых, почему пробелы должны ыли исчезнуть?
Во-вторых, исходный код страницы гляньте. <gfhjkm> интерпритируется браузером как тэг.

Спустя 2 минуты, 45 секунд (10.04.2011 - 13:31) Mirexzpalich написал(а):
Цитата
А так можно

Тогда у тебя будет выводиться ссобщение когда зайдешь на страничку, а при отправке формы будет выполняться условие FALSE

А почемы бы юзеру не вводить логин с пробелами? То что ты отрезаешь их в начале и конце - правильно...
А пароль - вообще же интимная информация... С ней ничего делать нальзя... Как юзер захотел, пусть такой и будет...

Спустя 1 час, 5 минут, 11 секунд (10.04.2011 - 14:36) DarkStalker написал(а):
$login = mysql_real_escape_string($_POST['login']);
$pass = mysql_real_escape_string($_POST['pass']);
$login = trim($login);
$pass = trim($pass);
$md5 = md5($pass);


будет ли это правильной обработкой данных? Или стоит ещё что то изменить?

Спустя 19 минут, 48 секунд (10.04.2011 - 14:56) sharki написал(а):
DarkStalker
trim() на первые места, а потом уже mysql_real_escape_string()

Спустя 9 минут, 12 секунд (10.04.2011 - 15:05) ИНСИ написал(а):
Цитата
!empty($_POST['login'])

В данном случае будет ошибка, если ввести: 0 ....

DarkStalker попробуй так:
<?
include 'header.php';
include 'settings.php';

if(isset($_POST['submit'])) {

if($_POST['login'] == '' || $_POST['pass'] == '') {
$info = 'Не заполнено одно или несколько полей.';
} else {

function safesql($source) {
$source = trim($source);
if(get_magic_quotes_gpc()) $source = stripslashes($source);
return mysql_real_escape_string($source);
}

$sql = mysql_query("
INSERT
INTO `users`(`login`,`pass`)
VALUES('"
.safesql($_POST['login'])."','".md5(safesql($_POST['pass']))."')
"
);

echo '
<b>Спасибо за регистрацию!</b>
<br>Ваш логин: <b>'
. htmlspecialchars($_POST['login']) . '</b>
<br>Ваш пароль: <b>'
. htmlspecialchars($_POST['pass']) . '</b><br><br>
'
;
}
}

?>

<form
method="post" action="">
Логин (макс. 10 символов):<br><input type='text' maxlenght=10 name='login'><br>
Пароль:<br><input type='text' name='pass'><br>
<input
type='submit' name='submit' value='Зарегистрироваться'><br>

<div><?=
$info?></div>

<?
include 'footer.php'; ?>

Спустя 1 минута, 15 секунд (10.04.2011 - 15:06) Trianon написал(а):
Скажте мне кто-нибудь, какой вред может выйти, если поле с паролем не обработать trim'ом ?

Спустя 1 час, 17 минут, 10 секунд (10.04.2011 - 16:23) DarkStalker написал(а):
velbox, спасибо. Исправил на
if($_POST['login'] == '' || $_POST['pass'] == '')



Trianon, предположим пользователь авторизуется и вводит пароль, но после или до пароля нечаянно ставит пробел. Ему выдаст ошибку, так как пароль в базе и пароль введенный пользователем из-за пробела не будут совпадать.

А вот ещё вопрос.
<?
include ('header.php');
include ('settings.php');
if (isset($_POST['submit']))
{
if (!($_POST['login']) or !($_POST['pass']))
{
echo "Не заполнено одно или несколько полей.<br>";
}
else
{
$login = trim($_POST['login']);
$pass = trim($_POST['pass']);
$md5 = md5($pass);
$sql = mysql_query("SELECT * FROM users WHERE login = '$login'", $db);
$num = mysql_num_rows($sql);
if ($num = 0)
{
echo "Пользователь с таким логином не зарегистрирован!<br>";
}
else
{
$sql = mysql_query("SELECT * FROM users WHERE login = '$login'", $db);
$array = mysql_fetch_array($sql);
if ($md5 = $array['pass'])
{
echo "Вы вошли!<br>";
}
else
{
echo "Пароль неверный!<br>";
}
}
}
}


echo <<<TEXT
<form method='post' action='login.php'>
Логин (макс. 10 символов):<br><input type='text' maxlenght=10 name='login'><br>
Пароль:<br><input type='text' name='pass'><br>
<input type='submit' name='submit' value='Войти'><br>

TEXT;
include ('footer.php');
?>


не работает проверка пароля. Ввожу верный логин и неверный пароль, пишет вы вошли! А если ввести неверный и логин и пароль то выводит пароль неверный. Хотя должен ведь написать, что такой логин не существует. Где я запутался?

Спустя 9 минут, 44 секунды (10.04.2011 - 16:33) Lightt написал(а):
Запрос не верный, у тебя по логину идет проверка только...

$sql = mysql_query("SELECT * FROM users WHERE login = '$login'", $db);


Попробуй так -

$sql = mysql_query("SELECT * FROM users WHERE login = '$login' and pass='$pass'", $db);

Спустя 3 минуты, 29 секунд (10.04.2011 - 16:37) DarkStalker написал(а):
Lightt, спасибо.

Спустя 1 час, 17 минут (10.04.2011 - 17:54) ИНСИ написал(а):
DarkStalker ты если только начинаешь программировать, присматрись в мой пример. Имею в виду безопасность....

Спустя 5 минут, 44 секунды (10.04.2011 - 17:59) DarkStalker написал(а):
velbox, можно тогда прокомментировать строчки

function safesql($source) {
$source = trim($source);
if(get_magic_quotes_gpc()) $source = stripslashes($source);
return mysql_real_escape_string($source);


Спустя 15 часов, 32 минуты, 55 секунд (11.04.2011 - 09:32) ИНСИ написал(а):
DarkStalker полазий по справочнику. Я тебе весь код написал, так ты еще и ленишься сам все посмотреть. Тебе будет больше пользы, если сам попытаешь прокомментировать.
Быстрый ответ:

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