2016-07-02 2 views
0

У меня есть страница (dest.php) как часть сеанса php, каждый раз, когда форма на другой странице (source.php) отправляется на этот файл, Мне нужно добавить строки из POST в качестве другого элемента в переменной $_SESSION.Создание массива строк в переменной SESSION (php)

Так что идея состоит в том, что я получу несколько POST переменные (['name'], ['gender'] и т.д.) и их необходимо добавить в соответствующие $_SESSIONпеременных массивов, поэтому в первый раз форма представляются, я буду $_SESSION['name'][0] = $_POST['name'] и каждый последующий submit from source.php отправит новые переменные $_POST, а на dest.php мне нужно добавить в массивы $_SESSION такие, что end($_SESSION['name']) = $_POST['name'] всегда.

У меня есть некоторый php позже в dest.php, который должен отображать все переменные $_SESSION в таблице, но в настоящее время он обрабатывает некоторые строки, отличные от других.

<table>  
<?php 
for($cntr = 0; $cntr < count($_SESSION['name']); $cntr++) 
{ 
    echo '<tr><td><input type="button" name="' . $cntr . '" value="edit"></td><td>'; 
    echo $_SESSION['name'][$cntr] .' adopted a ' . $_SESSION['gender'][$cntr] . ', ' . $_SESSION['colors'][$cntr]; 
    echo $_SESSION['species'][$cntr] . ' when visiting ' . $_SESSION['city'][$cntr] . '!' ; 
    echo '</td></tr>'; 
} 
?> 
</table> 

Для справки, форма:

<form action="petSentence.php" method="POST" accept-charset="UTF-8"> 
    <table><tr><td> 
    Your name: <input type="text" name="name"></td></tr><tr><td> 
    <bold>Pick a city</bold></br> 
     <input type="radio" name="city" value="Portland"> Portland<br> 
     <input type="radio" name="city" value="Seattle"> Seattle<br> 
     <input type="radio" name="city" value="Corvallis"> Corvallis</td><td> 
    <bold>Pick the color(s)</bold> 
     <input type="checkbox" name="colors[]" value="brown"> brown<br> 
     <input type="checkbox" name="colors[]" value="red"> red<br> 
     <input type="checkbox" name="colors[]" value="green"> green<br> 
     <input type="checkbox" name="colors[]" value="blue"> blue</td></tr> 
    <tr><td> 
    Gender: <select name="gender"> 
     <option value="male">Male</option> 
     <option value="female">Female</option> 
    </select></td><td> 
    What Species: 
     <select name="species"> 
     <option value="cat">cat</option> 
     <option value="dog">dog</option> 
     <option value="bird">bird</option> 
     <option value="chinchilla">chinchilla</option> 
    </select></td></tr> 
    <tr><td><input type="submit" value="Submit"></td></tr> 
    </table> 
</form> 

и пример того, как я построения $_SESSION массивы:

if(isset($_SESSION['name'])) 
{ 
    array_push($_SESSION['name'], $_POST['name']); 
} 
else 
{ 
    $_SESSION['name'] = $_POST['name']; 
} 
if(isset($_SESSION['gender'])) 
{ 
    array_push($_SESSION['gender'], $_POST['gender']); 
} 
else 
{ 
    $_SESSION['gender'] = $_POST['gender']; 
} 

За исключением переменной ['name'] печатает, как ожидают, но массив ['gender'] печатает, как будто это просто большой массив символов.

+0

Упрощение: '$ _SESSION [ 'имя'] [] = $ _POST [ 'имя'];' и т.д ... – AbraCadaver

+0

я на самом деле не было попробовать, что в одном итерация, но это не устранило основную проблему, поэтому я придерживался того, что у меня уже было, до тех пор, пока не исправит проблему, тогда я буду беспокоиться об упрощениях/оптимизации. – Keith

+0

@AbraCadaver, если вы напишете это как ответ, я сразу приму это. Я вернулся, чтобы попробовать это упрощение, и это вызвало проблемы, пока я не закончил сессию и не начал ее, теперь она отлично работает. 'array_push()' толкает c-строку (эффективно), но ваше упрощение нажимает строку на один элемент. – Keith

ответ

2

Упростить. Нет необходимости для if с и else с:

$_SESSION['name'][] = $_POST['name']; 
$_SESSION['gender'][] = $_POST['gender']; 
+0

Желательно ли это делать, продолжать добавлять переменную сеанса из формы submit? – PRYM

+0

Зависит. Я думаю, что корзина или многостраничный тест или что-то еще. – AbraCadaver

+0

Вероятно, если бы на сервере были потенциальные риски памяти, в определенный момент вы должны были заполнять db, но это было небольшое задание для класса, в котором задача состояла в том, чтобы данные сохранялись во время сеанса, поэтому он работает для меня, где нет риска какого-либо массового населения – Keith

1

Вы должны убедиться, что $_SESSION["gender"] и $_SESSION["name"] изначально создаются как массивы. Вы также должны убедиться, что они не только установлены, но и массивы, прежде чем добавить:

например.

function append_to_session_array($var_name) 
{ 
    if (is_array($_SESSION[$var_name])) 
    { 
    $_SESSION[$var_name][] = $_POST[$var_name]; 
    } 
    else 
    { 
    $_SESSION[$var_name] = array($_POST[$var_name]); 
    } 
} 

foreach (array("gender","name") as $v) 
{ 
    append_to_session_array($v); 
} 
Смежные вопросы