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

Форум PHP

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

 

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

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

тема: Добавление новых данных и вытекающая проблема
 
 автор: Arfey   (31.08.2008 в 15:08)   письмо автору
 
 

При добавлении объявления пользователь получает сообщение "Данные успешно сохранены". Но если начать обновлять страницу то тоже самое объявление пишется в БД снова и снова - как от этого избавиться?
З.Ы. Извиняйте если слишком примитивный вопрос

  Ответить  
 
 автор: sl1p   (31.08.2008 в 15:12)   письмо автору
 
   для: Arfey   (31.08.2008 в 15:08)
 

добавлять к юрл гет,любое чтото, например rand();

  Ответить  
 
 автор: sim5   (31.08.2008 в 15:18)   письмо автору
 
   для: sl1p   (31.08.2008 в 15:12)
 

Вот вы опять свою инфу поместили, а вы понимаете суть этой проблемы?

  Ответить  
 
 автор: sl1p   (31.08.2008 в 16:08)   письмо автору
 
   для: sim5   (31.08.2008 в 15:18)
 

нет а шо

  Ответить  
 
 автор: sim5   (31.08.2008 в 16:12)   письмо автору
 
   для: sl1p   (31.08.2008 в 16:08)
 

А шо тогда советуете?

  Ответить  
 
 автор: sl1p   (31.08.2008 в 16:40)   письмо автору
 
   для: sim5   (31.08.2008 в 16:12)
 

а чо

xD
сори со смеха катаюсь :)

  Ответить  
 
 автор: sim5   (31.08.2008 в 16:42)   письмо автору
 
   для: sl1p   (31.08.2008 в 16:40)
 

Ни чо, не знаете, лучше молчите. Смеяться в новый открытый форум.

  Ответить  
 
 автор: sl1p   (31.08.2008 в 16:48)   письмо автору
 
   для: sim5   (31.08.2008 в 16:42)
 

да я просто пишу потом понимаю что это не то :D
мне кнопочка едит снится по ночам =D

  Ответить  
 
 автор: sim5   (31.08.2008 в 15:20)   письмо автору
 
   для: Arfey   (31.08.2008 в 15:08)
 

После успешного добавления данных в базу, делайте перенаправление, например, на другую страницу. Это позволит сбросить GET, POST данные, решив вашу проблему.

  Ответить  
 
 автор: mihdan   (31.08.2008 в 19:03)   письмо автору
 
   для: sim5   (31.08.2008 в 15:20)
 

Можно на туже самую страницу, но только добавив в урл любой параметр, чтобы браузер думал, что это новая страница

Например

<?php
// Добавление данных и проверка на успешность
header('Location: ?rnd='.time());
?>

  Ответить  
 
 автор: sim5   (31.08.2008 в 19:27)   письмо автору
 
   для: mihdan   (31.08.2008 в 19:03)
 

Это я знаю. И совсем не обязательно time(). Можно вообще не прибегать к передаче параметра, если хотим скрыть "причину" перехода.

  Ответить  
 
 автор: mihdan   (31.08.2008 в 19:30)   письмо автору
 
   для: sim5   (31.08.2008 в 19:27)
 

Согласен с вами, просто это один из вариантов

  Ответить  
 
 автор: Arfey   (31.08.2008 в 23:10)   письмо автору
 
   для: mihdan   (31.08.2008 в 19:30)
 

Вот урезанный кусок проблемы:
Данные проверяются на корректность, и если все в порядке - вставляются в БД и на эту же страницу выводится сообщение "Данные добавлены". Как здесь воспользоваться вашими советами. Заранее благодарю

<?
$x
=1;
if (!empty(
$submit) )
{
$db mysql_connect("localhost""root");
mysql_select_db("db1",$db);
   if (
$a!="")
     {
      
$sql "INSERT INTO table (a,b,c) VALUES ('$a','$b','$c')";
    
$result mysql_query($sql);
    echo 
"Данные добавлены";
    
$x=0;
     } 
else { 
$error_msg "Вы не заполнили обязательные поля (выделены краным цветом)<br>"; }

}                

if (
$x==1
{
?>
<form method="post" action="<? echo $PHP_SELF ?>">
<? 
echo $error_msg;
$error_msg 0;
 
?>
<TABLE>
  <TR>
    <TD>Введите a,b,c:</TD>
    <TD>
      <input name=a>
      <input name=b>
      <input name=c>
    </TD>
  </TR>
  <TR>
    <TD>
      <input type="Submit" name="submit" value="Добавить">
    </TD>
  </TR>
</FORM>
</TABLE>
<?
}
?>

  Ответить  
 
 автор: sim5   (01.09.2008 в 06:52)   письмо автору
 
   для: Arfey   (31.08.2008 в 23:10)
 

Первое - register_globals установите в off и получайте данные из формы как $_POST['a'] и т.д..
Второе - вы хотя бы "для порядка" проверяли чего вам шлют, чего вы на веру все принимаете и записываете в базу.
Что касается вопроса перенаправления, то вы должны решить сразу - хотите ли вы передавать параметр по которому будете определять этот переход, либо нет. Во втором случае вам потребуется сессия, а значит ваш скрипт доолжен быть построен так, что все, что связано с выводом в браузер, должно происходить после старта сессии.
Сам механизм такой. В начале вы проверяте - был ли переход на странице, если это был параметр в адресной строке, например: header("location: ?ok"), то дожны проверить:
if (isset($_SET['ok'])) {
//сообщение об успешной операции
} else {
//проверяем получение формы
//если ошибки, устанавливаем ошибку
//если все ОК пишем в базу и перенаправляем
}
Далее проверяем, если форма не приходила или приходила, но были ошибки - выводим форму. Вот собственно и весь механизм.

  Ответить  
 
 автор: Apcen   (01.09.2008 в 11:22)   письмо автору
 
   для: Arfey   (31.08.2008 в 15:08)
 

первое нужно сначало проверять ошибки и только после этого записывать в бд
и при обнавлении перенаправлять на страницу записи.

  Ответить  
Rambler's Top100
вверх

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