2011-12-21 3 views
2

У меня есть сеанс, который я использую для хранения элементов в форме, которая накапливается пользователем до тех пор, пока пользователь не захочет перейти к проверке. Это немного похоже на корзину, где элементы можно добавлять из формы.

Логическая разбивка кода:

  1. Page нагрузки, сессия начинается
  2. Если $ _SESSION [ 'набор'] не установлен, то установите его в TRUE.
  3. Показать остальную страницу и форму.
  4. Пользователь нажимает кнопку «Добавить другой элемент».
  5. Данные страницы отправляются самому себе
  6. Проверка страниц, которые установлены $ _SESSION ['set'] = Истина и $ _POST ['add_item'].
  7. Страница создает переменные сеанса в массиве и добавляет опубликованные значения к этим сеансам. приращения Page
  8. $ _SESSION [ «tariff_count»], если еще необходимо добавить

Проблема заключается в том, что мой код не ведет себя, как это должно быть. Когда я нажимаю кнопку «Добавить новый тариф», первый раз, когда он не попадает в мою функцию if. Это нужно немедленно поймать. Однако, когда я иду и снова нажимаю кнопку, он, наконец, работает и добавляет элемент в мою сессию.

Вот код:

//start a session to remember tariff items 
session_start(); 

//testing the session array 
print_r($_SESSION); 

//destroy session if this character is found in URL string 
$des = $_GET['d']; 
if($des == 1) 
{ 
    session_destroy(); 
} 

//checks to see if session data has been set 

//if a session variable count is set then 
if ($_SESSION['set'] == TRUE) 
{ 
    //perform a check to ensure the page has been called by the form button and not been accidently refreshed 
    if(isset($_POST['add_tariff'])) 
    { 
    //if user clicks Add another tariff button then increase tariff count by one 

    //temp variable set to the current count of items added 
    $count = $_SESSION['tariff_count']; 
    $_SESSION['tariff_name'][$count] = $_POST['tariff_name']; 
    $_SESSION['tariff_net'][$count] = $_POST['tariff_net']; 
    $_SESSION['tariff_inclusive'][$count] = $_POST['tariff_inclusive']; 
    $_SESSION['tariff_length'][$count] = $_POST['tariff_length']; 
    $_SESSION['tariff_data'][$count] = $_POST['tariff_data']; 
    //increment tariff count if more data needs to be added to the sessions later. 
    $_SESSION['tariff_count']++; 
    } 
} 
//if no session data set then start new session data 
else 
{ 
    echo "session set"; 
    $_SESSION['set'] = TRUE; 
    $_SESSION['tariff_count'] = 0; 
} 

код, кажется, жульничество моих массивов данных Sesssion. Все мои добавленные элементы в сеансе отображаются в таблице.

Однако, если моя таблица показывает шесть элементов, если я делаю print_r сеанса, она показывает только 4 элемента в массиве? Я проверил его, чтобы убедиться, что я не перепечатываю те же экземпляры в массиве.

Здесь находится print_r массива, который показывает шесть строк, но в этом массиве всего четыре строки?

[tariff_count] => 5 [tariff_name] => Array (
    [0] => STREAM1TARIFF [1] => STREAM1TARIFF [2] => CSS [3] => CSS [4] => CSS 
) 

У меня есть снимок экрана, а также, чтобы показать эту странную проблему

http://i.imgur.com/jRenU.png

Примечание Я вторит из «Истинное значение = 6», но в print_r сессии это только 5 , поэтому в моем коде отсутствует один экземпляр (n-1).

Вот мой код, который печатает все экземпляры в массивах сеансов, у меня есть чувство проблемы в несоответствии вызвано "< =" сравнение?

if(isset($_SESSION['tariff_count'])) 
{ 
    for ($i = 0; $i <= $count; $i++) 
    { 
    echo "<tr>"; 
    echo "<td>".$_SESSION['tariff_name'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_net'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_inclusive'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_length'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_data'][$i]."</td>"; 
    echo "</tr>"; 
    } 
} 

Вставить бен РНР страницы - http://pastebin.com/petkrEck

Любые идеи, почему мое заявление Если не поймать событие, когда пользователь нажимает клавишу «Добавить другой тариф» кнопку в первый раз, когда она нажата, но затем обнаруживает это потом?

Спасибо за ваше время

С Рождеством!

+0

Пожалуйста, вы можете также показать HTML формы и любые Javascript, связанные с тем, как он получает представленный? – DaveRandom

+0

@DaveRandom - ссылка pastebin http://pastebin.com/petkrEck – kaleeway

+0

@loosebruce: Это не тот ответ, который вы ищете, но ваш массив имеет нулевой индекс. Если вы внимательно посмотрите, часть, когда вы разместили «[тариф_касс.] => 5' (из вашего print_r), на самом деле в массиве есть 5 элементов (0, 1, 2, 3, 4). – netcoder

ответ

3

Проблема заключается в том, что ваш поток кода. В упрощенном псевдокоде, вы делаете это:

if (session is not initialized) { 
    set = true 
    count = 0; 
} else { 
    add posted data to session 
} 

На первом «добавить пункт» вызов, сеанс не настроен, так что вы создали сессию. И ТОГДА ИГНОРИРОВАТЬ ПОЧТОВЫЕ ДАННЫЕ.

Поток код должен быть:

if (session is not initialized) { 
    set = true; 
    count = 0; 
} 

if (posting data) { 
    add data to session 
} 
+1

большое вам спасибо! Я исправил его, и теперь он работает после первого щелчка! Приятного Рождества! – kaleeway

Смежные вопросы