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

Форум PHP

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

 

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

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

тема: Помогите узнать почему не работает скрипт, использующий сессии
 
 автор: VYB   (08.09.2007 в 18:18)   письмо автору
 
 

Здравствуйте!
Мне надо написать простенький скрипт-тест.В одном файле.Я решил сделать его на сессиях.Там в форме просто менять от значения номера вопроса сами вопросы и ответы,суммировать значения,хранить в сессии, а потом вывести результат.Но почему-то не работает-все время один и тот же вопрос и ответы,хотя значение номера вопросов изменятеся,как и должно...
Помогите пожалуйста!
Код файла ниже:

<?php
session_start
();
if(!isset(
$_SESSION['i'])) {$i=1;}
else {
$i=$_SESSION['i'];
unset(
$_SESSION['i']);
}
$_SESSION['i']=$i;
if(isset(
$_POST['ok']))
{
    
$sum=$_POST['answer'];
    
$_SESSION['sum']+=$sum;
    
$i++;
    
$_SESSION['i']=$i;
    
}
switch (
$_SESSION['i'])
        {
            
            case 
1:
            unset(
$_SESSION['question']);
            unset(
$_SESSION['answers']);
            
            
$_SESSION['question']="Чем вы руководствуетесь, выбирая что-то в магазине?";
            
$_SESSION['answers']= "<input type=\"radio\" name=\"answer\" value=\"4\" >\n"
                                 
."Ценой<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"3\">\n"
                                 
."Вкусом,желанием<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"2\">\n"
                                 
."Советом </td>\n";

            case 
2:
            unset(
$_SESSION['question']);
            unset(
$_SESSION['answers']);
            
            
$_SESSION['question']="Какой подарок радует вас больше?";
            
$_SESSION['answers']= "<input type=\"radio\" name=\"answer\" value=\"4\" >\n"
                                 
."Красивый<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"2\">\n"
                                 
."Дорогой<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"3\">\n"
                                 
."Оригинальный </td>\n";


            case 
3:
            unset(
$_SESSION['question']);
            unset(
$_SESSION['answers']);
            
            
$_SESSION['question']="У вас есть возможность сменить гардероб.<br>По какому принципу будете выбирать одежду?";
            
$_SESSION['answers']= "<input type=\"radio\" name=\"answer\" value=\"2\" >\n"
                                 
."Любимых цветов<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"4\">\n"
                                 
."Самое модное<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"3\">\n"
                                 
."Что к лицу </td>\n";

            case 
4:
            unset(
$_SESSION['question']);
            unset(
$_SESSION['answers']);
            
            
$_SESSION['question']="Ваш заказ в ателье выполнен.<br>Но оказалось,одежда вам не идет,как поступите?";
            
$_SESSION['answers']= "<input type=\"radio\" name=\"answer\" value=\"3\" >\n"
                                 
."Постараюсь подправить<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"4\">\n"
                                 
."Уберу в шкаф,чтобы не расстраиваться<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"2\">\n"
                                 
."Предложу знакомым </td>\n";
            case 
5:
            unset(
$_SESSION['question']);
            unset(
$_SESSION['answers']);
            
            
$_SESSION['question']="У мужа костюм в мелкую полоску.<br>Какую рубашку ему выберите?";
            
$_SESSION['answers']= "<input type=\"radio\" name=\"answer\" value=\"3\" >\n"
                                 
."В полоску<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"4\">\n"
                                 
."Однотонную<br>\n"
                                 
."<input type=\"radio\" name=\"answer\" value=\"2\">\n"
                                 
."Модную клетчатую в подходящей гамме </td>\n";

            
            case 
6:
            if(isset(
$_SESSION['sum'])){
            if(
$_SESSION['sum']>10&&$_SESSION['sum']<13$res="Вы слишком самокритичны!";
        if(
$_SESSION['sum']>14&&$_SESSION['sum']<17$res="Самоуверенности у вас не отнять.";
        if(
$_SESSION['sum']>18&&$_SESSION['sum']<20$res="Не кажется ли вам, что вы немного более уверены в себе,чем следовало бы?";
        echo 
$res;
        exit();
            }
            
            
        }
print 
"<form action=\"\" method=\"post\">\n";
print 
"<table width=\"44%\" border=\"1\" cellspacing=\"1\" cellpadding=\"1\" height=\"165\">\n";
print 
"  <tr> \n";
print 
"    <td width=\"28%\">Вопрос №".$_SESSION['i']."</td>\n";
print 
"    <td width=\"72%\">".$_SESSION['question']."</td>\n";
print 
"  </tr>\n";
print 
"  <tr> \n";
print 
"    <td width=\"28%\" height=\"96\">Ответ</td>\n";
print 
"    <td width=\"72%\" height=\"96\"> \n";
print 
$_SESSION['answers'];
print 
"  </tr>\n";
print 
"  <tr> \n";
print 
"    <td colspan=\"2\" height=\"32\"> \n";
print 
"      <div align=\"center\">\n";
print 
"        <input type=\"submit\" name=\"ok\" value=\"Ответить\">\n";
print 
"      </div>\n";
print 
"    </td>\n";
print 
"  </tr>\n";
print 
"</table>\n";
print 
"</form>\n";
    
?>

   
 
 автор: Trianon   (08.09.2007 в 18:30)   письмо автору
 
   для: VYB   (08.09.2007 в 18:18)
 

Я вижу, что у Вас
а) полно неопределенных переменных,
и б) отсутствуют break; перед очередными case: А значит происходит fallthrough из одной ветви в другую и так до самого конца.

   
 
 автор: Trianon   (08.09.2007 в 18:34)   письмо автору
 
   для: Trianon   (08.09.2007 в 18:30)
 

Кроме того, такое замечание по паттерну.
Вы очень часто дергаете суперглобапльный массив SESSION безо всякой надобности.
Меж тем вполне достаточно на входе в скрипт данные из него изъять, а перпед окончанием построения страницы - вернуть. Два обращения. И никакой путаницы.

Кстати, в Вашем случае ни кукисы ни сессии вообще не нужны.
Количество накопленных очков и номер шага легко передаются скрытыми полями формы.

   
Rambler's Top100
вверх

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