Передача переменных в форме

DanGien

Новичок
Передача переменных в форме

Приветствую всех!

Возник такой вот вопрос. Есть скрипт, работает на ура. Но уже несколько раз получил от пользователей (из 400 человек 2-3 раза) письмо, что войдя в систему, они нажимают на кнопку "Сделать то-то", а программа им советует повторить вход.

Поясню.

Я организовал все так, что после входа для перемещения в программе есть кнопочки вида

<form name="delaemvot" action="delaem.php" method="post"><input name="param1" type="hidden" value="$param1"><input name="param2" type="hidden" value="$param2"><input type="submit" value="Поехали"></form>

При нажатии на кнопочку программа берет эти переменные, сверяет их в базе, если они есть и соответствуют др. другу, то все ОК. Иначе советует "повторите вход".

У меня все работает, но некоторые пишут, что у них не работает. Захожу с их логином, все работает.

Почему может не работать у кого-то? Не зависит ли это от операционки и браузера? Может у них не передаются эти переменные?

Спасибо за ответ!
 

N9

Новичок
DanGien
а ты уверен, что эти самые 2-3 человека верно вводят свой логин? ведь у бОльшей части посетителей такой проблемы не наблюдается...
 

Nime

Guest
Раз они заходят, а потом получают ошибку при дальнейшем переходе, то соответственно пароль вводят правильно... Потому нужен код.
 

DanGien

Новичок
Код проверки очень простой:

-----------------------------------------------------------

if ($param1 == "")
{
print "Ошибка! Вернитесь на <a href=$site>главную</a> страницу и повторите вход!";
@include ('./../inc/footer.php');
exit;
}
else if ($param2 == "")
{
print "Ошибка! Вернитесь на <a href=$site>главную</a> страницу и повторите вход!";
@include ('./../inc/footer.php');
exit;
}


$query = "SELECT * FROM baza WHERE param1='$param1'";
$result = mysql_query ($query);

$i = mysql_num_rows($result);
$k = 0;

if ($i == $k)
{
print "Ошибка! Такой записи нет!";
@include ('./../inc/footer.php');
exit;
}
else

$x = 0;

$param22 = mysql_result($result, $x, 'param2');

if ($param22 != $param2)
{
print "Ошибка! Вернитесь на главную страницу и повторите попытку входа!";
@include ('./../inc/footer.php');
exit;
}
else

далее работает скрипт
-----------------------------------------------------------------------

Я проверял, если пользователь вводит неправильно логин при регистрации (с точкой, кавычкой или еще как), то он передается потом неправильно (символы экранируются знаком "\"), поэтому дается ошибка.

Но вот эти 2-3 случая, логин состоит из букв только, пароль тоже. Передается у меня все правильно, все работает.

У них, как пишут, нет. Почему, тоже неясно...

-~{}~ 24.03.04 22:59:

Автор оригинала: Кром
При том, что товарищ не делает редиректа после авторизации. Отсюда все его проблемы. :)
Что значит "делать редирект"? Форма для входа на странице, скажем, /index.php

После ввода логина и пароля юзер попадает на

/papka/vhod.php

Какой редирект и куда?
:eek:
 

Nime

Guest
Originally posted by Кром
При том, что товарищ не делает редиректа после авторизации. Отсюда все его проблемы. :)
Вопрос всё еще в силе... Причём тут это?
 

Кром

Новичок
>Что значит "делать редирект"? Форма для входа на странице, скажем, /index.php

Все написано в ссылке, которую я дал. Если у тебя все в порядке с регистрацией, то после перенаправления через
header('Location: ...') у них должно все работать.
Сделай так как там написано и попроси этих твоих пользователей еще раз пройти авторизацию.
 

DanGien

Новичок
Автор оригинала: Кром
>Что значит "делать редирект"? Форма для входа на странице, скажем, /index.php

Все написано в ссылке, которую я дал. Если у тебя все в порядке с регистрацией, то после перенаправления через
header('Location: ...') у них должно все работать.
Сделай так как там написано и попроси этих твоих пользователей еще раз пройти авторизацию.
эээ... и все равно не ясно.

У меня, по-моему, немного другое.

Форма выдается - файл reg.php

Обрабатывает форму и выдает "спасибо" файл registr.php

Далее юзер переходит на страницу index.php, где есть форма. Там он вводит логин и пароль, переходит на файл /papka/vhod.php

Причем тут refresh? Ну нажал, ну и что?

Форма все равно на др. странице. А перейдя на нее, он может нажимать "обновить" сколько влезет, данные то не передаются, т.к. их нет:)

После ввода логина и пароля юзер попадает на совсем др. страницу, тоже без проблем. А уже оттуда, нажимая кнопочку, получает сообщение "повторите вход с главной страницы".

Так причем тут ваша ссылка на location?
 

Кром

Новичок
DanGien
Во первых причина в том, что эти пользователи жмут не туда, куда по твоей логике нужно жать пользователям. И location наиболее точно поможет определить так ли это.
Вторая причина, location после отправки post данных нужно делать в любом случае, нравиться тебе это или нет.

Что касается твоего кода. Он ужасен. Набери в поиске слово авторизация, и посмотри как нужно делать авторизацию на самом деле. Заодно читай здесь:
http://phpclub.ru/talk/showthread.php?old=1&threadid=32810
и здесь:
http://detail.phpclub.net/tree.phtml (Авторизация и пароли)
 

Nime

Guest
Кром, извини, но одно дело, что location правильнее использовать, а совсем другое то, что без него это работать не будет :)
 

Кром

Новичок
Nime
Я не сказал что работать не будет. Если у трехсот человек работает, значит - код работает. Я сказал что location помогает решить проблемы с нестандартными пользователями.
 

Nime

Guest
Я просто пытаюсь понять, что там может быть такого нестандартного, что будет работать в случае с location и не представляю ничего разумного.
 

DanGien

Новичок
Хех, по-моему проблема разрешилась:)
Вот сегодня был такой же случай. Логин и пароль состоят только из букв. Все дело в том, что пользователь при регистрации указал логин в виде Login, т.е. с большой буквы:)

А вводил с маленькой буквы. В результате при авторизации система пускает пользователя (кстати, непонятно, почему? Данные хранятся в мускуле), а вот при дальнейших переходах благодаря столь "ужасному"(с)Кром моему коду посылает куда подальше:)

Кстати, я понимаю, что код не ахти, но
1. он реально работает
2. он обеспечивает безопасность
3. он легко читается (по крайней мере для начинающего)

Спасибо всем за ответы!
 

Nime

Guest
Надо было весь код проверки ставить значит :)

Собственно, как и ожидалось, location к этой проблеме не имел никакого отношения...
 

Dmitry22

Guest
стати, непонятно, почему?
Делай так:
PHP:
$query='select login from user_id where login=binary("'.$login.'");';
location к этой проблеме не имел никакого отношения...
Но если был бы location, то система сразу бы просила повторить вход безо всяких заморочек.

-~{}~ 26.03.04 01:17:

Вернее так
$query = "SELECT * FROM baza WHERE param1=binary('$param1')";
:)
 

Кром

Новичок
Nime
Если бы товарищ делал location, этого треда просто небыло.
Пользователь просто не смог бы никуда зайти. Dmitry22 это понял. Со временем поймешь и ты.


DanGien
Это не "реально работающий код". Это - гнилушка, которая работает, потому что ее пока никто не трогает.
>1. он реально работает
Как реально работает мы уже увидели. Стоит обновить PHP, с настройками по умолчанию и твой код не будет работать вообще. (Кстати, заходи на форум, здесь тебе даже новички объяснят, почему).
>2. он обеспечивает безопасность
И тем неменее пускал на авторизованную страницу? Бабушке своей расскажи про безопасность.
>3. он легко читается (по крайней мере для начинающего)
"по крайней мере для меня)". Наверное это ты хотел сказать.
 

Nime

Guest
Кром, а если бы он писал на Перле или использовал другие средства авторизации этого треда бы тоже не было. Что за аргументы? :)

Dmitry22, если бы да кабы.... Факт в том, что не location был причиной проблемы. Можно предложить кучу разных методов переделки авторизации и сказать, что с ними сразу стала бы ясна где проблема. Но это не меняет того факта, что location тут не причём.
 
Сверху