【问题标题】:Pass variables from one table to another in another PHP page [duplicate]将变量从一个表传递到另一个 PHP 页面中的另一个 [重复]
【发布时间】:2017-04-11 22:44:53
【问题描述】:

我正在学校做一项作业,我们应该模拟一个网络零售商店,该商店通过 PHP 将产品从数据库发送到最终用户。然后,用户应该能够通过复选框将产品添加到购物车,然后按一个按钮将它们带到购物车,其中只有产品表中的选定项目应该显示。

我已经取得了一些很大的进步,但我被困在这个很小的问题上,即:我无法弄清楚如何在表格中呈现所选项目。让我向您展示我的产品表现在的样子:

还有代码:

<form action="selected_products.php" method="POST">
<table>
    <tr>
        <th>Select</th>
        <th>Product-ID</th>
        <th>Product Name</th>
        <th>Price SEK</th>
    <tr>

<?php
// Print out all entries in a table
foreach ($rows as $value) {
    extract($value);

    echo "<tr><td><input type='checkbox' name='SelectedData[]' alt='Checkbox' value='$id&$name&$price'></td>";
    echo "</td><td>".$id.'';
    echo "</td><td>".$name.'';
    echo "</td><td>".$price.'';
    echo "</td></tr>";
}
?>
</table>
<br>
<input type="submit" value="Add to cart" />
</form>

当用户选择带有复选框的产品并按下按钮时,它会将它们带到selected_products.php 页面,如下所示:

还有代码:

<table>
    <tr>
        <th>Product-ID</th>
        <th>Product Name</th>
        <th>Price SEK</th>
    <tr>
<?php
if(!empty($_POST['SelectedData'])) {
    foreach($_POST['SelectedData'] as $selected) {
            echo "<tr><td>".$selected.'';
            echo "</td></tr>";
    }
}
?>

所以,我的问题是:如何让选定的产品填满整个表格,而不是像现在这样被塞进一列?我确实使用value='$id&amp;$name&amp;$price' 传递它,但是如何使这个值字符串将每个条目放在selected_products.php 页面上的相应列中?

【问题讨论】:

  • 你需要通过explode函数拆分字符串,但是如果你的产品名称是L&amp;T或者H&amp;P呢?
  • value='$id|$name|$price'
  • 不要使用“&”,就像@mplungjan说的那样,使用管道“|”用于内爆一组值。
  • 我建议使用自定义分隔符,而不是像 &amp;| 等单个字符,例如 ~!~

标签: php html mysql


【解决方案1】:

正如 cmets 中已经回答的那样,您可以使用 explode() 来解决这个问题。

foreach($_POST['SelectedData'] as $selected) {
    list($id, $name, $price) = explode("&", $selected);
    echo "<tr><td>".$id.'';
    echo "</td><td>".$name.'';
    echo "</td><td>".$price.'';
    echo "</td></tr>";
}

但这是一个相当糟糕的主意,因为它允许每个人随心所欲地填充它。这是因为每个人都可以发送包含他们想要的任何内容的发布请求。更好的方法是将 selected 设置为项目的 id,然后使用项目的 id 再次从数据库中读取您需要的数据。这样只能显示数据库中的项目。

【讨论】:

  • 谢谢大家!我以前读过有关 explode 的文章,但我不确定如何使用它,或者它是否适用于我的项目。再次感谢大家!
【解决方案2】:

在 & 处分割你的字符串。

explode("&",$selected);

这将创建一个单独保存值的数组。

[0] => 3
[1] => Samsung 960 Pro
[2] => 3150

你的项目看起来不错;)

更新: 就像@mplungjan 说的:使用管道分隔值。那就去吧

explode("|", $selected);

【讨论】:

  • 除非他有一台 AT&amp;T 电脑 - 请注意我 10 分钟前评论过这个
  • 没错。他应该关心这个——但这就是他所要求的答案。
  • 所以将其标记为我给出的评论中链接的副本
猜你喜欢
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多