Добавление нового элемента с помощью формы

SergeyKa2

Guest
Добавление нового элемента с помощью формы

Заранее прошу прощения у модераторов за возможную глупость вопроса. К сожалению то время которое было отведено на чтение ФАК и первых сообщений форума - иссякло и надо двигатся дальше.

Собственно вопрос.
Создал форму для добавления нового элемента в таблицу MySQL но обнаружилась проблема если после добавления строки сделать "обновить страницу" добавляется аналогичная запись, т.к. переменные в строке запроса посылаются заново. Возможно помогут сессии, но не представляю как избавится от $QUERY_STRING.
Хочу предупредить, что возможен случай, когда пользователь захочет добавить абсолютно индентичную предидущей запись. Собственно код. Если понятно из текста то вникать сообственно и не нужно :)

PHP:
<?
mysql_connect("localhost","root","");
mysql_select_db("garant");
?><table width="100%" border="1"><?
$r=mysql_query("SELECT id,name,pr_orig,kross_1 FROM catalog;");
$col=mysql_num_fields($r);
$row=mysql_num_rows($r);
if(@$_GET[Add]) {
  for($i=1,$val="",$field=""; $i<$col; $i++){
    $name=mysql_field_name($r,$i);
    $field.=$name.",";
    $val.='"'.$_GET[$name].'",';
  }
  $val=substr($val,0,strlen($val)-1);
  $field=substr($field,0,strlen($field)-1);
  //echo "INSERT INTO catalog ($field) VALUES ('$val');";
  mysql_query("INSERT INTO catalog ($field) VALUES ($val);");
  $r=mysql_query("SELECT id,name,pr_orig,kross_1 FROM catalog;");
  $col=mysql_num_fields($r);
  $row=mysql_num_rows($r);
}
echo '<tr>';
for($i=0; $i<$col; $i++){
  echo '<td>';
  $ident=mysql_field_name($r,$i);
  if($ident) {echo $ident;}
  else {echo '&nbsp;';}
  echo '</td>';
}
?><td>DEL</td><form metod="get" action="<?=$_SERVER[SCRIPT_NAME]?>">
</tr><?
for($j=0; $j<$row; $j++) {
  echo '<tr>';
  for($i=0; $i<$col; $i++){
    echo '<td>';
    $ident=mysql_result($r,$j,$i);
    if($ident) {echo $ident;}
    else {echo '&nbsp;';}
    echo '</td>';
  }
  echo '</tr>';
}
?>
<tr>
<form metod="get" action="<?=$_SERVER[SCRIPT_NAME]?>">
<td>&nbsp;</td>
<?
for($i=1; $i<$col; $i++){
  echo '<td>';
  $ident=mysql_field_name($r,$i);
  echo "<input type='text' name='$ident'>";
  echo '</td>';
}
?>
</table>
<input type="submit" name="Add" value="Добавить"><input type="Reset" value="Очистить">
</form>
 

SergeyKa2

Guest
Спасибо! Verk - спасибо за конкретику.

Может кому пригодится решение

Строку -
PHP:
?><table width="100%" border="1"><?
переносим вниз до первого
PHP:
echo '<tr>';
(иначе ругается, что заголовок выведен)

после
PHP:
$row=mysql_num_rows($r);
добавляем
PHP:
header("Location: [url]http://[/url]".$_SERVER['HTTP_HOST'].$_SERVER[SCRIPT_NAME]);
return;
PS: Первоисточник - http://z3950.uiggm.nsc.ru/ansi/other/php4/php42r/f/header.html
 

lucas

Guest
Думаем головой и добавляем:

PHP:
header("Location: http://" . $_SERVER["HTTP_HOST"] . $_SERVER["SCRIPT_NAME"]);

exit() ;
 
Сверху