Лучшая учеба - это практика. Вот я решил написать самостоятельно скрипт голосования.
Пользователь выбирает вариант ответа путем радиокнопок затем передается переменная через метот GET.
НО! Весь скрипт выполняется на одной странице, из-за чего необходимо после использования переменной посланной через GET обнулить ее, но не саму переменную, а то значение что остается в $_GET[переменная]
Можно ли это сделать и как? Если нет, то есть ли другие решения?
За ранее спасибо!
Спустя 10 минут, 17 секунд (28.01.2010 - 11:21) Dezigo написал(а):
$_GET это массив. хочешь обнулить его. пожалуйста.
$_GET['a'] = 0; (null)
$_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
Выдает сообщение:
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 написал(а):
Я прошу прощения!
Начитался я информации и о заголовках и о том как передается информация в заголовках, но сути решения своего вопроса так и не понял.
Нельзя ли подсказать мне решение праблемы? Голова уже пухнет от инфы а толку ноль
Начитался я информации и о заголовках и о том как передается информация в заголовках, но сути решения своего вопроса так и не понял.
Нельзя ли подсказать мне решение праблемы? Голова уже пухнет от инфы а толку ноль
Спустя 3 минуты, 13 секунд (28.01.2010 - 12:28) arhitec написал(а):
Правильно ли я понимаю, что я пытаюсь провести редирект страницы в момент исполнения кода PHP и поэтому мне выдается ошибка?
И как можно произвести редирект перед тем как выводится форма?
Вобщем я запутался по полной!
И как можно произвести редирект перед тем как выводится форма?
Вобщем я запутался по полной!
Спустя 9 минут, 3 секунды (28.01.2010 - 12:37) baston написал(а):
А может быть у вас есть пробелы или лишние строки перед тегом <?...
Или скрипт сохранен не в той кодировке, например не в UTF-8...
проверьте.
Или скрипт сохранен не в той кодировке, например не в UTF-8...
проверьте.
Спустя 9 минут, 56 секунд (28.01.2010 - 12:47) Ice написал(а):
Цитата (arhitec @ 28.01.2010 - 09:28) |
Правильно ли я понимаю, что я пытаюсь провести редирект страницы в момент исполнения кода PHP и поэтому мне выдается ошибка? И как можно произвести редирект перед тем как выводится форма? Вобщем я запутался по полной! |
код можно глянуть?
Спустя 43 минуты, 44 секунды (28.01.2010 - 13:31) arhitec написал(а):
если в моем бардаке сможете разобраться )))
Я новичок, так что не слишком на меня ругайтесь
ссылка на происходящее: 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'> <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 ()
?>
Я новичок, так что не слишком на меня ругайтесь
ссылка на происходящее: 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'> <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 написал(а):
Почитай тему http://phpforum.ru/index.php?showtopic=17590
Спустя 2 минуты, 26 секунд (28.01.2010 - 13:49) arhitec написал(а):
да вот не работает как раз то ки
Например, я новый пользователь:
1. Захожу на страницу и получаю:
а) если я не голосовал (определение по ip) то мне дают голосовать
б) если я уже голосовал, то просто показывают таблицу данных
2. Я голосую и после голосования идет обновление страницы сразу после обновления проверяется какой вариант ответа был выбран, затем проверяется голосовал ли этот IP уже или нет и проверяется файл с данными на пустот.
3. Если пользователь голосует впервые, то сначала его записываем а потом выводим данные.
ПРАБЛЕМА:
Когда человек голосует, что методом GET, что POST переданые данные остаются и если после показа нужной инфы обновить страницу, то значения полученные от этого же пользователя записываются сново и сново после каждого F5.
Я хотел решить эту праблему путем обнуления значений переменных $_GET а затем сново сделать редирект страницы. Однако редирект не происходит а выдается ошибка, которую Вы уже видили...
Например, я новый пользователь:
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 |
Я прочел топик, даже посмеялся, интересно все было обсуждено, НО!
Я тугодум наверное, я не понимаю как буферизация влияет на редирект?
Вобщем наверное я рано лезу в такой код ((
Спустя 40 минут, 14 секунд (28.01.2010 - 14:36) arhitec написал(а):
А у меня вот еще вопрос.
Сейчас определяется пользователь по IP, а как быть с теми компами, которые в локальной сети и имеют общий адрес ip в интернете?!
Сейчас определяется пользователь по 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
Cпециально для вас нашел http://www.softtime.ru/dic/id_dic=302&id_group=12