У меня есть страница (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']
печатает, как будто это просто большой массив символов.
Упрощение: '$ _SESSION [ 'имя'] [] = $ _POST [ 'имя'];' и т.д ... – AbraCadaver
я на самом деле не было попробовать, что в одном итерация, но это не устранило основную проблему, поэтому я придерживался того, что у меня уже было, до тех пор, пока не исправит проблему, тогда я буду беспокоиться об упрощениях/оптимизации. – Keith
@AbraCadaver, если вы напишете это как ответ, я сразу приму это. Я вернулся, чтобы попробовать это упрощение, и это вызвало проблемы, пока я не закончил сессию и не начал ее, теперь она отлично работает. 'array_push()' толкает c-строку (эффективно), но ваше упрощение нажимает строку на один элемент. – Keith