【发布时间】:2016-11-04 21:03:02
【问题描述】:
我有一个页面 (dest.php) 作为 php 会话的一部分,每次另一个页面 (source.php) 上的表单提交到这个页面时,我需要将 POST 中的字符串添加为$_SESSION 变量中的另一个元素。
所以我的想法是我会得到几个POST 变量(['name']、['gender'] 等)并需要将它们添加到对应的$_SESSION 变量数组中,所以第一次提交表单时,我将拥有 $_SESSION['name'][0] = $_POST['name'] 并且来自 source.php 的每个后续提交都将发送新的 $_POST 变量,并且在 dest.php 上,我需要添加到 $_SESSION 数组,以便 @987654330 @一直都是。
我稍后在 dest.php 中有一些 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['name'][] = $_POST['name'];等... -
我确实在一次迭代中尝试过,但它并没有解决根本问题,所以我坚持我已经拥有的东西,直到我解决问题,然后我会担心简化/优化.
-
@AbraCadaver,如果您将其写成答案,我会立即接受。我回去尝试这种简化,但它导致了问题,直到我结束会话并重新开始,现在它工作得很好。
array_push()正在推送一个 c 字符串(有效),但您的简化是将一个字符串推送到单个元素。