【问题标题】:Pushing value into the session array in php [duplicate]在php中将值推送到会话数组中[重复]
【发布时间】:2016-11-18 11:04:59
【问题描述】:

我有以下代码,用户从下拉列表中选择值。每次提交时,都应将 ID 推送到数组中。

<?php
$_SESSION["test"] = array();
$link = mysql_connect("localhost","root","");
mysql_select_db("dbsikkim",$link);
?>
<form name="form1" method="post" action="">
<?php
$sql=mysql_query("SELECT ID,DOC_DESC FROM gstn_document_type_master",$link);
echo "<select name='doc_type_code2'>";
  if(mysql_num_rows($sql)){
    while($row=mysql_fetch_array($sql)){
       echo "<option value=".$row['ID'].">".$row['DOC_DESC']."</option>";
  }
}
echo "</select>";
?>
<input type="submit" value="Submit" name="submit">
</form>

<?php
if(isset($_POST['submit']))
{
 $_SESSION["test"][] = $_POST['doc_type_code2'];  //ERROR IN THIS LINE

 for ($i=0; $i < sizeof($_SESSION["test"]); $i++) {
                            echo $_SESSION["test"][$i]."<br>";
                            }

}
?>

只有当前值被推入数组并替换前一个值。简而言之,它是作为变量而不是数组工作。

【问题讨论】:

  • 每次单击提交按钮时,页面都会重新加载,并且在页面重新加载时会重新定义变量。失去了它的价值。因此,请尝试使用其他选项,例如 $_SESSION。

标签: php arrays


【解决方案1】:

您很可能需要初始化会话变量。

$_SESSION["test"] 默认不是数组。您可以尝试这样做:

// If the session variable is not yet an array, initialize it
if (!is_array($_SESSION["test"])) {
   $_SESSION["test"] = [];
}

$_SESSION["test"][] = $_POST['doc_type_code2'];

第一行将一个数组分配给您的字段。 第二个为数组赋值。

请注意,您的代码中有几处需要改进。例如,这些天您可以使用 PDO。你也不应该使用“全局”。像这样混合 PHP 和 HTML 代码可能会导致软件难以维护。我不想听起来傲慢,但我强烈推荐你这本书"PHP The right way"

【讨论】:

  • 您不会希望每次都执行$_SESSION["test"] = [];,因为它会重置阵列。像if (!is_array($_SESSION["test"])) $_SESSION["test"] = []; 这样的东西会更合适。
  • 同意@Steve。我会更新我的回复。
  • @Christian 感谢您的回复和宝贵的反馈。但是在这里,我已经将数组声明为 $test = array();在一开始的时候。还有你的 $_SESSION["test"] = [];显示解析错误。
  • @Amir Bhandari 你可能使用的是旧版本的 PHP,试试$_SESSION["test"] = array()。此外,声明$test = array(); 不会影响$_SESSION 变量。
  • 是的,我做到了。现在代码已经修改。它没有显示任何错误,但每次提交时只有一个值传递给数组并替换。
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2017-09-16
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
相关资源
最近更新 更多