[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли обнулить переменную в GET
arhitec
Всем привет.
Лучшая учеба - это практика. Вот я решил написать самостоятельно скрипт голосования.
Пользователь выбирает вариант ответа путем радиокнопок затем передается переменная через метот GET.
НО! Весь скрипт выполняется на одной странице, из-за чего необходимо после использования переменной посланной через GET обнулить ее, но не саму переменную, а то значение что остается в $_GET[переменная]
Можно ли это сделать и как? Если нет, то есть ли другие решения?
За ранее спасибо!



Спустя 10 минут, 17 секунд (28.01.2010 - 11:21) Dezigo написал(а):
$_GET это массив. хочешь обнулить его. пожалуйста.
$_GET['a'] = 0; (null)

Спустя 29 секунд (28.01.2010 - 11:22) stepan написал(а):
Вообще за обнуление переменных отвечает unset (); но в твоем случае можно сделать редирект на туже самую страницу без GET переменной.

Спустя 5 секунд (28.01.2010 - 11:22) Ice написал(а):

header("Location:" . $_SERVER['PHP_SELF']);

Спустя 5 минут, 7 секунд (28.01.2010 - 11:27) arhitec написал(а):
попробовал не обнулять а просто редирект сделать
Выдает сообщение:
Warning: Cannot modify header information - headers already sent by (output started at /home/arhitecc/public_html/index1.php:9) in /home/arhitecc/public_html/vote/index.php

Спустя 1 минута, 20 секунд (28.01.2010 - 11:28) Ice написал(а):
Всё правильно. Разработай логику приложения таким образом, чтобы все заголовки отправлялись до любого вывода. наче будешь напарываться на вот такое.

Спустя 1 минута, 52 секунды (28.01.2010 - 11:30) arhitec написал(а):
Увы я ничего пока не понимаю в заголовках. Судя по всему мне нужно прочесть про них сначало.
В любом случае спасибо!

Спустя 1 минута, 26 секунд (28.01.2010 - 11:31) Ice написал(а):
Тебе нужно запомнить мой последний пост. Раз и навсегда=)

Спустя 53 минуты, 27 секунд (28.01.2010 - 12:25) arhitec написал(а):
Я прошу прощения!
Начитался я информации и о заголовках и о том как передается информация в заголовках, но сути решения своего вопроса так и не понял.
Нельзя ли подсказать мне решение праблемы? Голова уже пухнет от инфы а толку ноль sad.gif

Спустя 3 минуты, 13 секунд (28.01.2010 - 12:28) arhitec написал(а):
Правильно ли я понимаю, что я пытаюсь провести редирект страницы в момент исполнения кода PHP и поэтому мне выдается ошибка?

И как можно произвести редирект перед тем как выводится форма?
Вобщем я запутался по полной!

Спустя 9 минут, 3 секунды (28.01.2010 - 12:37) baston написал(а):
А может быть у вас есть пробелы или лишние строки перед тегом <?...
Или скрипт сохранен не в той кодировке, например не в UTF-8...
проверьте.

Спустя 9 минут, 56 секунд (28.01.2010 - 12:47) Ice написал(а):
Цитата (arhitec @ 28.01.2010 - 09:28)
Правильно ли я понимаю, что я пытаюсь провести редирект страницы в момент исполнения кода PHP и поэтому мне выдается ошибка?

И как можно произвести редирект перед тем как выводится форма?
Вобщем я запутался по полной!

код можно глянуть?smile.gif

Спустя 43 минуты, 44 секунды (28.01.2010 - 13:31) arhitec написал(а):
если в моем бардаке сможете разобраться smile.gif)))
Я новичок, так что не слишком на меня ругайтесь smile.gif
ссылка на происходящее: www.malyshenko.ru/index1.php
КОД:
<?
// ---------- ФУНКЦИЯ ВЫВОДА ГОЛОСОВАНИЯ ----------
function vote ($num_vote, $patch_vote){
// ------------------------------------------------

// ---------- Функция опроса на экран ----------
function vote_quest ($num_quest){
// ----------------------------------------------------

// читаем в массив информацию из файла
$mas_1 = file("vote/question/$num_quest/vote.txt");
$len=count($mas_1);
$n=0;
echo "
<table width='200' height='15' border='0' cellspacing='0' cellpadding='0'><tr><td align='left' valign='top' class='text-005'>$mas_1[0]</td>
</tr></table>
<table width='100' border='0' align='center' cellpadding='0' cellspacing='0'><tr><td height='10'></td></tr></table>
<table width='200' height='15' border='0' cellspacing='0' cellpadding='0'><tr><td align='left' valign='top'>
<form name='voting' method='POST' action='$patch_vote'>";
while(++$n < $len){
echo"<input type='radio' name='variant' id='01' value='$n'>&nbsp;<span class='text-002'>$mas_1[$n]</span><br>";
} // Конец цыкла
echo "
<table width='100' border='0' align='center' cellpadding='0' cellspacing='0'><tr><td height='10'></td></tr></table>
<div align='center'><input type='submit' value='голосовать'></div>
</form>
</td></tr></table>
";
} // Конец функции vote_quest ()

// ---------- Функция записи новых данных в файл ----------
function vote_rec ($num_quest){
// ----------------------------------------------------
$variant=$_POST[variant];
$ip=$_SERVER['REMOTE_ADDR'];
// Записываем новые данные в файл
$mas_1 = fopen("vote/question/$num_quest/data.txt", a);
flock($mas_1, LOCK_EX);
$mas_2[0] = $ip;
$mas_2[1] = $variant;
$mas_3 = implode ("#", $mas_2);
$mas_4 = "$mas_3\n";
fwrite ($mas_1, $mas_4);
flock($mas_1, LOCK_UN);
fclose($mas_1);
} // Конец функции vote_rec ()

// ---------- Функция вывода информации опроса на экран ----------
function vote_view ($num_quest){
// ----------------------------------------------------
$variant=$_POST[variant];
$ip=$_SERVER['REMOTE_ADDR'];
$all=0;
// Определяем переменные для вывода информации
$mas_3=array();
$mas_1 = file("vote/question/$num_quest/data.txt");
foreach ($mas_1 as $index){
$mas_2 = explode("#", $index);
if ($mas_2[1]==0){echo "Ошибка вывода данных";}
if ($mas_2[1]==1){++$mas_3[1];}
if ($mas_2[1]==2){++$mas_3[2];}
if ($mas_2[1]==3){++$mas_3[3];}
if ($mas_2[1]==4){++$mas_3[4];}
if ($mas_2[1]==5){++$mas_3[5];}
if ($mas_2[1]==6){++$mas_3[6];}
if ($mas_2[1]==7){++$mas_3[7];}
if ($mas_2[1]==8){++$mas_3[8];}
if ($mas_2[1]==9){++$mas_3[9];}
if ($mas_2[1]==10){++$mas_3[10];}
if ($mas_2[1]==11){++$mas_3[11];}
if ($mas_2[1]==12){++$mas_3[12];}
if ($mas_2[1]==13){++$mas_3[13];}
if ($mas_2[1]==14){++$mas_3[14];}
if ($mas_2[1]==15){++$mas_3[15];}
if ($mas_2[1]==16){++$mas_3[16];}
if ($mas_2[1]==17){++$mas_3[17];}
if ($mas_2[1]==18){++$mas_3[18];}
if ($mas_2[1]==19){++$mas_3[19];}
if ($mas_2[1]==20){++$mas_3[20];}
$all=$all+1;
} // Конец цыкла
$mas_5 = file("vote/question/$num_quest/vote.txt");
$s=count ($mas_5)-1;
$a=1;
$mas_4 = file("vote/question/$num_quest/vote.txt");
echo "<table width=200 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class='text-005'>$mas_4[0]</td></tr></table>";
echo "<table width=100 height=10 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top></td></tr></table>";
do {
if ($mas_3[$a]<=0){$mas_3[$a]=0; $r=1;}
else {$r=$mas_3[$a];}
if ($all<=0){$w=2;}
else {$w=round ((100/($all/$r))*2);}
echo "<table width=200 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class='text-002'>$mas_4[$a]</td></tr></table>";
echo "<table width=200 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class='text-004'>голосов: $mas_3[$a]</td></tr></table>";
if ($mas_3[$a]>0){
echo "<table width=200 height=10 border=0 cellspacing=0 cellpadding=0><tr><td background='../images/img-010.gif' width=$w><img src='../images/img-010.gif' align=left></td><td bgcolor='#CCCCCC'></td></tr></table>";}
else{
echo "<table width=200 height=10 border=0 cellspacing=0 cellpadding=0><tr><td background='../images/img-011.gif' width=100><img src='../images/img-011.gif' align=left></td><td bgcolor='#CCCCCC'></td></tr></table>";}
echo "<table width=100 height=10 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top></td></tr></table>";
}
while (++$a<=$s);
// Конец цыкла
if ($all>1){
echo "<table width=200 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class='text-006'>Всего проголосов: $all</td></tr></table>";}
if ($all<=0){
echo "<table width=200 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class='text-006'>Еще никто не голосовал</td></tr></table>";}
if ($all==1){
echo "<table width=200 border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class='text-006'>Ваш голос принят первым.</td></tr></table>";}



} // Конец функции vote_view ()

// ---------- Функция проверки данных на признак голосования ----------
function vote_chek ($num_quest, $page_quest){
// ----------------------------------------------------
$variant=$_POST[variant];
$ip=$_SERVER['REMOTE_ADDR'];
$mas_1=file("vote/question/$num_quest/data.txt");
$len=count($mas_1);
$open=0;
$ip2=0;
foreach ($mas_1 as $index){
$mas_2 = explode("#", $index);
if ($mas_2[0]==$ip){$open=1; $ip2=1; break;}
} // Конец цыкла
if ($len==0) {$open=0;}
if (empty($variant)){$variant=0;}
if ($variant>0) {$open=2;}
echo "variant = $variant";
echo "<br>";
echo "ip = $ip";
echo "<br>";
echo "len = $len";
echo "<br>";
echo "open = $open";
echo "<br>";
echo "ip = $ip2";
echo "<br>";
if ($open==0) {vote_quest($num_quest);}
if ($open==1) {vote_view($num_quest);}
if ($open==2) {vote_rec($num_quest); vote_view($num_quest); vote_zero();}
} // Конец функции vote_chek ()

// ---------- Функция обнуления переменных ----------
function vote_zero (){
// ----------------------------------------------------

} // Конец функции vote_zero ()

// НАЧАЛО ПРОГРАММЫ
vote_chek ($num_vote, $patch_vote);
} // Конец функции VOTE ()
?>

Спустя 10 минут, 25 секунд (28.01.2010 - 13:41) Ice написал(а):
ну вон работает же по ссылке всё.

Но смысл сохраняется: сначала идёт вся обработка, в том числе и редирект, а в самом конце идёт отрисовка.

Спустя 5 минут, 52 секунды (28.01.2010 - 13:47) phz написал(а):

Спустя 2 минуты, 26 секунд (28.01.2010 - 13:49) arhitec написал(а):
да вот не работает как раз то ки smile.gif
Например, я новый пользователь:
1. Захожу на страницу и получаю:
а) если я не голосовал (определение по ip) то мне дают голосовать
б) если я уже голосовал, то просто показывают таблицу данных
2. Я голосую и после голосования идет обновление страницы сразу после обновления проверяется какой вариант ответа был выбран, затем проверяется голосовал ли этот IP уже или нет и проверяется файл с данными на пустот.
3. Если пользователь голосует впервые, то сначала его записываем а потом выводим данные.

ПРАБЛЕМА:
Когда человек голосует, что методом GET, что POST переданые данные остаются и если после показа нужной инфы обновить страницу, то значения полученные от этого же пользователя записываются сново и сново после каждого F5.
Я хотел решить эту праблему путем обнуления значений переменных $_GET а затем сново сделать редирект страницы. Однако редирект не происходит а выдается ошибка, которую Вы уже видили...

Спустя 6 минут, 12 секунд (28.01.2010 - 13:56) arhitec написал(а):
Цитата (phz @ 28.01.2010 - 10:47)
Почитай тему http://phpforum.ru/index.php?showtopic=17590

Я прочел топик, даже посмеялся, интересно все было обсуждено, НО!
Я тугодум наверное, я не понимаю как буферизация влияет на редирект?
Вобщем наверное я рано лезу в такой код sad.gif((

Спустя 40 минут, 14 секунд (28.01.2010 - 14:36) arhitec написал(а):
А у меня вот еще вопрос.
Сейчас определяется пользователь по IP, а как быть с теми компами, которые в локальной сети и имеют общий адрес ip в интернете?!

Спустя 4 месяца, 11 дней, 2 часа, 6 минут, 5 секунд (9.06.2010 - 15:42) Guest написал(а):
gfdjyfdjgyfj

Спустя 12 секунд (9.06.2010 - 15:42) Ltybc написал(а):
fghjfdghjgf

Спустя 34 секунды (9.06.2010 - 15:43) retret написал(а):
wetae4w

Спустя 12 минут, 38 секунд (9.06.2010 - 15:55) Dron19 написал(а):
Цитата (Ice @ 28.01.2010 - 08:22)
header("Location:" . $_SERVER['PHP_SELF']);

да, но если это сделать после заголовка, то не получится, если в файле php.ini функция конфигурации output_buffering отключена, я решал это проблему так:

if(ini_get('output_buffering') == '0')
{
ini_set('output_buffering','1')
header("Location: ТУТ АДРЕС");
ini_set('output_buffering','0');
}

Спустя 3 минуты, 18 секунд (9.06.2010 - 15:59) Basili4 написал(а):
Dron19
Cпециально для вас нашел http://www.softtime.ru/dic/id_dic=302&id_group=12
Быстрый ответ:

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