В опере не передаются данные методом post

php html Opera

Обычная форма:
<form action="form.php" method="POST">
<input type="text" name="name">
<input type="radio" name="87964" value="1234">
<input type="radio" name="87964" value="4321">
<input type="submit" value="Отправить">
</form>

На стороне сервера:
<?php
if($_POST['87964'] == "1234"){
my_fun();
}
elseif($_POST['87964'] == "4321"){
my_fun();
}
else{
print 'error ("'.$_POST['87964'].'")';
}
?>

Выводит error(""), то есть получается, что $_POST['87964'] пустой, хотя в огнелисе он не пустой. Кто-нибудь с таким сталкивался? из-за чего такое может быть?


Примечание:
> Если Вы выбираете одну из радиокнопок данные передаёт?
Нет.
> print_r($_POST)
В этом случае выдаёт array(), то есть пустой массив, хотя поля заполняю, ввожу текст и жмакаю на радио-кнопку. Получается, что это проблема браузера? Если да, то как это можно исправить?
> прежде чем поднимать панику, надо учить основы языка
Спасибо за доброе слово. Если не передаётся серверу, то что я смогу сделать? В других браузерах всё нормально, а в опере нет. При чём такое уже два или три месяца. Переустанавливал браузер, php интерпретатор и вообще весь сервак переустановил. В скрипте ошибок нет точно, раньше работал в любом браузере без проблем.

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

Примечание:
Повесил на странице проверку сайта на вирусы (выдрал отсюда - http://vms.drweb.com/online), во всех браузерах работает, а в опере нет.

<script language="JavaScript">
function resultURL()
{
var left = (screen.width - 640)/2
var top = (screen.height - 400)/2
window.open( "", "scan", "width=640"+
",height=400,left="+left+
",top="+top+",scrollbars=no,resizable=yes")
document.getElementById( "drwebscanformURL" ).target = "scan";
return true;
}
</script>

<form target="scan" id="drwebscanformURL" action="http://online.us.drweb.com/result/" onsubmit="return resultURL()" method="post">

<table>
<tbody><tr>
<td><input name="url" value="" style="width: 100%;" type="text"></td>
<td align="right"><input src="http://st.drweb.com/static/new-www/2010/send_en.jpg" type="image"></td>
</tr>
</tbody></table>
</form>

А это подтверждает, что проблема не с сервером и не в исходнике.

Примечание:
Проблема решена переходом на ajax. Пришлось изменять исходники (то, что они выводят, убирать лишнее), но главное, что пользоваться теперь сайтом можно из любого браузера с включенным javascript-ом.

<script language="javascript" type="text/javascript">

function send(){
var radio = $('*[name=radio]').attr("value");
var text = $('*[name=text]').attr("value");
$.ajax({
type: "GET",
url: 'http://ссылка_на_обработчик.pl?text='+text+'&radio='+radio,
success:
function(html){
$("#result").append(html)
}
});
}
</script>

Форма передаётся методом GET, но ссылка остаётся в том же виде, так как страница не обновляется. Надеюсь, что скрипт будет кому-нибудь полезен.
PS: Используя ajax только замаскировал проблему, но как решить не знаю.

Примечание:
> не работает в опере только у вас, или у всех?
По разному. У кого-то работает, у кото-то нет. А вообще он какой-то не понятный зверь, то работает, то не работает. В ajax значения всех полей легко перехватить и никаких потерь, а за пределы клиента отправить не может.

Заметил только что, ошибку, не правильно получал значение радиокнопки.
> var radio = $('*[name=radio]').attr("value");
Нужно заменить на:
var radio = $('input[name=radio]:checked').val();

Примечание:
> стоп, а разве переменные могут быть int ?
Это ты о чём? Если $_POST['87964'], то может. По крайней мере без цифр работает так же.
int это сокращённо от integer (число), а в данном случае это строка и сравнивается как строка.
print_r даёт пустой массив, то есть вообще ничего не передано, даже переключатели.

Для меня вопрос решён использованием ajax, но если кому-то известно решение лучше прошу поделиться.

Примечание:
Перенёс всё добро на archlinux и работает как часы. Никаких глюков, сервер работает вообще отлично. Не мног долго поднять иксы, но они мне уже не нужны, пока пытался их поднять привык к консоли и тем более на сервере иксы это лишнее, и всё равно рано или поздно надо было бы от них отказаться. Всем спасибо за ответы и если у кого-то будут подобные проблемы, и они будут на ubuntu, то нужно просто сменить дистрибутив (мне арч понравился, хотя он немного тяжеловат по началу).

Примечание:
print_r($_POST) показывал пустой массив независимо от ввседённых данных в форме. Опера данные передавала, проверено. Значит проблема была где-то в системе или сервере (последнее маловероядно).

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

PS: Наткнулся случайно - не удержался, решил дополнить вопрос.
Ответы:
А почему Вы решили, что Opera не передаёт данные?
Если Вы выбираете одну из радиокнопок данные передаёт?
А если нет, то и будет Вам error("")... Всё правильно работает
сделайте на сервере print_r($_POST) и увидите, что элемента массива с ключом 87964 вообще не будет в дампе массива, если не будет выбрана ни одна радиокнопка...
ещё сделайте так $_POST['87964'] = isset($_POST['87964']) ? $_POST['87964'] : "Элемент массива пустой"; и пропишите это в начале скрипта
а ещё, не менее важная строка нужна на момент отладки скрипта, это error_reporting(E_ALL);
будет это выглядеть так
<?php
error_reporting(E_ALL);
// попробуйте убрать эту строку при error_reporting и получите предупреждение ))))
$_POST['87964'] = isset($_POST['87964']) ? $_POST['87964'] : "Элемент массива пустой";
не работает в опере только у вас, или у всех?
стоп, а разве переменные могут быть int ?


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.