[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вход в зависимости от выбранного сервера
MrRobby
Здравствуйте! Возник такой вопрос: как сделать, чтобы лоигн и пароль введенные в форму в зависимости от выбранного сервера из выпадающего списка отправлялись на нужный?
Вот есть такая форма:
<form action="" method="post">
<li>
логин:<input name="username" type="text" class="input" size="15" style="margin-left:20px;"/></li>
<li>
пароль:<input name="password" type="password" class="input" size="15"/></li>
<li>
сервер:<select style="margin-left:12px;" class="input" name="servers"><option></option>
<option
value="server1">сервер 1</option>
<option
value="server2">сервер 2</option></select></li>
<li><input
type="submit" value="Войти" class="button" style="margin-left:147px"></li></form>




Спустя 1 минута, 31 секунда (6.01.2011 - 01:21) inpost написал(а):
Обработчик коннектится к нужному серверу в зависимости от выбранного сервера.

Спустя 2 минуты, 26 секунд (6.01.2011 - 01:23) MrRobby написал(а):
Я это понял, но как это реализовать?

Спустя 7 минут, 45 секунд (6.01.2011 - 01:31) Игорь_Vasinsky написал(а):
Цитата
<option value="server1">сервер 1</option><option value="server2">сервер 2</option>


проаеряй какой выбран и используй тот или иной обработчик (на том или иномсервере)

Спустя 2 минуты, 5 секунд (6.01.2011 - 01:33) Invis1ble написал(а):
MrRobby
например с помощью конструкции switch-case

Спустя 2 минуты, 26 секунд (6.01.2011 - 01:35) MrRobby написал(а):
а можно пожалуйста код? Я php совсем недавно начал учить. Помогите прошу, очень надо

Спустя 4 минуты, 19 секунд (6.01.2011 - 01:40) alex12060 написал(а):

<form action="" method="post">
<li>
логин:<input name="username" type="text" class="input" size="15" style="margin-left:20px;"/></li>
<li>
пароль:<input name="password" type="password" class="input" size="15"/></li>
<li>
сервер:<select style="margin-left:12px;" class="input" name="servers"><option></option>
<option
value="1">сервер 1</option>
<option
value="2">сервер 2</option></select></li>
<li><input
type="submit" value="Войти" class="button" style="margin-left:147px"></li></form>

<?php
$server = htmlspecialchars(trim($_POST['servers'])); // Запишем в переменную значение
if(!$server) { die('Please Select a server!'); } // Если не выбрал

switch($server) { // Просматриваем варианты логина

case 1:
// Логин на сервер 1
break;

case 2:
// Логин на сервер 2
break;

default:
// Действия, если Хацкер)
break;
}
?>

Спустя 7 минут, 57 секунд (6.01.2011 - 01:48) Invis1ble написал(а):
alex12060
Цитата
$server = htmlspecialchars(trim($_POST['servers']));// Запишем в переменную значение
if(!$server) { die('Please Select a server!'); }// Если не выбрал

зачем этот изврат?
MrRobby
Цитата
а можно пожалуйста код?

можно только пример:
if (isset($_POST['servers']))
{
switch($_POST['servers'])
{
case 1 :
// коннект к серверу 1
break;

case 2 :
// коннект к серверу 2
break;

// .......

default :
// действия, если не подходит ни один вариант
break;
}
}

Спустя 6 минут, 29 секунд (6.01.2011 - 01:54) alex12060 написал(а):
Invis1ble

Ну да, пардон)
Просто сейчас у меня 2-ой час ночи user posted image

Спустя 1 минута, 24 секунды (6.01.2011 - 01:56) Invis1ble написал(а):
alex12060
у меня тоже, но это не повод htmlspecialchars и trim везде совать =)

Спустя 10 минут, 53 секунды (6.01.2011 - 02:06) alex12060 написал(а):
Ну а вдруг?)
Безопасность превыше всего (ц)

Спустя 26 минут, 12 секунд (6.01.2011 - 02:33) MrRobby написал(а):
что-то не получается(( Сделал вот так:

вот это впихнул в файл connect.php
<?php

if (isset($_POST['servers']))
{
switch($_POST['servers'])
{
case 1 :
'http://74.86.115.4:2222/CMD_LOGIN';
break;

case 2 :
'./billing/billing.php';
break;

// .......

default :
// действия, если не подходит ни один вариант
break;
}
}


?>


после этого файл connect.php вставил в action в форме:
<form action="/connect.php" method="post">
<li>
логин:<input name="username" type="text" class="input" size="15" style="margin-left:20px;"/></li>
<li>
пароль:<input name="password" type="password" class="input" size="15"/></li>
<li>
сервер:<select style="margin-left:12px;" class="input" name="servers"><option></option>
<option
value="1">сервер 1</option>
<option
value="2">сервер 2</option></select></li>
<li><input
type="submit" value="Войти" class="button" style="margin-left:147px"></li></form>


нажимаю кнопку "войти", меня просто перекидывает на пустую страницу connect.php

Спустя 7 минут, 25 секунд (6.01.2011 - 02:40) Invis1ble написал(а):
MrRobby
Цитата
что-то не получается((

и не должно было biggrin.gif Я ведь тебе не даром написал
Цитата
можно только пример

- я показал всего лишь синтаксис кострукции switch-case, а ты практически бездумно скопипастил.
Не думаю, что за тебя здесь бесплатно все напишет кто-нибудь.... Учись, думай smile.gif По конкретным вопросам если что здесь всегда помогут

Спустя 2 минуты, 22 секунды (6.01.2011 - 02:42) MrRobby написал(а):
мне просто на завтра это срочно надо.
ясно спасибо

Спустя 6 минут, 17 секунд (6.01.2011 - 02:49) Invis1ble написал(а):
MrRobby
Подсказка: в блоках case тебе нужно выбирать соответствующий url, а далее - устанавливать соединение и передавать параметры серверу. Читай про CURL.

Спустя 6 минут, 10 секунд (6.01.2011 - 02:55) MrRobby написал(а):
хорошо спасибо

Спустя 19 минут, 48 секунд (6.01.2011 - 03:15) MrRobby написал(а):
подскажите еще пожалуйста, у меня <option value="server1"> и server2 т.е. я указываю

 case 'server1' :
здесь url для перехода;

break;

case 'server2' :
здесь url для перехода;
break;


или же server1 и server2 писать без кавычек?

И вообщем все, да? т.е. мне переменную $POST никуда засовывать не надо и делать с ней тоже ничего, так? Я в case должен как- собирать пароль и логин в массив и потом как-то это отсылать?)

Спустя 9 минут, 49 секунд (6.01.2011 - 03:24) Invis1ble написал(а):
omg....
Цитата
или же server1 и server2 писать без кавычек?

с кавычками ) только в переменную.
Цитата
И вообщем все, да? т.е. мне переменную $POST никуда засовывать не надо и делать с ней тоже ничего, так? Я в case должен как- собирать пароль и логин в массив и потом как-то это отсылать?)

переменной $POST у тебя там нет вроде, насколько я заметил ) Есть массив $_POST, данные из него (логин и пароль) отправлять нужно в заголовках серверу, с которым соединяешься. Ты вообще читал, то что я тебе написал? Я же тебе сказал - читай про curl.. Если не получается, но срочно надо - пиши в личку, за небольшую плату могу помочь =)

Спустя 45 минут, 10 секунд (6.01.2011 - 04:10) MrRobby написал(а):
почитал, сделал вот так:

<?php

if (isset($_POST['servers']))
{
switch($_POST['servers'])
{
case 'server1' :
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://74.86.115.4:2222/');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=username&var2=password");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
break;

case 'server2' :

break;
default :

break;
}
}


?>

теперь когда я нажимаю кнопку "войти" оно начинает что-то грузить, при этом страница не пропадает, только значок загрузки вертится. На что мне надо обратить внимание?)

Спустя 20 минут, 19 секунд (6.01.2011 - 04:30) Invis1ble написал(а):
MrRobby
Цитата
На что мне надо обратить внимание

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

Спустя 1 минута, 57 секунд (6.01.2011 - 04:32) Invis1ble написал(а):
MrRobby
Еще почитай о флаге CURLOPT_USERAGENT, возможно нужно отсылать эти данные..

Спустя 3 минуты, 16 секунд (6.01.2011 - 04:35) Invis1ble написал(а):
MrRobby
щас глянул я этот урл... Посмотри исходный код страницы, имена переменных: логин - username, пароль - password, а еще обработчик - /CMD_LOGIN

Все я спать ложусь, с тебя + в карму по-любому =)

Спустя 10 часов, 9 минут, 33 секунды (6.01.2011 - 14:45) MrRobby написал(а):
спасибо большое! с меня плюсик)

Спустя 25 минут, 17 секунд (6.01.2011 - 15:10) MrRobby написал(а):
все работает, только по верному логину и паролю все равно не заходит( вот код:

<?php

if (isset($_POST['servers']))
{
switch($_POST['servers'])
{
case server1 :
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://74.86.115.4:2222/CMD_LOGIN');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=username&password=password");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
break;

case 'server2' :

break;
default :

break;
}
}


?>

Спустя 2 часа, 27 минут, 9 секунд (6.01.2011 - 17:37) Invis1ble написал(а):
MrRobby
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=' . $_POST['username'] . '&password=' .$_POST['password']);

Спустя 4 часа, 58 минут (6.01.2011 - 22:35) MrRobby написал(а):
Возникла проблема, дело в том что сервер выдает ошибку:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in...

прочтиал, что нужно выключить safe_mode но на хостинге сказали что они делать этого не будут. Покопался в интернете, и нашел такую вот функцию:

	  function curl_redir_exec($ch)  
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops >= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302)
{
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
//debug('Redirecting to', $new_url);
return curl_redir_exec($ch);
} else {
$curl_loops=0;
return $data;
}
}


Вот только куда именно ее вставить, не знаю, пробовал методом тыка, но ничего не получилось, естественно. помогите пожалуйста!

Спустя 5 минут, 50 секунд (6.01.2011 - 22:41) Игорь_Vasinsky написал(а):
безопасный режим выключается на самом сервере.

Спустя 1 минута, 59 секунд (6.01.2011 - 22:43) MrRobby написал(а):
да, это я знаю, но я написал в службу поддержки, они сказали что не будут его выключать

Спустя 1 минута, 59 секунд (6.01.2011 - 22:45) Invis1ble написал(а):
MrRobby
лень разбираться в функции, если чесно... Попробуй просто снести вот эту строчку:
Цитата
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

возможно, она и не нужна там )

Спустя 4 минуты, 8 секунд (6.01.2011 - 22:49) MrRobby написал(а):
Invis1ble
хах) помогло)))

Спустя 2 минуты, 47 секунд (6.01.2011 - 22:52) MrRobby написал(а):
хм, но теперь когда я ввожу правильный логин и пароль, то открывает пустую страницу connect.php (собственно где и храниться скрипт), а когда не правильный логин и пароль, то все как надо, выдает форму входа и пишет что неправильный логин

Спустя 20 минут, 52 секунды (6.01.2011 - 23:13) Invis1ble написал(а):
значит идет редирект. Нужно парсить заголовки (по сути функция, которую ты откопал примерно этим и занимается). Если код ответа 301 или 302 (редирект) - брать дополнительную информацию из заголовков (куки, урл на который идет редирект) и переходить по полученному url с куками

Спустя 10 минут, 47 секунд (6.01.2011 - 23:24) MrRobby написал(а):
оО а куда тогда эту функцию впихнуть? И что убрать тогда надо?

Спустя 32 минуты, 21 секунда (6.01.2011 - 23:56) Invis1ble написал(а):
MrRobby
Цитата
оО а куда тогда эту функцию впихнуть? И что убрать тогда надо?

не знаю, у меня нет времени в той функции разбираться, да и думаю врядли она подойдет... Лучше свою функцию напиши, алгоритм я тебе уже подсказал - разбирать заголовки нужно.
Замени echo $result; в соем коде на echo htmlspecialchars($result); - смотри какие заголовки приходят, постарайся понять, какие из них что обозначают. В них служебная инфорация будет. Исходя из этой инфы делай парсинг.

Спустя 1 минута, 44 секунды (6.01.2011 - 23:58) MrRobby написал(а):
ок, спасибо!

Спустя 50 минут, 1 секунда (7.01.2011 - 00:48) MrRobby написал(а):
вот немного изменил:

$cookie='';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://74.86.115.4:2222/CMD_LOGIN');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_COOKIE,$cookie);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,
array (
'username'=>$_POST['username'],
'password'=>$_POST['password'],
'submit'=>'get'
));
curl_setopt($curl, CURLOPT_USERAGENT, 'MSIE 5');
curl_setopt ($curl, CURLOPT_REFERER, "http://zarur.ru");
$result = curl_exec($curl);
curl_close($curl);

echo htmlspecialchars($result);


насколько я понял CURLOPT_COOKIE вытаскивает куки из заголовка. Теперь осталось получить урл на который происходит редирект, и перейти по нему вместе с этими вытащенными куки? Намекните, каков мой следующий шаг)

Спустя 10 минут, 17 секунд (7.01.2011 - 00:58) Игорь_Vasinsky написал(а):
я с курлом ваще не работал но вот эт на что то похоже

curl_setopt($curl, CURLOPT_HEADER, 1);

Спустя 4 минуты, 5 секунд (7.01.2011 - 01:02) Игорь_Vasinsky написал(а):
те получить url или отменить редирект?

Спустя 1 минута, 37 секунд (7.01.2011 - 01:04) Invis1ble написал(а):
MrRobby
Цитата
CURLOPT_COOKIE вытаскивает куки из заголовка

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

Спустя 1 минута, 33 секунды (7.01.2011 - 01:05) MrRobby написал(а):
хм...тогда я окончательно запутался((((

Спустя 3 минуты, 31 секунда (7.01.2011 - 01:09) Игорь_Vasinsky написал(а):
нужно почиать за curl.... молча........

Спустя 11 минут, 20 секунд (7.01.2011 - 01:20) MrRobby написал(а):
я читал, но все равно не могу понять как это сделать

Спустя 5 минут, 53 секунды (7.01.2011 - 01:26) MrRobby написал(а):
CURLOPT_COOKIE: Передаёт строку с содержимым куки/cookie, установленным в HTTP header"е
Это разве не то, что я имел ввиду? Я не так понял?

Спустя 5 минут, 21 секунда (7.01.2011 - 01:31) Invis1ble написал(а):
MrRobby
Цитата
CURLOPT_COOKIE: Передаёт строку с содержимым куки/cookie, установленным в HTTP header"е
Это разве не то, что я имел ввиду? Я не так понял?

Не то.
Тебе нужно понять, как система идентифицирует авторизировавшегося юзера, а далее отослать нужные заголовки. Сделай echo htmlspecialchars($result); как я тебе ранее написал и выложи сюда то, что выведется в браузере.

Спустя 13 минут, 40 секунд (7.01.2011 - 01:45) MrRobby написал(а):
вот: HTTP/1.1 302 Found Server: DirectAdmin Daemon v1.36.2 Registered to Innovation IT Solutions Corp. Set-Cookie: session=a1J9LYIwcsq4PS3dy4frGblIwHXy4OacOrljP1d0uS4Ju6utAXiO9Tg5iC3maeOw; path=/; HttpOnly Location: http://74.86.115.4:2222/ Content-Type: text/html

Спустя 7 минут, 6 секунд (7.01.2011 - 01:52) Invis1ble написал(а):
MrRobby
Вот. Теперь из этой инфы тебе нужно извлечь значение session (a1J9LYIwcsq4PS3dy4frGblIwHXy4OacOrljP1d0uS4Ju6utAXiO9Tg5iC3maeOw) и отослать его с помощью CURLOPT_COOKIE

Спустя 21 минута, 5 секунд (7.01.2011 - 02:13) MrRobby написал(а):
мне нужно перебрать массив $_SESSOIN с помощью foreach да? и потом оттуда вытащить это значение session?

Спустя 16 минут, 59 секунд (7.01.2011 - 02:30) Invis1ble написал(а):
нет. Читай про регулярные выражения. С помощью них получишь нужную инфу (в данном случае значение session) из ответа сервера.

Спустя 11 минут, 20 секунд (7.01.2011 - 02:41) MrRobby написал(а):
Почитал, будет что-то вроде этого?
 $matches = array();  
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));

Спустя 13 минут, 47 секунд (7.01.2011 - 02:55) Invis1ble написал(а):
MrRobby
примерно да, нужно искать совпадения

Спустя 1 день, 14 часов, 11 минут, 47 секунд (8.01.2011 - 17:07) MrRobby написал(а):
помогите плиз с регулярными выражениями, у меня не получается ничего((
я так понял: вторая строчка ищет урл в заголовке location, по которому происходит редирект и сохраняет его в массив $matches, 3 строчка вытаскивает из массива именно урл по которому переходит браузер. Пятая строчка выбирает куки из заголовка записывает в массив $results, 6 строка обьеденяет все элементы массива в строку и присваевается все это переменной $cookies. Подскажите, что дальше делать? и как это грамотно собрать вместе
$matches = array(); 
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
preg_match_all('|Set-Cookie: (.*);|U', $content, $results);
$cookies = implode(';', $results[1]);

Спустя 39 минут, 33 секунды (8.01.2011 - 17:47) Invis1ble написал(а):
MrRobby
чувак, имхо конечно, но ты не с того начал и сразу полез в дебри (я про изучение пыха).
Если действительно хочешь научиться программированию, то начни с более простых вещей - так сказать, азами - работа с массивами, регулярные выражения и т.д. Хороший обучающий курс есть здесь. Также, советую почитать замечательную книгу "PHP 5 в подлиннике (2-е издание)" Котерова... Ну и конечно же велкам на этот форум с конкретными вопросами.
Если же ты просто хочешь написать рабочий код (а ты сейчас именно так и делаешь - копипастишь из разных источников куски кода и пытаешься из них собрать свой), то я сильно сомневаюсь, что у тебя что-то путное получится... По крайней мере я в таких затеях участвовать отказываюсь, извини. Я не хочу писать за тебя код wink.gif

Спустя 3 минуты, 25 секунд (8.01.2011 - 17:50) MrRobby написал(а):
ок. спс.
Быстрый ответ:

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