[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с сессией и heder location
дианитка
помогите, пожалуйста, со скриптом простого блога -
в нем есть такие файлы

index.php- пользователь логиниться
login.php - проверка на существование пользователя и создание сессионных переменных
blog.php - вывод на страницу созданных пользователями тем и ссылка на добавление комментария
create_subject.php - cоздание новой темы и запись в бд
add_comment.php - создание комментария и его запись в бд, вывод на отдельной странице темы и комментариев с подписями логин,дата и т.д.
logout.php - уничтож. сессионная переменная

проблема возникает с heder location - происходит повторение комментария при обновлении страницы и при создании темы
и почему то даже при нажатии ссылки на выйти сессионная переменная для
create_subject.php и add_comment.php не уничтожается.

--------------------------------------index.php-------------------------------------------

session_start();

форма для входа - логин, пароль кнопочка submit



if (empty($_SESSION['login']) or empty($_SESSION['id']))
{
echo "Вы вошли на сайт, как гость<br><a href='#'>Эта ссылка доступна только зарегистрированным пользователям</a>";
}
else
{

echo "Вы вошли на сайт, как ".$_SESSION['login']."<br><a href='http://tvpavlovsk.sk6.ru/'>Эта ссылка доступна только зарегистрированным пользователям</a>";
}


--------------------------------------login.php-------------------------------------------


include ("bd.php");

if (empty($_POST['login']) or empty($_POST['password']))
{
exit ("Вы ввели не всю информацию, венитесь назад и заполните все поля!");
}

else
{
$passHash=$_POST['password'];
$login=$_POST['login'];
$res=mysql_query("SELECT id FROM users WHERE login='".$login."' AND password = '".$passHash."'");
$result=mysql_fetch_array($res);
if(mysql_num_rows($res) == 0)
echo "Такого пользователя нет";


else {

$_SESSION['user'] = $login;
$_SESSION['user_id'] = $result['id'];
echo "Привет ".$_SESSION['user'];
}

}



</br><a href='create_subject.php'>Ваша информация</a>
</br><a href='blog.php'>Блог</a>

--------------------------------------blog.php-------------------------------------------

session_start();
include ("bd.php");

if (isset($_SESSION['user'])) {
echo "Привет ".$_SESSION['user'];
echo "</br></br><a href='logout.php'>Выйти</a>";
}


$test=mysql_query("SELECT * FROM subjects where flag='show'");
while($row = mysql_fetch_array($test))
{
echo "<h2>".$row['name'] ."</h2> ";
echo "<div>". $row['description'] ."</div>";

echo "<br/><a href = 'add_comment.php?id=".$row['id']."'>Добавить комментарий к этой теме </a><br/>";
}



<br/><a href="create_subject.php">Создать тему</a>

--------------------------------------create_subject.php--------------------------------------

session_start();
include "bd.php";

if (isset($_SESSION['user'])) {
echo "Привет ".$_SESSION['user'];
echo "</br></br><a href='logout.php'>Выйти</a>";
}
else "Привет,гость ";
if(isset($_POST['submit'])){
$user_id=0;
if (isset($_SESSION['user_id'])){
$user_id = $_SESSION['user_id'];

}
$name = $_POST['name'];
$description = $_POST['description'];
$result2 = mysql_query ("INSERT INTO subjects (name,description,date,user_id,flag) VALUES('$name','$description',NOW(),'$user_id','show')");

/*if($result2){

header ('location:blog.php');
}

else echo "Ошибка!";*/



}




форма для создания новой темы - название и описание
<br/><br/> <a href="blog.php"> Вернуться к списку тем </a>


--------------------------------------add_comment.php---------------------------------


session_start();
include "bd.php";

if (isset($_SESSION['user'])) {
echo "Привет ".$_SESSION['user'];
echo "</br></br><a href='logout.php'>Выйти</a>";
}

else "Привет,гость ";



header ('location:blog.php');

if(isset($_POST['submit'])){
$user_id=0;
if (isset($_SESSION['user_id'])){
$user_id = $_SESSION['user_id'];

}

//$m = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE subjects.id = ".$_GET['id'] );
/*$query = mysql_query("SELECT * FROM subjects left join users on subjects.user_id = users.id WHERE subjects.id = ".$_GET['id']) or die(mysql_error());
while($row = mysql_fetch_array($query))
{
echo "<h2>".$row['name'] ."</h2> ";
echo "<p>". $row['description'] ."</p>";
echo "<p>". $row['date'] ."</p>";
echo "<p>". $row['login'] ."</p>";

}*/

$subject_id = $_GET['id'];
$comment = $_POST['comment'];


$r = mysql_query ("INSERT INTO comments (subject_id,date,user_id,comment,flag) VALUES('$subject_id',NOW(),'$user_id','$comment','show')");

}

$user_id=0;
if (isset($_SESSION['user_id'])){
$user_id = $_SESSION['user_id'];

$qSubjects =
"SELECT s.*, u.*
FROM `subjects` s
LEFT JOIN `users` u ON u.`id` = s.`user_id`
WHERE s.`id` = "
. (int)$_GET['id'] . "
"
;
$rSubjects = mysql_query($qSubjects) or die(mysql_error());
if (mysql_num_rows($rSubjects) > 0)
{

while ($subject = mysql_fetch_assoc($rSubjects))
{ //print_r($subject);
echo "<h2>".$subject['name'] ."</h2> ";
echo "<p>". $subject['description'] ."</p>";
echo "<p>". $subject['date'] ."</p>";
echo "<p>". $subject['login'] ."</p>";
}
}

else
echo 'Записей с таким id нет';




$qComments =
"SELECT s.*, c.*,u.*
FROM `comments` c
LEFT JOIN `subjects` s ON c.`subject_id` = s.`id`
LEFT JOIN `users` u ON u.`id` = s.`user_id`
WHERE s.`id` = "
. (int)$_GET['id'] . "
"
;
$rComments = mysql_query($qComments) or die(mysql_error());
if (mysql_num_rows($rComments) > 0)
{
while ($comm = mysql_fetch_assoc($rComments))
{//print_r($comm);
echo "<h2>".$comm['comment'] ."</h2> ";

echo "<p>". $comm['date'] ."</p>";
echo "<p>". $comm['login'] ."</p>";
}
}

else
echo 'Записей с таким id нет';

}




форма для добавления коммента


--------------------------------------logout.php---------------------------------


if (isset($_SESSION['user'])){
$old_user = $_SESSION['user'];
unset($_SESSION['user']);
session_destroy();
//print_r($_SESSION['user']);

if(!empty($old_user))
{echo "Успешный выход</br>";
}
else
echo "Разрегистрация не нужна, т.к. Вы не были зарегистрированы <br/>";

}






Спустя 29 минут, 34 секунды (24.04.2011 - 13:40) quickxyan написал(а):
header корректно работает если перед ним не было вывода.

я теперь пользуюсь редиректом js


echo '<script>location.href="index.php";</script>';



Спустя 1 час, 42 минуты, 32 секунды (24.04.2011 - 15:23) дианитка написал(а):
а с сессионными переменными что не так?

Спустя 30 минут, 29 секунд (24.04.2011 - 15:53) inpost написал(а):
дианитка
Какой-то бардак, можешь подробнее сказать, в каком именно скрипте происходит двойная вставка? И просиходит это при обновлении страницы именно? Если да - то надо редиректить после успешной вставки данных.
Так у тебя прямая ошибка в add_comment, редирект идёт прям сразу в начале страницы, так что весь скрипт проходить не будет!

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

Спустя 22 минуты, 30 секунд (24.04.2011 - 16:16) дианитка написал(а):
с header location - я убрала в начале, меня даже больше интересует проблема с сессионными переменными - вверху почти в каждом скрипте проверяется их наличие - echo "Привет ".$_SESSION['user']; - так вот- при переходе на add_comment и creat_subject пишет постоянно одного и того же пользователя, даже при переходе на logout.php

Спустя 1 час, 8 минут, 9 секунд (24.04.2011 - 17:24) Mirexzpalich написал(а):
А в логин.пхп кто сессию стартовать будет??
У вас, так понимаю все это в utf-8.... Тогда удалите BOM и хедеры заработают

Спустя 59 минут, 51 секунда (24.04.2011 - 18:24) дианитка написал(а):
установила всем файлам кодировку utf8 (была ANSI) и записала в файле подключения бд
mysql_query ('SET NAMES utf8');

теперь кажется определяет пользователя правильно но выводит крякозябры

Спустя 10 минут, 6 секунд (24.04.2011 - 18:34) Mirexzpalich написал(а):
Ну... крюкозябры - слов которые написаны в файлах... или которые тянутся из БД?

Спустя 4 минуты, 49 секунд (24.04.2011 - 18:38) дианитка написал(а):
русских слов из файлов и из бд( -

Спустя 2 минуты, 18 секунд (24.04.2011 - 18:41) Trianon написал(а):
дианитка
между прочим... если Вы полагаете что вызов header ('location:blog.php'); сам по себе приведет к прекращению выполнения дальнейшего кода, Вы здорово ошибаетесь.
Он лишь добавит поле Location: в заголовок отклика (ну и установит статус отклика 302). Не более.
Нижеидущий код будет выполнен.

Спустя 1 минута, 22 секунды (24.04.2011 - 18:42) Mirexzpalich написал(а):
Цитата (дианитка @ 24.04.2011 - 15:38)
русских слов из файлов и из бд( -

Установите кодировку: header("Content-type: text/html; charset=utf-8");
Только сначало все BOM удалите, если не удалены.

Спустя 15 минут, 9 секунд (24.04.2011 - 18:57) дианитка написал(а):
для файла blog.php стало все норм а для других, например, для login.php выдает такие ошибки



Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at W:\home\blog2.test\www\login.php:2) in W:\home\blog2.test\www\login.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at W:\home\blog2.test\www\login.php:2) in W:\home\blog2.test\www\login.php on line 5


Спустя 11 минут, 39 секунд (24.04.2011 - 19:09) дианитка написал(а):
у меня так и было записано...

Спустя 16 минут, 46 секунд (24.04.2011 - 19:26) Mirexzpalich написал(а):
BOM во всех файлах удален?

Спустя 2 минуты (24.04.2011 - 19:28) дианитка написал(а):
для его удаления достаточно пересохранить в кодировку utf-8 без ВОМ?

Спустя 1 минута, 45 секунд (24.04.2011 - 19:29) Mirexzpalich написал(а):
Да =)

Спустя 4 минуты, 41 секунда (24.04.2011 - 19:34) дианитка написал(а):
все пересохранено но ничего не изменилось(

Спустя 2 минуты, 4 секунды (24.04.2011 - 19:36) Mirexzpalich написал(а):
Хм... попробуй прогнать через эту прогу:
http://irbis-team.com/15/22/1

И еще перед session_start(); ты ни чего не вывлдишь?

Спустя 9 минут, 20 секунд (24.04.2011 - 19:46) дианитка написал(а):
проверила антибомом - она не нашла бома ни в одном файле, сессия у меня тоже самая-самая первая стартуется

Спустя 13 минут, 51 секунда (24.04.2011 - 19:59) Mirexzpalich написал(а):
Блин.... Чтож за мистика-то =)
Так... файлик начинается как:

<?php ......

Перед <?php пробела или табуляции тоже нет?...
Файлик куда-нить подключается?



Спустя 7 минут, 8 секунд (24.04.2011 - 20:07) дианитка написал(а):
ура, оказалось перед <?php был пробел (надо же из-за такой мелочи!)

Mirexzpalich, большое Вам спасибо)))

Спустя 1 минута, 35 секунд (24.04.2011 - 20:08) Mirexzpalich написал(а):
Да... Бывает таоке =).... Голову сломать успеваешь....


_____________
дианка[COLOR=purple]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.