Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как запретить повторную отправку данных
 
 автор: Николай2357   (23.06.2008 в 09:43)   письмо автору
 
 

Вот такая простенькая задачка: обработать данные формы на этой же страничке (по поводу кода-это упрощенный пример):

<?

if ($_POST['name']!="" && $_POST['mes']!="") {//Обработка данных
}
?>
<form action="<?echo $PHP_SELF;?>" name="ok"  method="post">
<input name="name" type="text">
<input name="mes" type="text">
<input  type="submit" />
</form>

Беда в том, что если обновить страничку, данные обрабатываются еще раз. Как этого избежать?
Заранее спасибо.

   
 
 автор: seregarulez   (23.06.2008 в 09:45)   письмо автору
 
   для: Николай2357   (23.06.2008 в 09:43)
 

в случае удачной от правки сделай редирект на страницу с формой или другую)

   
 
 автор: nek-v   (23.06.2008 в 10:00)   письмо автору
 
   для: seregarulez   (23.06.2008 в 09:45)
 

ога =) точно...

header("Location: страница с формой.php");

   
 
 автор: Николай2357   (23.06.2008 в 10:29)   письмо автору
 
   для: seregarulez   (23.06.2008 в 09:45)
 

Вся чтука в том, что обработать данные нужно на этой же страничке. Редерикт неподходит. Нужно наверное както так:

<?
if(isset($_POST['go'])){//И т.д...
}
<
input name="go" type="submit" />

и угробить переменную go.
Только unset(go) не проходит. Пробовал в разных вариантах, и onload, и еще всяко разно, немогу додуматься.

   
 
 автор: Trianon   (23.06.2008 в 10:40)   письмо автору
 
   для: Николай2357   (23.06.2008 в 10:29)
 

>Вся чтука в том, что обработать данные нужно на этой же страничке. Редерикт неподходит.

Так сделайте редирект на ту же страницу.

>Нужно наверное както так:

Нужно либо учить протоколы, и думать. Либо слушать советы.
А пороть ерунду, вроде unset($go), не нужно.

   
 
 автор: mihdan   (23.06.2008 в 10:39)   письмо автору
 
   для: seregarulez   (23.06.2008 в 09:45)
 

В случае удачной отправки - редирект на саму себя с добавлением параметра, например, так:

<?
if (форма добавлена в базу) {
   
header('Location: '.$_SERVER['PHP_SELF'].'?rnd='.time());
}
?>

   
 
 автор: Николай2357   (23.06.2008 в 11:00)   письмо автору
 
   для: mihdan   (23.06.2008 в 10:39)
 

B третий раз повторяю, мне нужно обработать на ЭТОЙ ЖЕ!!! страничке, редерикт неподходит в любом его проявлении.
А насчет "пороть ерунду" - согласен, написал для того, чтобы таких советов не давали.

   
 
 автор: Незнайка   (23.06.2008 в 10:02)   письмо автору
 
   для: Николай2357   (23.06.2008 в 09:43)
 

О, кажись здесь на форуме похожая "беда"
Написал темку добавляешь (жмешь отправить раз 10 например)
Тема например такая: Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
И наблюдаем:

1)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
2)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
3)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
4)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
5)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
6)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
7)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
8)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
9)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
10)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?

А может это я вообще не в тему, а?

   
 
 автор: Незнайка   (23.06.2008 в 10:03)   письмо автору
 
   для: Николай2357   (23.06.2008 в 09:43)
 

О, кажись здесь на форуме похожая "беда"
Написал темку добавляешь (жмешь отправить раз 10 например)
Тема например такая: Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
И наблюдаем:

1)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
2)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
3)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
4)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
5)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
6)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
7)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
8)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
9)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?
10)Игорь Вячеславович, когда Сделаете, чтобы одни и те же темы/сообщения не добавлялись дважды и более раз?

А может это я вообще не в тему, а?

   
 
 автор: nek-v   (23.06.2008 в 10:34)   письмо автору
 
   для: Незнайка   (23.06.2008 в 10:03)
 

проверяй не isset а empty. Проверяй пустоту переменной а не ее существование.
если переменная пуста то отправь форму обратно но с пришедшими GET POST данными.
Если не пуста то обработай форму и юзера редиректом куда нибудь кинь

   
 
 автор: nek-v   (23.06.2008 в 10:36)   письмо автору
 
   для: nek-v   (23.06.2008 в 10:34)
 

 if(empty($_POST['pole1']) || empty($_POST['pole2'])) и тд 

   
 
 автор: Николай2357   (23.06.2008 в 10:53)   письмо автору
 
   для: nek-v   (23.06.2008 в 10:36)
 

Да неподходит мне редерикт, мне нужно обработать НА ЭТОЙ ЖЕ страничке, вот в чем беда. А там хоть как проверяй, после обновления браузер данные повторно отправляет и капут, получаем дубль 2.

   
 
 автор: mihdan   (23.06.2008 в 10:59)   письмо автору
 
   для: Николай2357   (23.06.2008 в 10:53)
 

Вы вообще читали и пробовали что вам написали - или пластинку заело "А там хоть как проверяй, после обновления браузер данные повторно отправляет и капут, получаем дубль 2"

   
 
 автор: nek-v   (23.06.2008 в 11:00)   письмо автору
 
   для: Николай2357   (23.06.2008 в 10:53)
 

Чти пример


<?php
/*
  +---------------------------------------+
  |    Create by nek (c) 2008 - 2009      |
  +---------------------------------------+
  |       E-mail: nek@srez.org.ru         |
  +---------------------------------------+
  |            ICQ: 20-47-03              |
  +---------------------------------------+
*/
////////////////////////////
   
$path='session';
   
session_save_path($path);
   
session_start();
///////////////////////////
   
$ua=strtok($_SERVER['HTTP_USER_AGENT'],"/");
$ua htmlspecialchars(stripslashes($ua));
   
$ua=str_replace("'","`",$ua);
$ua=$ua1;
   
$date=date("d/m/Y H:i");
   
$nik=@$_POST['nik'];
   
$url=@$_POST['url'];
   
$msg=@$_POST['msg'];
//////////////////////////
      
$err='';
      if(empty(
$_POST['input'])) $err .='Вы не ввели код!<br/>';
      if(!empty(
$_POST['input'])&&($_POST['input'] != @$_SESSION['code'])) $err .='Введенный вами   код не совпадает с кодом на картинке<br/>';
      if(empty(
$_POST['nik'])) $err .='Вы не ввели имя!<br/>';
      if(empty(
$_POST['msg'])) $err .='Вы не ввели сообщение!<br/>';
      if(
preg_match("/^[\s]+[\s]+$/",@$_POST['nik']))$err .='Вы не ввели имя!<br/>';
      if(
preg_match("/^[\s]+[\s]+$/",@$_POST['msg']))$err .='Вы не ввели сообщение!<br/>';
////////////////////////////////////////////////////////////////////////////////////
        
if (!empty($err)){
         require_once
'conf/header.php';

/////////////////////////////
          
$cod md5(uniqid(rand(),0));
          
$code=substr($cod,26);
          
$_SESSION['code']=$code;
/////////////////////////////
          
print'<div class="err">'.$err.'<div><br/>';
          print
'
          <form  action="say.php" method="post">
          <input type="hidden" name="'
.$date.'" />
          Имя:<br/>
          <input type="text" name="nik" value="'
.@$_POST['nik'].'" /><br/>
          URL:<br />
          <input type="text" name="url" value="'
.@$_POST['url'].'"/><br />
          Текст:<br/>
          <textarea name="msg">'
.@$_POST['msg'].'</textarea><br />
          Код с картинки:<br /> 
          <input type="text" name="input" /><br />
          <img src="captcha/img.php" alt="Code" /><br />
          <input type="submit" value="Отправить"/>
          <input type="reset" value="Очистить"/><br />
          </form>'
;
          require_once
'conf/foter.php';
          }
 if (empty(
$err)){
   
$nik trim($nik);
   
$msg trim($msg);
   
$nik=iconv_substr($_POST['nik'],0,30,'utf-8');
   
$nik=str_replace("'","`",$nik);
   
$nik htmlspecialchars(stripslashes($nik));
   
$nik=mysql_escape_string($nik);
   
//$msg=iconv_substr($_POST['msg'],0,100,'utf-8');
   
$msg=str_replace("'","`",$msg);
   
$msg htmlspecialchars(stripslashes($msg));
   
$msg=mysql_escape_string($msg);
  
$url substr($_POST['url'],0,36);
  
$url htmlspecialchars(stripslashes($url));  
//////////////////////////////////////////////////////////
      
$msg nl2br($msg);
      require
'bb.php';
      require
'cenzor.php';
      require
'smile.php';
      
$msg eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<ahref=\\2>\\2</a>\\3",$msg);
      
$msg str_replace("\n"," ",$msg);
      
$msg str_replace("\r"," ",$msg);
      
///////////////////////////////////
     
      
      //////////////////////////////////
      
require_once'conf/db.php';
      
mysql_query"INSERT INTO `guest` SET `nik`='$nik',`url`='$url',`msg`='$msg',`ua`='$ua1',`date`='$date';")
or die (
"Не возможно записать сообшение!<br/>Обратитесь к администрации!<br/>");
unset(
$_SESSION['code']);
header("Location: index.php");
}
?>

   
 
 автор: nek-v   (23.06.2008 в 11:03)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:00)
 

ну а если не то то просто проверяй существование того что ввел юзер в том месте куда пишешь (файлы/базы)

   
 
 автор: Николай2357   (23.06.2008 в 11:10)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:03)
 

Так ведь в том и дело, что юзер написал, что хотел, в базу все попало, все гут. Как тут чего проверить? A он возьми, да нажми "обновить", и опять все гут. А не надо бы...

   
 
 автор: Николай2357   (23.06.2008 в 11:05)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:00)
 

Да работает такая штука и у меня, там каптча прикручена, а мне нужно без нее. Можно сессиями порешать этот вопрос, я думал както проще можно...

   
 
 автор: mihdan   (23.06.2008 в 11:07)   письмо автору
 
   для: Николай2357   (23.06.2008 в 11:05)
 

Николай2357, не тупите ... В случае удачной отправки - редирект на саму себя с добавлением параметра, например, так:

<?
if (форма добавлена в базу) {
   
header('Location: '.$_SERVER['PHP_SELF'].'?rnd='.time());
}
?> 

   
 
 автор: nek-v   (23.06.2008 в 11:11)   письмо автору
 
   для: mihdan   (23.06.2008 в 11:07)
 

Во блин...
И правдо тупим...
=(

   
 
 автор: Николай2357   (23.06.2008 в 11:12)   письмо автору
 
   для: mihdan   (23.06.2008 в 11:07)
 

Я плакать буду. Нельзя мне редерикт! Может весь код выложить? Может правда я туплю...

   
 
 автор: mihdan   (23.06.2008 в 11:15)   письмо автору
 
   для: Николай2357   (23.06.2008 в 11:12)
 

Да почему же нельзя-то? Объясните, может получится что мы тупим ))))

   
 
 автор: nek-v   (23.06.2008 в 11:15)   письмо автору
 
   для: Николай2357   (23.06.2008 в 11:12)
 

заполни форму. запиши результат. потом проверяй. если ввод повторился сравни. если совпало, выведи echo"не флуди сцуко!"; и останови скрипт

   
 
 автор: mihdan   (23.06.2008 в 11:16)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:15)
 

>не флуди сцуко!
)))))))) 5 балов

   
 
 автор: Николай2357   (23.06.2008 в 11:24)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:15)
 

А куда записать? В hidden к юзеру? Ща попробую..

   
 
 автор: Незнайка   (23.06.2008 в 11:29)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:15)
 

>выведи echo"не флуди сцуко!"
Это может быть не флуд (и посетитель может больше никогда не вернуться)

-10

   
 
 автор: nek-v   (23.06.2008 в 11:31)   письмо автору
 
   для: Незнайка   (23.06.2008 в 11:29)
 

это пример а не руководство к действию

   
 
 автор: Незнайка   (23.06.2008 в 11:39)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:31)
 

А, если Воспримут "буквально" то посетителей не будет...

   
 
 автор: nek-v   (23.06.2008 в 11:44)   письмо автору
 
   для: Незнайка   (23.06.2008 в 11:39)
 

восприятие и мышление кодера вне нашей компетенции

   
 
 автор: GeorgeIV   (23.06.2008 в 11:18)   письмо автору
 
   для: Николай2357   (23.06.2008 в 11:12)
 

Да почему нельзя! Это же нормально!!!!
В начале скрипта проверяется был ли запрос с формы, если нет выводится форма, если да, то проверка, если проверка не прошла, выводится снова форма с верными полями, если проверка прошла, то форма либо не выводится, либо выводится с чистыми полями и каким нибудь уведомлением. В чем запор то?

   
 
 автор: Николай2357   (23.06.2008 в 11:26)   письмо автору
 
   для: GeorgeIV   (23.06.2008 в 11:18)
 

Запор в "обновить".

   
 
 автор: Trianon   (23.06.2008 в 11:32)   письмо автору
 
   для: Николай2357   (23.06.2008 в 11:12)
 

>Я плакать буду. Нельзя мне редерикт! Может весь код выложить? Может правда я туплю...

Плакать не надо. Лучше попытайтесь объяснить, почему нельзя редирект.
Т.е. почему Вы хотите обработать форму именно за один POST-запрос.

Если надо - выложите код.
Не весь, а значимую часть.

   
 
 автор: nek-v   (23.06.2008 в 11:36)   письмо автору
 
   для: Trianon   (23.06.2008 в 11:32)
 

автор я не пойму что мешает тебе сравнить пришедшие с формы данные с тем что уже есть,а затем исходя из результатов сравнения уже либо сказать об этом юзеру либо кинуть его куда надо?

   
 
 автор: BinLaden   (23.06.2008 в 11:49)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:36)
 

to nek-v: Потому что пользователь может случайно отправить два раза и вместо страницы со своим добавленным сообщением он увидит какую-то неприятную надпись.
Вы уже предложили свой вариант, не стоит его повторять 10 раз.

   
 
 автор: nek-v   (23.06.2008 в 11:54)   письмо автору
 
   для: BinLaden   (23.06.2008 в 11:49)
 

=) ну зачем же неприятную?
можно напиать и echo'Солнышко будь паинькой, не посылай форму несколько раз подрят и не жми постоянно на F5';...
=)

   
 
 автор: sim5   (23.06.2008 в 12:11)   письмо автору
 
   для: nek-v   (23.06.2008 в 11:54)
 

Не надо "солнышко":

<form onsubmit="this.send.disabled=true;">
.....
<input type="submit" name="send" value="Sender">
</form>

Проверяем: ошибка - возвращаем, ОК - перенаправляем. Вроде бы нет такого, что бы мешало перенаправлению.

   
 
 автор: Николай2357   (23.06.2008 в 12:32)   письмо автору
 
   для: sim5   (23.06.2008 в 12:11)
 

Н е х о ч е т!!!
Может я не так понял чего нибудь?

   
 
 автор: Николай2357   (23.06.2008 в 12:13)   письмо автору
 
   для: Trianon   (23.06.2008 в 11:32)
 

Я еще мал и глуп в PHP, делайте скидку, не смейтесь громко.
Вот чего хочется

<?php 



$aname
=$coll=date("U");
$name=$_POST['name'];
$mes=$_POST['mes'];
if (
$name!="" && $mes!="") { 


$date=date("d.m.y");
$time=date("H:i");
$name=stripslashes($name);
$name=htmlspecialchars($name);
$mes=stripslashes($mes);
$mes=htmlspecialchars($mes);
$mes=nl2br($mes);
$text="<a id='$aname'></a><div id='d_$aname'class='div_mes'>$mes<h6  class='mess' 
align='right'><b>
$name<br/>$date<br/>$time</b></h1>
<br/><hr size=-1 color=navy align='right' width=90%></div>"
;


$fp=fopen("./forum.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
flock ($fp,LOCK_UN);
fclose($fp);
@
chmod("$fp"0644);
$ok=1;
}
//А вот почему нельзя редерикт, хочется красиво.

$run="onLoad='Run()'";
$dcol="#d_$aname{color:#FF0000;}"
?>

А дальше вывод

<style type="text/css">
<!--
<?
if($coll==$aname){echo $dcol;}
?>
-->
</style>
<SCRIPT language="JavaScript">
<!--
function Run() {
document.ok.subm.value=0;
location.href = location.href.replace(/#.*$/,"")+"#<? echo $aname?>";
}
//-->
</SCRIPT>

<body 
<?
if($ok==1){echo $run;}
?> >
.
.
.
.
<? include "forum.dat"?>

Идея такова: если все правильно, юзер видит свою запись красненькой и сразу, не мотая страницу. Все это работает, только если обновить страничку, запись появляется еще раз. Если каптчу прикрутить, все хорошо получается, но капча это зло (на моем сайте). Мудрить с сессиями не хотелось, думал проще все...

   
 
 автор: sim5   (23.06.2008 в 13:03)   письмо автору
 
   для: Николай2357   (23.06.2008 в 12:13)
 

Глупости все это, хотя бы потому, что вы пытаетесь изобрести велосипед. Вам же и говорят:
header(). Хотите красивую надпись, тогда хидер на другую страницу, где можете "облобызать" пользователя с ног до головы.

   
 
 автор: Николай2357   (23.06.2008 в 13:56)   письмо автору
 
   для: sim5   (23.06.2008 в 13:03)
 

Вникли бы сначала, прежде чем заявления о глупостях делать.
Кроме того, мне нужен не сайт, а ОДНА страничка. Зачем - это другой вопрос, а если бы можно было редерикт, я бы мозги Вам не полоскал, даже мойх скудных познаний хватает, чтобы знать про header().

   
 
 автор: Незнайка   (23.06.2008 в 14:08)   письмо автору
 
   для: Николай2357   (23.06.2008 в 13:56)
 

to:Николай2357
Негорячитесь Пожалуйста. Будьте Добрее. (я вот случай вспоминаю погорячился и меня на Луну послали).

   
 
 автор: Николай2357   (23.06.2008 в 14:16)   письмо автору
 
   для: Незнайка   (23.06.2008 в 14:08)
 

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

   
 
 автор: sim5   (23.06.2008 в 14:34)   письмо автору
 
   для: Николай2357   (23.06.2008 в 13:56)
 

А вы считаете, что location.href = location.href.replace(/#.*$/,"")+"#<? echo $aname; ?>";, это верх совершенства? Нет необходимости даже вникать, потому, что ну нет у вас ничего сверхестественного, что бы не позволило применить переход внутри страницы.

   
 
 автор: Николай2357   (23.06.2008 в 15:17)   письмо автору
 
   для: sim5   (23.06.2008 в 14:34)
 

Я уже писал, что далек от совершенста, поэтому и задаю "глупые" вопросы на форумах, ведь помоему они для этого и сделаны.
А вовсе не для того, чтобы тыкать носом в ребусы "у вас ничего сверхестественного".
Не хотите вникать, ладно, я все равно решу эту проблему с Вашей помощью или без.
Я не изобретаю велосипед, а хочу сделать маленький самокатик, желательно своими руками, и если что то не получается, прошу совета, помоему это нормально.
Можно написать супер пупер мега класс, прикрутить туда регулярку, сессии и бог весть знает что, а можно решить одной функцией или выражением. Если нельзя, так и скажите, я вот, к примеру, не понимаю, как в этом случае осуществить переход внутри страницы.

PS. location.href = location.href.replace(/#.*$/,"")+"#<? echo $aname; ?>" мне посоветовали на другом форумe http://forum.htmlbook.ru/viewtopic.php?id=9264 люди, которые в отличии от Вас всетаки вникают в проблему, прежде чем давать "совет".

   
 
 автор: AVS   (23.06.2008 в 16:05)   письмо автору
 
   для: Николай2357   (23.06.2008 в 15:17)
 

Коля, иди на Луну. ))) Тебе же сказали:


<?php
if (форма добавлена в базу) { 
   
header('Location: '.$_SERVER['PHP_SELF'].'?rnd='.time()); 

?>

   
 
 автор: Николай2357   (23.06.2008 в 16:39)   письмо автору
 
   для: AVS   (23.06.2008 в 16:05)
 

Хочу на луну! Скажите мне ктонибудь, что я дурак, и ничего не понимаю ни в PHP, ни в жизни. Только аргументировано.
Проблема то вот в чем, если все нормально, форма прошла, то к сообщению в файл .dat добавляется уникальный, разовый анкер с id= ... date("U"), div - у присваивается тоже разовый id=...d_date("U"), в скрипт "наехивается" id анкера, а в стили id div-а с просьбой раскрасит буквы в красный цвет. В результате юзер после отправки формы видит свои каракули красным цветом и сразу, без перемотки страницы вниз. Это разовая процедура, следующий раз прежнее сообщение будет череньким.
Самое смешное, что все это работает. Только если обновить... я уже писал.
Если сделать переадресацию кудабы то нибыло, весь смак этой процедуры пропадает.
И еще раз напомню, по ряду причин нужна одна страничка, со скриптом и выводом.
Вот.
Спасибо за внимание.

   
 
 автор: Незнайка   (23.06.2008 в 16:41)   письмо автору
 
   для: Николай2357   (23.06.2008 в 16:39)
 

>Хочу на луну!
Неубедительно ("Плохо просите"...)

   
 
 автор: sim5   (23.06.2008 в 18:05)   письмо автору
 
   для: Николай2357   (23.06.2008 в 16:39)
 

Чуть ниже Trianon написал - никто не запрещает в хидере указать анкер, не один JS имеет такую возможность. Вам просто нужно выстроить свой код так, чтобы он разделялся на четыре части:
1. Инициализация всех переменных, которые будут участвовать в обработке формы, для того, чтобы при ошибках выдавать пользователю уже введенное им.
2. Вывод вашей разукрашенной странички по анкеру, если был переход и остановка скрипта.
3. Проверка полученных данных из формы - если ошибки, устанавливаем код ошибки, иначе делаем необходимые операции над данными и переход на себя.
4. Вывод формы при ошибках и отсутствии перехода (по умолчанию).

Можно поступить немного иначе. Не передавать имя или еще что-то иное в хидере, кроме как анкера, а все остальное сессией. Эта установка в сессии, может служить признаком, что прием прошел на ОК, и данному юзеру уже ни за что опять не открыть форму (или только по истечении некоего времени (антифлуд)).

   
 
 автор: sim5   (23.06.2008 в 16:34)   письмо автору
 
   для: Николай2357   (23.06.2008 в 15:17)
 

Ну что обижаться? Вам сколько раз говорили, что проблему F5 решит переход - хотите одной страницей все, да нет проблем, делайте внутри страницы переход. Вы ведь сами уперлись, что вам не подходит header() (а можно и метатегом). Причем объясняете это некой проблемой. Ну тогда объясните в чем она состоит, лично я не вижу в вашем коде, по крайней мере в части его представленной, того, что было бы проблемой для использования в нем хидера.
Как вам советовать, если вы отметаете разумное, ведь вы с помощью этого JS сценария пытаетесь сделать тот же самый эквивалент хидера. Но суть то не в самом переходе, а в условиях обуславливающих его и последствиях перехода.

   
 
 автор: Trianon   (23.06.2008 в 16:37)   письмо автору
 
   для: Николай2357   (23.06.2008 в 12:13)
 

Очень грубо - примерно так:
<?php 
  
if(!isset($_GET['aname'])
  {
      
$aname=$col=date("U");
      ....
Ваш код до
      
//А вот почему нельзя редерикт, 
     
header("Location: ".$SERVER['PHP_SELF']."?aname=$aname");
    exit();
  }
  else 
$aname $col intval($_GET['aname']);
 ...
Ваш код после
  
// ..хочется красиво
?>


В локейшене можете свой анкер добавить, кстати....

   
 
 автор: Николай2357   (23.06.2008 в 22:18)   письмо автору
 
   для: Trianon   (23.06.2008 в 16:37)
 

Вот Вам огромное спасибо, натыкали носом, отправили на луну.
И все таки хидер.
Я же знал, все просто, а топик из-за флуда раздули огогого!
Я же только учусь, чего меня в этом упрекать, всего одна строчка
header("Location: ".$SERVER['PHP_SELF']."?aname=$aname");
и вопрос снят.
Еще раз всем огромное спасибо за участие.

   
 
 автор: AVS   (23.06.2008 в 23:06)   письмо автору
 
   для: Николай2357   (23.06.2008 в 22:18)
 

Надо было сразу вписать это в свой код и проверить как будет работать, а не писать все время про "одну страницу".

   
 
 автор: Николай2357   (23.06.2008 в 23:35)   письмо автору
 
   для: AVS   (23.06.2008 в 23:06)
 

Сразу вписывать было нечего, все варианты, которые предлагались я добросовестно проверял. Моего скудного умишки нехватило додуматься использовать "идентефикатор" в качестве дополнительного параметра. Вам смешно, но все кагда-то начинали.
Еще раз спасибо, давайте закроем тему.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования