【问题标题】:foreach statements and setting variables to use outside of loopforeach 语句和设置变量以在循环外使用
【发布时间】:2015-08-18 11:36:53
【问题描述】:

我创建了一个foreach 语句,它将访问 MySQL 数据库,并将在列表中显示数据库中每个人的用户名和 ID —— 没问题。每个人旁边的按钮都会显示 ID 号——那里没问题。但是,当我按下按钮时,它将返回最后一个人的值,在这种情况下是 30,而不是数字 1 或我按下的按钮的任何数字。

我认为这是因为在显示页面时,它会将 ID 分配给循环的每个传递的变量,因为它正在显示。

$ID 将设置为最后一个,因为在显示页面时,它会遍历列表中的每个人,然后在最后一个选项中结束,仅在显示页面时。因此,当我按下按钮时,$ID 当然会设置为 30,因为它必须计数到这个值才能看到它。这就是我遇到的问题。当我按下按钮时,我希望将 Session['id'] 设置为当时 $ID 设置的值,而不是页面完成显示后 $ID 设置的值。

<?php
include 'connect.php';

foreach($db->query("SELECT * FROM Staff") as $row) {
    $ID = $row['id']
    Echo $row['id'];
    Echo $row['FirstName'];
    Echo $row['LastName'];
?> 


<button Class="link" id="OpenUp"><?php echo $id; $_SESSON['id'] = $id; ?></button>
<?php } ?>

【问题讨论】:

  • 在 foreach 之前定义 $ID,现在 $ID 只存在于 foreach 范围内。而且$ID 不等于$id。变量区分大小写。
  • 你为什么要使用会话?按下按钮时会激活什么功能?

标签: php mysql loops variables foreach


【解决方案1】:

您的代码将始终将 $_SESSION['id'] 设置为您的最后一个值。

您可以在循环之前启动一个表单并使用这段代码而不是按钮

<input type="submit" name="setsessionid" value="<?php echo $row['id']; ?>" />

之后,您所要做的就是使用

将变量设置为 $_SESSION['id']
<?php if(isset($_POST['setsessionid']) { $_SESSION['id'] = $_POST['setsessionid']; } ?>

【讨论】:

  • 使用表单的问题是它会发布到不同的页面。虽然我已经把它设置得很好,但我的经理想要一个弹出窗口。 “OpenUp” id 将在点击时使用 JavaScript 更改页面的 CSS。在页面中心打开一个窗口,该窗口将根据按下的按钮显示结果。他们是一种让表单发布到同一页面而不加载新页面的方法吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2022-08-11
  • 2021-09-07
  • 2012-11-11
  • 2014-04-07
  • 2023-04-06
  • 2013-11-29
相关资源
最近更新 更多