в нем есть такие файлы
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
я теперь пользуюсь редиректом 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
А не легче изучить правильное программирование, чем использовать хак для своего неправильного?
Какой-то бардак, можешь подробнее сказать, в каком именно скрипте происходит двойная вставка? И просиходит это при обновлении страницы именно? Если да - то надо редиректить после успешной вставки данных.
Так у тебя прямая ошибка в 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 и хедеры заработают
У вас, так понимаю все это в utf-8.... Тогда удалите BOM и хедеры заработают
Спустя 59 минут, 51 секунда (24.04.2011 - 18:24) дианитка написал(а):
установила всем файлам кодировку utf8 (была ANSI) и записала в файле подключения бд
mysql_query ('SET NAMES utf8');
теперь кажется определяет пользователя правильно но выводит крякозябры
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). Не более.
Нижеидущий код будет выполнен.
между прочим... если Вы полагаете что вызов 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
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(); ты ни чего не вывлдишь?
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 ......
Перед <?php пробела или табуляции тоже нет?...
Файлик куда-нить подключается?
Спустя 7 минут, 8 секунд (24.04.2011 - 20:07) дианитка написал(а):
ура, оказалось перед <?php был пробел (надо же из-за такой мелочи!)
Mirexzpalich, большое Вам спасибо)))
Mirexzpalich, большое Вам спасибо)))
Спустя 1 минута, 35 секунд (24.04.2011 - 20:08) Mirexzpalich написал(а):
Да... Бывает таоке =).... Голову сломать успеваешь....
_____________
дианка[COLOR=purple]