Обычная форма:
<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: Наткнулся случайно - не удержался, решил дополнить вопрос.