Forum Webscript.Ru
Программирование => PHP => Тема начата: Suckerlove от 15 Сентября 2003, 01:06:51
-
столкнулся с проблемой!
хотел написать собственный скрипт для распознания прользователей:
if(кнопку отправки нажали)
{
//........
//........
//........
if(пользователь существует)
{
!!!!!!!!!!!!!!!!
Вот тут мне надо открывать другой файл и передать ему значения пользователя(его имя и т.д.), но сделать это надо само собой разумеется без пнопочек, чтобы файл сам отправлял все если аккаунт существует, чтобы пользователю не пришлось еще раз нажимать на кнопку отправки!
!!!!!!!!!!!!!!!!
}
}
?>
-
function check_user()
{
if (пользователь_существует) {
return true;
}
return false;
}
...
-
да, но ведь это чать(джавовская) проверяет только существование пользователя. А для меня самое главное отправить автоматически значения. Возможно я не все правильно понял, так как я не знаю, что значит
-
насколько я понял задачу, ее можно перефразировать так:
при отправке данных проверить - есть пользователь или нет, если пользователь есть - отправить данные, если пользователя нет - ничего не отправлять. Так?
-
Ты понял все правильно, вот вся кострукция, может быть, это поможет тебе понять меня!!!
if ($enter)
{
$db = mysql_connect();
$str = "select login, password, priority from Users";
$str .= " where login = \'$login\'";
$res = mysql_db_query("introduction",$str);
$num = mysql_num_rows($res);
if ($num>0)
{
$pr = mysql_result($res,0,"priority");
$pass = mysql_result($res,0,"password");
if ($pass = $password)
{
if ($pr = 0)
{
echo"";
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Вот тут должна быть вставка, которая будет отсылать значение $login, так как форм отсылает только после нажатия на "субмит"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
else
{
echo"";
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Вот тут тоже должна быть вставка, которая будет отсылать значение $login и $priority, так как форм отсылает только после нажатия на "субмит"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
else
{
echo "Das Kennwort, das Sie eingegeben haben war falsch.";
echo "Wir bitten Sie um einen neuen Versuch";
}
}
else
{
echo"Der von Ihnen eingegebene Account existiert nicht.";
}
}
?>
-
[OFF]Немецкий язык рулит, жалко, что я его не понимаю.[/OFF]
Мать.. Сегодня не мой день, явно. Че-то я подумал, что у тебя javascript. %)
Слушай, то ли я туплю, то ли у тебя скрипт такой. Объясни мне, зачем тебе отправлять форму 2 раза (что в приципе невозможно)? Что тебе мешает все данные в одну форму внести, и разом их всех отправлять.
Посмотрел свой скрипт, нихрена не понял. Попробуй описать задачу еще раз, чтобы я, глупый человек, ее понял.
И вообще - топик надо в PHP.
-
Все, кажись я догнал. У тебя есть скрипт. Он использует некую переменную, допустим $login. Которая передается (в товем случае) из формы методом POST. И тебе надо этот скрипт запустить, но так, чтобы он отработал и не вякнул. А кроме как через форму ты передавать параметры не умеешь, так?
-
[OFF]по ходу чувак порно-сайт лабает... либо службу знакомств[/OFF]
Das Kennwort, das Sie eingegeben haben war falsch.
Wir bitten Sie um einen neuen Versuch
сие означает, что-то типа
Пароль. который вы ввели неверный. Сделайте пожалуйтса новый поиск... (Либо введите свои данные еще раз)
Der von Ihnen eingegebene Account existiert nicht
А это что-то типа
У вас нет эккаунта либо вы не зарегестрированы.
Извини, у меня с английским получше будет, чем с немецким... :)
-
Да, я умею передавать параметры только по средствам формы, так вот, форму мне 2 раза надо отправлять по следующей причине:
сначала заполняется форма и отправляются параметры тому же самому файлу!!!!!!!! то есть название этого файла, что я написал: entrance.php, а если ты успел заметить, форма отправляется на entrance.php, то есть сама себе. Файл загружается еще раз переджавая значение нажатой кнопки, что позволяет загрузиться первой части программы! Если введеного аккаунта нет то опять выводиться окно для заполнения и опять отправляется аккаунт, и так до сих пор, пока заданый аакаунт не оказывается существующим, тогда мне нужно отправить этот аккаунт еще раз только теперь другому файлу, только на этот раз программа отправляет все сама разумеется без нажатия на кнопку, так как это было бы глуподля пользователя два раза подтверждать ввод данных. Так вот, как программе отправить даные без подтверждения, то есть бюез нажатия на всякие кнопки!
-
Yukko
Я понимаю, что приятно показывать свои знания в языках, но я ведь попросил помощи в другом, так что пожалуйста помоги мне лучше действительно!
-
Suckerlove [off]
вообще-то это оффтопик, но я работаю с голландцами, и они мне содержание веб-страниц на английский с голландского переводят, хотя я и сам это сделать могу, мог бы и ты потрудиться нам перевести, там вообще-то немного было... а немецкий знают меньше чем английский.
Почему вообще тебе должны помогать, когда ты даже самую малость сделать нужным не посчитал???[/off]
Что ты хочешь делать я так и не догнал... но вот в этой конструкции:
if ($pass = $password)
{
if ($pr = 0)
{
}
else
{
// Это никогда не выполнится
....
}
}else
{
//это тоже
...
}
Потому что в провереке if()
$var = value всегда будет давать true (http://www.alliance.com.ua/smiles/smiles/102.gif)
так как ты делаешь присваивание переменной значения. Проверка правильно выглядит вот так:
if($var == value)
{
}
else
{
//выполнится, если $var не равнятся value
}
-
Это просто проверка аккаунта с переходом на страницу зарегистрированных пользователей, еслри аккаунт подтвердиться и для "специальных пользователей" переход на специальную страницу! Для меня главное отправить значения другому файлу автоматически!!!!!!!!!!!
А что качается проверки и присвоения значений (=;==), спасибо за то что наставил меня на "истинный путь" :-) Я просто старый паскалист... но это изменю! Еще раз прошу пересмотреть и помочь мне.
-
у меня сильное подозрение, что товарищ не понимает, где у него форма, а где - РНР
и наивно полагает, что РНР у него как раз в форме.
Это впеччатление сложилось после беглого просмотра его вопросов и примеров.
-
RomikChef
Да нет же, все я понимаю, я же и тестировал и до того места где я не могу разобраться все идет хорошо... Если интересно и есть желание помочь, то я могу объяснить популярно, что мне надо.
-
Что бы вам было легче мне помогать я все упрощу и опишу точно!
И так:
название файла: entrance.php
Теперь так как форма отправилась сама себе, файл entrance.php получает значение $enter=true, а значит выполняется условие
if ($enter)
{
$db = mysql_connect();
$str = "select login, password from Users";
$str .= " where login = \'$login\'";
$res = mysql_db_query("introduction",$str);
$num = mysql_num_rows($res);
// если существует такой аккаунт
if ($num>0)
{
$pass = mysql_result($res,0,"password");
if ($pass = $password)
// если пароль правильный
{
// то вот тут мне надо отправить значение $login другому файлу(например room.php)
}
}
}
?>
если хоть одно условие не выполнилось, то опять появляется окно с вводом аккаунта и опять заполняется форма и отправляется сама себе опять все проверки и если хоть одна не выполняется, то опять все по новой и т.д. пока все условия не выполнятся, вот тогда мне надо отослать $login
-
Если не хочешь гнать в заголовке (header()) свой логин то
Либо
Либо используй сессии....
-
1) Самое просто решение передавать данные (и, на самом деле, не самое красивое) -
header("Location: /room.php?login=$login");
Тут главное, чтобы перед header() ничего не выводилось пользователю в броузер.
Но в room.php тебе тоже придется делать проверку. Вообще в любом закрытом файле.
Тут $login предается не методом POST, а методом GET, т.е. обращаться к переменной надо как $_GET[\'login\'].
2) А лучше всего (тут уже говорили) делать так. Если логин не правильный - выводишь по посинения форму авторизации, если правильный - то стартуешь сессию, сохраняешь в ней логин (или чего там тебе надо, чтобы пользователя определить), редиректишь на закрытую зону сайта (редиректишь - header("Location: /close/zone.php")), и там уже в каждом файле проверяешь существование сессии. Если сессия есть - выводишь информацию, если нет - отправляешь на страницу с формой авторизации.
3) Купи книжку по ПХП
4) http://phpfaq.ru
-
спасибо большое за все, ссылка была очень познавательной, один только вопрос
,Croaker, почему ты сказал, что header("Location: /room.php?login=$login"); некрасиво? И что значит в строке: room.php?login=$login вопросительный знак?
-
Ну пока его нет я вставлю свои пять копеек
вопросительный знак означает что здесь адрес заканчивается и после него идут переменные отправленные методом GET...
А некрасиво, потому как в данном случае ты выставляешь свой логин на всеобщее обозрение ...тогда зачем вообще авторизация надо?
-
1) Вопросительный знак разделяет название файла, и параметры, которые передаются потом. Сами параметры разделяются знаком &
т.е. file.php?var1=var1&var2=var2
2) Потому, что любой пользователь-злоумышленник будет знать, что у тебя есть переменная $login в скрипте. А пользователю такое знать не положено. Потом, - если ты будешь передавать данные POST`ом , опять тебе так же с редиректом выеживаться? Могу еще 100 причин придумать. Потрать 7 доллров на книжку, и один день на изучение сессий, и будет тебе счастье. :)
-
MrGreeN
[OFF] :) пока писал..[/OFF]
-
RomikChef
По поводу:
RomikChef:
читай внимательнее предыдущие посты.
(т.к. вопрос изначально был в форуме html - я грешным делом подумал, что у него с javascript проблемы).
RomikChef:
по-моему, здесь очередной раз вместо реальной помощи помогают человеку гланды через задний проход вырезать
помоги сам
-
Ну почему же сразу через задний проход...
Человеку нужен результат и прямо сейчас....он его получит...а потом, когда всё-таки немного изучит основы, сделает и с сессиями и с include (т.к. у него всё по-моему в одном месте лежит)...
Направление то ему дали...
-
сессии я прочитал, большое спасибо за помощь, теперь я зхнаю, как сохранять параметры для следующих запросов браузера!!! Очень позновательно, а главное помогло, да и теперь вопрос:
можно ли мне сохранить параметры в сессии, а потом написать просто header("Location: /room.php"); без всяких вопросительных знаков, а потом в room.php обращаться к переменной из сессии?
-
Suckerlove
можно...т.к. в данном случае (если хочешь редирект автоматический) по другому никак...
RomikChef
ну ну, и обьясни мне в чём Я или КТО неправ ?
в том что если передать заголовок на другой скрипт в течении сессии, то сессионные переменные , т.е. конструкция типа:
//основной скрипт
$_SESSION[\'login\']="login";
header("location: room.php");
//room.php
echo $_SESSION[\'login\'];
не выведет "login" ?
Или предлагаешь ему полностью переписать скрипт дабы работал не через задний проход ?...он это уже понял, но сомневаюсь что это сделает в ближайшее время...сам же обратил внимание на его уровень подготовки...
Помочь реально ему это сделать тоже трудновато, т.к. структура сайта (или чего у него там) ни тебе ни крокеру ни мне неизвестна как и конечная цель тоже...
А результат то ему нужен сейчас а проблемы надо решать по мере их поступления...
-
Зеленый, при чем тут логин?
Ему надо передавать все данные формы.
а не только логин.
-
Не ну это как пример...
нечего ему не мешает также работать и с $priority и др. переменными ...
Хотя в данном случае я бы вывел форму приветствия и в ней хиден полями отправил бы все переменные....
-
RomikChef:
а ни единого сомнения в правильности своего подхода он не высказывал
[OFF]
Знаешь Ромик. Ты идеалист. У тебя все должно быть правильно, прям таки идеально. Скрипты, не выдающие ошибок, когда стоит error_reporting(E_ALL), прямые и лаконичные ф-ции, демократия и мир во всем мире. Но вот только бывает, что человеку нужно решить конкретную проблему, прям вот сейчас, потому, что сдавать работу надо, потому, что начальство недовольно, да в общем и не важно - почему. Так вот, сколько его не пичкай теориями о проблемах мировой революции - главное для него - его конкретная проблема. Он сам потом допрет - почему так делать, как сделал он, не правильно, вредно, и проч. Это со временем придет само. И не надо ему говорить, что он типа ламер, потому что делает все не по понятиям. Он сделает по понятиям позже (если совсем не дурак), а сейчас ему просто нужно, чтобы работало. Если можешь помочь - помоги, если нечего сказать по делу - может лучше промолчать (без обид)?
И вообще подобный флейм уже не первый раз затевается. А смысла в нем - ноль.
[/OFF]
Теперь по делу.
RomikChef:
Крокер, ну вот хоть ты объясни - на кой тут сессии?
авторизация у него
RomikChef:
Крокер, ты меня прости, но ты дурак.
[OFF]
не прощу
[/OFF]
RomikChef:
существование юзера на СЕРВЕРЕ можно сделать на компе у ЮЗЕРА
Еще раз повторю. С начала я думал, что это JS. Судя по квалификаии тов. Suckerlove можно было предположить, что он авторизацию может попробовать на JS сделать. Показать как ТАКОЕ делают? Я понимаю, что это изврат но речь сейчас не об этом. Вопрос-то у человека был совсем другой.
Suckerlove, у тебя еще вопросы остались?
-
Кажется, я был неправ.
прошу прощения.
-
меня сбило с толку это его - "отправить в другой скрипт" без всякого указания на то, что из него надо будет передавать дальше.
-
Suckerlove:
можно ли мне сохранить параметры в сессии, а потом написать просто header("Location: /room.php"); без всяких вопросительных знаков, а потом в room.php обращаться к переменной из сессии?
Можно, если включены куки.
Если куки не работают, то надо добавлять идентификатор сессии к адресу.
Это, кажется, в факе написано.
-
Croaker ,MrGreeN
большое спасибо за помощь мне все ясно.
RomikChef
уважение за то, что можешь признать свои ошибки, нго мы не будем устраивать палемику...
Маленькое НО: насколько я знаю, заголовки нельзя отправлять после отправки каких либо данных, т.е. после уже отосланных хедеров. Может кто-нить подскажет как мне вставить свой хедер так, чтобы он был первым, да и вообще, чтобы он сработал! Кстати, у меня файл отправляет форму самому себе для проверки(если не ясно прошу посмотреть пост со скриптом) после того как форма отправила данные самой себе, заново загруженный скрипт будет считать следующие отправленные хедеры как новые или они уже будут не первые, так как скрипт только что отправил форму?
-
З.Ы. Скрипт мой - простая авторизация пользователя!
Мне нужно, что бы он проверял существует ли аккаунт, потом проверить совпадает-ли пароль и потом проверить приоритет пользователя. Есмли приоритет равен 0 то загрузить одну страницу, если приоритет любой другой, то загрузить другую страницу!
-
после того как форма отправила данные самой себе, заново загруженный скрипт будет считать следующие отправленные хедеры как новые или они уже будут не первые, так как скрипт только что отправил форму?
Ну вот, а говоришь, что все прочел http://phpfaq.ru
Загляни на http://phpfaq.ru/na_tanke и если у тебя еще останутся вопросы такого рода, то я постараюсь тебе на них ответить подробнее.
-
Suckerlove:
нельзя отправлять после отправки каких либо данных, т.е. после уже отосланных хедеров.
Зголовок и есть - хедер (от сл. header). Ты можешь (т.е. на самом деле так происходит всегда) отправить несколько заголовков одновременно.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); - это заголовок
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - это тоже заголовок
их можно отправить друг за другом. Главное, чтобы перед ними небыло никакого вывода, НЕ являющегося залоговком (например echo "Output").
Прочитай маны по протоколу HTTP. Иначе тебе не будет понятно, почему это выражение
Suckerlove:
заново загруженный скрипт будет считать следующие отправленные хедеры как новые или они уже будут не первые, так как скрипт только что отправил форму?
не правильно по определению.
Suckerlove:
то загрузить другую страницу
PHP умеет подключать страницы. Очень полезные ф-ции
require()
include()
Просто посмотри примеры в мане PHP`шном
-
я вообще понять немогу, зачем ему тут заголовки....
срипт построен так, что прямо напрашивается конструкция с include
-
MrGreeN
Инклюд - это частный случай.
Ну не бывайт сайтов из одной страницы.
Это значит, что все равно придется ходить и проверять на каждой.
Вот эту часть надо человеку объяснить. Сессии, проверка приоритета в самам начале скрипта и так далее.
Ну, а если у него надо показывать только одну страницу, то да - инклюд нужной и никаких сессий