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

Форум PHP

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

 

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

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

тема: Повторная отправка данных из формы при обновлении стр.
 
 автор: ramundo   (24.02.2014 в 16:30)   письмо автору
 
 

<?php include_once("bd_connect.php");
date_default_timezone_set('Europe/Moscow'); 
?>
<html>
<head>
<title>Главная</title>
<center><h3>САЙТ</h3></center>
</head>
<body>

    
<p> <small>  <form action=".php" method="post">
    <p> <a href="registration.php">Регистрация </a> Логин: <input type="text" name="Login" size="12">
     Пароль:<input type="text" name="Password" size="12"> <input type="submit" value="Вход" />
    </form></p>
    
    <h4 style="background-color:#FFAFA0;"><a href="Index.php"> ФОРУМ </a> 
    <a href="dating.php">ЗНАКОМСТВА</a> <a href="personal.php">ЛИЧНЫЙ КАБИНЕТ </a> 
    <a href="search.php">ПОИСК </a>    <a href="rules.php">ПРАВИЛА </a></h4>
    
    
    <br>
        <form  method="post">    
<textarea name="text"></textarea>
<input type="submit" value="Отправить" />
</form>
            
    <?php
    $date 
date('Y-m-d H:m:s');
     
   
$strSQL1 "SELECT * FROM userinfo WHERE id=" .$_GET["id"];
   
$strMSG="INSERT INTO messages (text,writer,reader,date) VALUES ("
   
    
// Выполнить запрос (набор данных $rs содержит результат)
    
    
$rs1 mysql_query($strSQL1) or die(mysql_error());;
    
        
// Цикл по $rs
    
    
while($row1 mysql_fetch_array($rs1)) {

        
// Записать данные человека
        
echo "<br><p></p><p class=i>" $row1["name"] . " " $row1["lname"] ." ".$row1["login"]. "<br>
        Возраст: " 
$row1["age"] . "<br>
        Страна: " 
$row1["country"] . "<br>
        Город: "
$row1["city"] . "<br>
        Образование: "
$row1["education"] . "<br>
        О себе: "
$row1["info"] . "<br>
        Зарегистрирован: " 
$row1["regdate"] . "</p>";
        
    if (isset(
$_POST['text']) && trim($_POST['text'])){
    
    
$strMSG $strMSG."'".$_POST['text']."', '".$login."', '".$row1["login"]."', '".$date."')";
        
mysql_query($strMSG) or die(mysql_error());
     
header("Location: userpaige.php");
     
     }
          }
           
        
        
//mysql_close();
        
         
echo $strSQL1;
         echo  
$strMSG;
          echo 
$date;
          
         
?>
            
    </body>

</html>


Как тут обойтись без header location? При его использовании редирректом на эту же страницу или на другие, у меня падает сессия и не распознается айди в строке
 $strSQL1 = "SELECT * FROM userinfo WHERE id=" .$_GET["id"];
.

  Ответить  
 
 автор: psychomc   (24.02.2014 в 16:49)   письмо автору
 
   для: ramundo   (24.02.2014 в 16:30)
 

без header location можно обойтись если отправлять форму через ajax. не понятно только, как это у вас "падает сессия", если вы сессию нигде не стартуете. и код очень плохой, даже при включенном режиме magic_quotes_gpc будет уязвим к sql-инъекциям

  Ответить  
 
 автор: ramundo   (24.02.2014 в 16:59)   письмо автору
 
   для: psychomc   (24.02.2014 в 16:49)
 

Стартую в подключаемом файле "BD-connect.php". Содержимое файла:

<?php
error_reporting
(E_ALL);
session_start();
date_default_timezone_set('Europe/Moscow');
mysql_connect("localhost""root""2230200") or die (mysql_error());
mysql_select_db("mainsite2");


$login $_SESSION['login'];
$password $_SESSION['password'];
$id_user $_SESSION['id'];
?>


Код плохой только с точки зрения безопасности? Я пока в качестве кодов не разбираюсь. Совсем новичок.

  Ответить  
 
 автор: psychomc   (24.02.2014 в 17:50)   письмо автору
 
   для: ramundo   (24.02.2014 в 16:59)
 

не только. тут нужно читать литературу

  Ответить  
 
 автор: confirm   (24.02.2014 в 16:50)   письмо автору
 
   для: ramundo   (24.02.2014 в 16:30)
 

Заголовки должны отправляться до любого вывода в браузер, а у вас целый блок html-кода в начале.

  Ответить  
 
 автор: ramundo   (24.02.2014 в 17:01)   письмо автору
 
   для: confirm   (24.02.2014 в 16:50)
 

Простите мою неосведомленность, но что имеется ввиду под заголовками?

  Ответить  
 
 автор: confirm   (24.02.2014 в 17:11)   письмо автору
 
   для: ramundo   (24.02.2014 в 17:01)
 

header("Location: userpaige.php"); - это передача заголовка, а перед их передачей не должно быть никаких выводов в браузер, даже до РНР-тега не должно быть пробелов и прочего лишнего! А у вас структура кода такова, что изначально выводится целый блок в браузер, а значит не переход будет, а ошибка. И после перехода нужно заканчивать работу скрипта - exit;

Если грамотно написать структуру кода, то не будет проблем и с переходом.

  Ответить  
 
 автор: ramundo   (24.02.2014 в 17:50)   письмо автору
 
   для: confirm   (24.02.2014 в 17:11)
 

Я не понял) можно на примере? У меня наглядное мышление.

  Ответить  
 
 автор: confirm   (24.02.2014 в 19:22)   письмо автору
 
   для: ramundo   (24.02.2014 в 17:50)
 

Мышление у вас должно быть логическое, но основываться на знании языка, на котором вы пытаетесь писать. У вас так:

<?php include_once("bd_connect.php"); //это РНР-код
date_default_timezone_set('Europe/Moscow'); 
?>
//а это уже html-код, и это непосредственный вывод в браузер
<html>
<head>
.....
<input type="submit" value="Отправить" />
</form>
<?php
    $date 
date('Y-m-d H:m:s');
     
//тут опять блок РНР, и вот в нем передача заголовка  

     
header("Location: userpaige.php"); 

//ее обязательно надо заканчивать выходом, то есть после этой строки должно быть:
     
exit; 

//иначе могут быть глюки
 


Чтобы подружит передачу заголовка и вывод, существуют две возможности - 1. буферизация, 2. передача заголовков до вывода в браузер

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

  Ответить  
 
 автор: ramundo   (24.02.2014 в 20:15)   письмо автору
 
   для: confirm   (24.02.2014 в 19:22)
 

Тьфу, перепутал, наглядное восприятие у меня.


Переход не вызовет проблемы в том смысле, что переменные сессии, находящиеся в подключаемом файле, и $_GET[id], не будут опустошаться?

  Ответить  
 
 автор: confirm   (24.02.2014 в 20:58)   письмо автору
 
   для: ramundo   (24.02.2014 в 20:15)
 

Какая сессия, если у вас собственно никакого перехода не произойдет по причине описанной выше?
Если грамотно написать структуру кода, то ничего не отвалится, не опустошится и т.д., и т.п.

  Ответить  
 
 автор: moonfox   (25.02.2014 в 00:19)   письмо автору
 
   для: ramundo   (24.02.2014 в 20:15)
 

$login = $_SESSION['login'];
$password = $_SESSION['password'];
$id_user = $_SESSION['id']; 


интересно а в сессию они как попали то ?)

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

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