Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 20:28   #1
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию Присвоение сессионному параметру $_SESSION значения влияет на то, что было написано выше

Здравствуйте.
В целях изучения php пишу что-то вроде Интернет-магазина (этот «портал» всего лишь учебный проект и не будет никуда внедрён). Возникла проблема при добавлении отзыва к товару, а точнее при обработке ошибок (выводе сообщений о них), которые могут возникнуть при добавлении отзыва (это пустой текст отзыва и неверно введённая капча). Поскольку ошибки обрабатываются аналогично друг другу, я решил остановиться на пустом отзыве. Если пользователь пытается добавить пустой отзыв, то ему просто должно показаться сообщение, о том, что отзыв не может быть пустым.

Кстати, структура сайта такая. Он разбит на несколько php-страниц, но только одна (index.php) является самостоятельной, все остальные подключаются с помощью include при выборе соответствующего раздела.

Я решил осуществить то, что задумал следующим образом. Когда у меня нажата кнопка «отправить отзыв», у меня проверяется textarea на пустоту и, если оно пусто, то в сессионный параметр запомнить код ошибки, после чего с помощью функции header перейти на ту же страницу, откуда мы пытались добавить пустой отзыв. В коде это выглядит так. Когда у меня нажата кнопка «отправить отзыв», исполняется такой код (находится на странице index.php)

PHP код:
<?php
// Обработка добавления отзыва для товара
    
if (isset($_POST['HiddenReviews']))
        {
            
$Author strip_tags($_POST['Author'], '');
            
//$Author = trim();
            
if ($Author == '')
                
$Author 'Анонимный автор';
            
            
$Text strip_tags($_POST['Text'], '');
            
            if (
$Text == '')
                {
                    
//$AddReviewErrorMessage = 'Текст отзыва не может быть пустым!';
                    
$_SESSION['ReviewErrorCode'] = 1// (1)
                    
                   // die($_SESSION['ReviewErrorCode']);          
                    
header('location:' $_SERVER['HTTP_REFERER'] . '#ReviewErrorMsg'); 
                }
                
                else
                    {
// добавляем отзыв в БД, но только если правильно ввели капчу и текст не пустой
                    
                        
if ($_SESSION['kod'] == $_POST['Captcha'])
                            {
                                
$QueryString "insert into GoodsReviews
                                                (
                                                    Id_Good,
                                                    Author,
                                                    Text
                                                )
                                                
                                            values
                                                (
                                                    "
.$_SESSION['ReviewedGoodId'].",
                                                    '"
.$Author."',
                                                    '"
.$Text."'
                                                )"
;
                                                
                                                
                                                
                                
mysql_query($QueryString);
                                if (
mysql_insert_id() > 0)
                                    {
                                        
$_SESSION['ReviewErrorCode'] = 0;
                                        
header('location:' $_SERVER['HTTP_REFERER'] . '#Review' mysql_insert_id());
                                    }
                                        
                            }
                            
                            else
                                {
                                    
$_SESSION['ReviewErrorCode'] = 2;
                                    
header('location:' $_SERVER['HTTP_REFERER'] . '&WrongCaptcha#ReviewErrorMsg');    
                                };
                                                        
                    };        
        };
?>

С помощью
PHP код:
header('location:' $_SERVER['HTTP_REFERER'] . '#ReviewErrorMsg'); 
мы подключаем содержимое страницы GoodPage.php (переводится как страница товара), куда передаём несколько GET-параметров. Критическая область той страницы имеет такое словесное описание: если $_SESSION['ReviewErrorCode'] равно 1 (чего и должно происходить, ведь до перехода на ту страницу я придал ей значение 1), то с помощью echo вывести строку "Отзыв не может быть пустым!", после чего в надежде на то, что пользователь исправится, сбросить переменную $_SESSION['ReviewErrorCode'] в нуль. В коде это выглядит так (часть страницы GoodPage.php)

PHP код:
<?
// обработка ошибок 
                    // считаем, что 1 - пустой отзыв, 2 - неверная капча, 0 и всё остальное - ошибок нет
                    
                    
                    
                    
                     
if ($_SESSION['ReviewErrorCode'] == )
                        {
                            
                            
//die('=======================');
                            
                            
echo 'Отзыв не может быть пустым!';
                            
$_SESSION['ReviewErrorCode'] = 0// (*)
                        
}
                        
                        elseif (
$_SESSION['ReviewErrorCode'] == 2)
                            {
                                echo 
'Введённые символы неверны. Попробуйте ещё раз';
                                
$_SESSION['ReviewErrorCode'] = 0;
                            }
                            
                        else
                            {
                                
                            };

?>
Вот здесь-то и возникает проблема. Дело в том, что этот if не выполняется (насколкьо я понимаю). В этом виню строку
PHP код:
$_SESSION['ReviewErrorCode'] = 0
Если раскоментировать строку //die('======================='); перед эхо, то становится видно, что if выполняется. Но, если не убирать этот комментарий у строки этой, а перед условным оператором вывести значение переменной $_SESSION['ReviewErrorCode'] с помощью die, то можно увидеть, что она равна нулю, хотя ей собственноручно было присвоено значение 1. То есть, получается, что строка
PHP код:
$_SESSION['ReviewErrorCode'] = 0
влияет на то, что написано ДО НЕЁ. как такое может быть, вообще не понимаю. Прошу помощи. (может, я чего-то просто не вижу?)

Последний раз редактировалось Вадим Мошев; 17.12.2012 в 20:37.
Вадим Мошев вне форума Ответить с цитированием
Старый 17.12.2012, 20:47   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

1. стартовать сессию надо! session_start() в начале каждой страницы где пользуешь сессию
2.
Код:
header('location:' . $_SERVER['HTTP_REFERER'] . '#ReviewErrorMsg');
это перенаправленные но никак не подключение.... и ваще немного .. скорее много всего корявого .. хотя мысль юзать сессии для передачи кода ошибки - приемлема
ADSoft вне форума Ответить с цитированием
Старый 17.12.2012, 22:05   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
1. стартовать сессию надо! session_start() в начале каждой страницы где пользуешь сессию
Я стартую сессию, я забыл об этом написать. Сессия стартуется у меня на Index'e, все остальные страницы инклюдятся туда, так что session_start() распространяется всюду. Кроме того, на странице GoodPage.php у меня используются и другие сессионные параметры, с которыми всё хорошо.

Цитата:
и ваще немного .. скорее много всего корявого .. хотя мысль юзать сессии для передачи кода ошибки - приемлема
Не понимаю, что ты имеешь в виду.
Ессть способ сделать это всё через GET параметры, более того, у меня аналогичная задача уже решена на ура, но мне бы, во-первых, хотелось бы разобраться, почему здесь ничего не работает, во-вторых, через GET-параметры это не совсем красиво, ИМХО.

Только что попробовал вызвать session_start() на GoodPage.php - не помогло

Последний раз редактировалось Вадим Мошев; 17.12.2012 в 22:11.
Вадим Мошев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение значения. ImmortalAlexSan Общие вопросы .NET 4 03.10.2012 11:48
Присвоить разные значения параметру при вставке записи в базу Gover БД в Delphi 3 19.04.2010 21:37
присвоение значения Stjernen Microsoft Office Excel 5 04.01.2010 14:44
Результат до определенного значения и не выше. mato Общие вопросы C/C++ 8 04.12.2009 16:07
Подскажите, что неверно написано?.. katris Помощь студентам 0 25.10.2009 16:11