在SESSION变量(php)中构建字符串数组


building an array of strings in a SESSION variable (php)

我有一个页面(dest.php)作为php会话的一部分,每次在另一个页面(source.php)上的表单提交给这个,我需要从POST添加字符串作为$_SESSION变量中的另一个元素。

所以我的想法是,我将得到几个POST变量(['name'], ['gender']等),并需要将它们添加到相应的$_SESSION变量数组,所以第一次提交表单,我将有$_SESSION['name'][0] = $_POST['name']和每个后续提交从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']数组打印,如果它只是一个大字符数组

简化。不需要if s和else s:

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

需要确保$_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);
}