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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблема с обновлением страницы с формой в FF.

Сообщения:  [1-10]   [11-15] 

 
 автор: Хулиган   (22.11.2007 в 18:17)   письмо автору
 
   для: sim5   (22.11.2007 в 17:21)
 

Посыпаю голову пеплом :(((
Оказывается, пустая строка, в которой нет абсолютно ничего, воспринимается как вывод в браузер...
Пустая строка была оставлена для удобства чтения кода, а оказалось, что она воспринимается как вывод в браузер и мой header('location') по этой причине не работал.
Ещё раз всем спасибо. Проблема решена. Форма больше не содержит прежних данных при обновлении через header('location')

   
 
 автор: sim5   (22.11.2007 в 17:49)   письмо автору
 
   для: Хулиган   (22.11.2007 в 17:43)
 

Если бы не было, то вы бы получили это сообщение только в том случае, если перед ним получили либо замечание или ошибку, например, при записи в базу. Но вы об этом не упоминаете, значит у вас где-то пустая строка, или перед тегом РНР есть пустая строка, а достаточно и одного пробела. Проверьте еще раз.

   
 
 автор: Хулиган   (22.11.2007 в 17:43)   письмо автору
 
   для: sim5   (22.11.2007 в 17:21)
 

Мне не стыдно. Я знаю, что нельзя ничего выводить до передачи заголовка. И нечего не вывожу в браузер. Весь код до header(location) приведен выше без каких-либо сокращений. И там нет вывода в браузер.

   
 
 автор: sim5   (22.11.2007 в 17:21)   письмо автору
 
   для: Хулиган   (22.11.2007 в 17:03)
 

Про это Cannot modify header information - headers already sent by... уже столько раз говорилось, что ей богу вам должно быть просто стыдно. Это не header('location: /editnews.php'); не работает, это у вас перед пердачей заголовка, есть вывод в браузер!

   
 
 автор: Хулиган   (22.11.2007 в 17:03)   письмо автору
 
   для: sim5   (22.11.2007 в 14:22)
 

header('location: /editnews.php'); я пробовал первым делом, ещё до того, как задать свой вопрос, но этот способ даёт ошибку:
Cannot modify header information - headers already sent by (output started at z:\home\site..ru\www\editnews.php:2) in z:\home\site.ru\www\editnews.php on line 38.

Видимо придётся разнести форму и скрипт по её обработки в разные файлы...

Спасибо всем.

   
 
 автор: sim5   (22.11.2007 в 14:22)   письмо автору
 
   для: Хулиган   (22.11.2007 в 14:05)
 

Что-то не верится, что не работает:

<?
mysql_close
($link); 
header('location: path/file.php'); 

и никакие F5 не сработают уже.

   
 
 автор: KPETuH   (22.11.2007 в 14:11)   письмо автору
 
   для: Хулиган   (22.11.2007 в 14:05)
 

поробуйте использовать разные форму на каждую кнопку и не использоватья яваскрипт в данным образом...

   
 
 автор: Хулиган   (22.11.2007 в 14:05)   письмо автору
 
   для: Alex Boxgorn   (22.11.2007 в 12:42)
 

К сожалению, ни один из предложеных способов не работает
На форме есть input, который изначально пустой, а по нажатию кнопок в форме в него прописывается либо 'save', либо 'add'.
Но при рефреше этот input не пустой, а содержит значение, которое в него было записано при предыдущем submit'е...
Поэтому проверка скрытого input лишена смысла: он никогда не бывает пустым при обновлении страницы.
Способ с exit не работает возможно по причине того, что скрипт, добавляющий данные в базу, находится в том же файле, что и html-код страницы с формой.

В общем файл editnews.php выглядит так:

<?
    
if(isset($_POST['action'])) {
        
$link mysql_connect("localhost""user""pass") or die ("Could not connect");
        
mysql_select_db ("base") or die ("Could not select database");
        
mysql_query("SET NAMES cp1251");
        if (
$_POST['action'] == "save"){
            
$i=1;
            while (isset(
$_POST["message".$i] )){
                
$message trim($_POST["message".$i]);
                
$prevmessage $_POST["prevmessage".$i];
                if (
!= strlen($message)){
                    
//update news
                    
mysql_query("UPDATE `news` SET content = '$message' WHERE content = '$prevmessage'");
                }
                else{
                    
//delete news
                    
mysql_query("DELETE FROM `news` WHERE content = '$prevmessage'");
                }
                
$i++;
            }
        }
        else if (
$_POST['action'] == "add"){
            if (isset(
$_POST["newmessage"] )){
                
$newmessage trim($_POST["newmessage"]);
                
$added "NOW()";
                if (
0!=strlen($newmessage)){
                    
$sql_str "INSERT INTO `news` VALUES (";
                    
$sql_str.= $added,";
                    
$sql_str.= " '$newmessage',";
                    
$sql_str.= " '')";
                    
$result mysql_query($sql_str);
                }
            }
        }
        
mysql_close($link);
        
//exit('<HTML><HEAD><META HTTP-EQUIV="REFRESH" CONTENT="0; URL='.$_SERVER['HTTP_REFERER'].'"></HEAD><BODY></BODY></HTML>');
    
}
?>

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title></title>
</head>

<body>
    .....
    .....    
    <form name=frm_edit action=editnews.php method=post>
        .....
        <input type=hidden  name='action' id='action' value=''>
        <input type=button  value='                   ' onclick="send_edit()">
        <input type=button  value='                ' onclick="send_add()">
    </form>
    .....
    .....
</body>

<script type="text/javascript" language="javascript">
    function send_edit(){
            document.getElementById('action').value = "save";
            document.forms['frm_edit'].submit();
    }
    function send_add(){
            document.getElementById('action').value = "add";
          document.forms['frm_edit'].submit();
    }
</script>
</html>

   
 
 автор: KPETuH   (22.11.2007 в 12:45)   письмо автору
 
   для: Alex Boxgorn   (22.11.2007 в 12:42)
 

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

   
 
 автор: Alex Boxgorn   (22.11.2007 в 12:42)   письмо автору
 
   для: KPETuH   (22.11.2007 в 12:33)
 

с каких шишов оно отправляться будет? эти переменные передаются по методу POST. А отправка осуществляется только при нажатии кнопки с type=submit

echo $_POST["type"] // при нажатии рефреш вы ничего не получите в этой переменной, а при нажатии на кнопку $_POST["type"]  будет равен 'saveKart'
<input type='hidden' name='type' value='saveKart'>
      <input type='submit' name='submit' value='Сохранить изменения' class='button'>

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

   

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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