Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запросы POST и GET из форм в IE не работают


Автор: terya 16.8.2010, 17:00
Запросы POST и GET из форм  в IE не работают. В скрипте в который приходит запрос из формы нет массивов $_GET и $_POST (только в IE)
Может это быть из-за того, что у меня на акаунте (у хостинга) это второй сайт, и он находится в папке первого сайта /public_html/site.com? Может быть это из-за сервера хостера?

Причем если методом GET передавать, то в адресной строке есть переменные, а когда проверяешь их существование, их нет.

Автор: skyboy 16.8.2010, 17:48
так не бывает  smile
пример верстки формы и РНР скрипт-обработчик формы в студию

Автор: terya 16.8.2010, 18:13
Цитата

так не бывает
пример верстки формы и РНР скрипт-обработчик формы в студию


вот форма
Код

 <form action="http://site.com/auth.php" method="post">
    <div class="en_form">
     <p>Логин:</p>
     <input name="login" type="text" size="20" maxlength="20">
     <p>Пароль:</p>
     <input name="pass" type="password" size="20" maxlength="12">
     <input name="return" type="hidden" value="<? echo $_SERVER['HTTP_REFERER'];?>">
     <input class="but" name="" type="submit" value="Войти">
    </div>
 </form>


а вот обработчик
Код

<? 
if (isset($_POST['login'])) $login=$_POST['login']; else echo "login нет";
if (isset($_POST['pass'])) $pass=$_POST['pass']; else echo "pass нет";
if (isset($_POST['return'])) $return=$_POST['return']; else echo "return нет";
?>

Автор: skyboy 16.8.2010, 18:29
Цитата(terya @  16.8.2010,  17:13 Найти цитируемый пост)
form action="http://site.com/auth.php"

ты отправляешь форму на другой домен? не совпадающий с тем, где расположена форма?

Автор: terya 16.8.2010, 18:36
нет, на этом же

Автор: capitan 16.8.2010, 21:08
а обработчик на какой странице?
что покажет код:
Код

echo '<pre>';
var_dump($_SERVER['SCRIPT_FILENAME']);
var_dump($_REQUEST);
var_dump($_POST);
var_dump($_GET);
echo '</pre>';

Автор: lexxmix 17.8.2010, 03:39
Всё там есть просто показывать надо.
Код

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
</head>
<body>
<div class="en_form">
<form method="post">
<p>Логин:</p>
<input name="login" type="text" size="20" maxlength="20">
<p>Пароль:</p>
<input name="pass" type="password" size="20" maxlength="12">
<input name="return" type="hidden" value="<?php if(isset($_SERVER['HTTP_REFERER'])){print $_SERVER['HTTP_REFERER'];}?>">
<input class="but" name="" type="submit" value="Войти">
</form>
</div>
</body>
</html>

<?php
if(isset($_POST['login'])){$login=$_POST['login'];print $login;}else{echo "login нет ";}
if(isset($_POST['pass'])){$pass=$_POST['pass'];print $pass;}else{echo "pass нет ";}
if(isset($_POST['return'])){$return=$_POST['return'];print $return;}else{echo "return нет ";}
print_r($_POST);
?>

Автор: Basili4 17.8.2010, 08:54
capitan
зачем загромождать одними и теми же значениями

echo '<pre>';
var_dump($_SERVER['SCRIPT_FILENAME']);
var_dump($_REQUEST);
echo '</pre>';

Хватит с головой

Автор: capitan 17.8.2010, 11:51
Basili4,  уверены?  в $_REQUEST вообще-то находятся все переменные и GET и POST. Нам надо определить каким способом они передаются и есть ли они вообще.  На дебаг загромождения не влияют, а только увеличивают вероятность определения ошибки. 
P.S.  Оформляйте код в тегах, не читается.

Автор: terya 17.8.2010, 12:10
Цитата

echo '<pre>';
var_dump($_SERVER['SCRIPT_FILENAME']);
var_dump($_REQUEST);
echo '</pre>';

Хватит с головой

этот код еще не пробывал, но самое интересное, что вот сейчас попробовал у своего товарища на компе в ИЕ запустить эту форму, и все работает отлично. Хотя у меня дома и еще на одном компе пробовал в ИЕ не работает, а в других браузерах работает. Что бы это могло быть?
Цитата

<?php
if(isset($_POST['login'])){$login=$_POST['login'];print $login;}else{echo "login нет ";}
if(isset($_POST['pass'])){$pass=$_POST['pass'];print $pass;}else{echo "pass нет ";}
if(isset($_POST['return'])){$return=$_POST['return'];print $return;}else{echo "return нет ";}
print_r($_POST);
?>

вообщем сейчас у меня так:
Код

<?php
if(isset($_POST['login'])){echo "login есть ";}else{echo "login нет ";}
if(isset($_POST['pass'])){echo "pass есть";}else{echo "pass нет ";}
if(isset($_POST['return'])){echo "return есть ";}else{echo "return нет ";}
?>

И в ИЕ выводит что всех трех "нет"

Автор: capitan 17.8.2010, 12:18
terya,  Нужно использовать танцы с бубном или http://habrahabr.ru/blogs/noie/81784/

Автор: lexxmix 17.8.2010, 13:15
добавь вначале чтоб не кешировалось 
Код

       header("http/1.1 200 ok");
       header("Cache-Control: no-store, no-cache, must-revalidate");
       header("Pragma: no-cache");
       header("Expires: -1");



Цитата

И в ИЕ выводит что всех трех "нет"



в первый раз показывает что нет, после отправки покажет отправленные.

Автор: capitan 17.8.2010, 14:15
lexxmix,  откуда взят сей код?
Код

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Expires: " . date("r")); 
?> 

Этого достаточно.

Автор: terya 17.8.2010, 16:34
Цитата

echo '<pre>';
var_dump($_SERVER['SCRIPT_FILENAME']);
var_dump($_REQUEST);
var_dump($_POST);
echo '</pre>';

после этого увидел на экране в ИЕ (6, 7, 8)
Код

string(54) "/home/username/public_html/site.com/index.php"
array(1) {
  ["params"]=>
  string(4) "auth"
array(0) {
}

А вот это увидел в Мозиле, Опере и Хроме
Код

string(54) "/home/username/public_html/site.com/index.php"
array(4) {
  ["params"]=>
  string(4) "auth"
  ["login"]=>
  string(2) "11"
  ["pass"]=>
  string(2) "11"
  ["return"]=>
  string(25) "http://site.com/"
}
array(3) {
  ["login"]=>
  string(2) "11"
  ["pass"]=>
  string(2) "11"
  ["return"]=>
  string(25) "http://site.com/"
}



Цитата

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Expires: " . date("r")); 
?> 

к сожалению и это тоже не помогло.

Цитата

header("http/1.1 200 ok");
       header("Cache-Control: no-store, no-cache, must-revalidate");
       header("Pragma: no-cache");
       header("Expires: -1");

и это не помогло. Что это может быть? smile

Добавлено через 9 минут и 9 секунд
Еще раз хотел сказать, что при переходе на страницу с формой в поле
Код

 <input name="return" type="hidden" value="<? echo $_SERVER['HTTP_REFERER'];?>">


когда просматриваю html-код страницы, там вот такое дело
Код

 <input name="return" type="hidden" value="">

после того как обновишь страницу в параметре value появляется нужное значение
может это покажет на причину

Автор: capitan 17.8.2010, 17:05
terya, не стоит присваивать переменным зарезервированные имена. return - зарезервированное имя. Назовите по другому.
Судя по форме. Запрос должен идти на:
Код

<form action="http://site.com/auth.php" method="post">


А данные ловим на 
Код

string(54) "/home/username/public_html/site.com/index.php"


Это как?

Давайте подробнее. На какой странице стоит форма, на какой обработчик?

Автор: terya 17.8.2010, 18:27
Цитата

Давайте подробнее. На какой странице стоит форма, на какой обработчик?

в файл .htaccess
есть такие строчки
Код

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?params=$1 [L]

в файле index.php
Код

<?php
$GET = array();
$params = explode('/', trim($_GET['params'], '/'));    
for($x=0; $x<=count($params); $x++)$GET[] = $params[$x];
    if ($GET[0] == 'auth'){include 'page/auth.php';}

              else include 'page/main.php';
?>

Это для того чтобы url красивые были

Я не думаю что в этом проблема, мне кажется это в настройках браузера ИЕ на моем компе. Потому что пробовал этот скрипт на двух других компах. На одном все работает, на другом нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)