【问题标题】:Passing all values into one variable then split them [duplicate]将所有值传递给一个变量然后拆分它们[重复]
【发布时间】:2019-09-28 20:34:21
【问题描述】:

您好,对于我正在设计的网站,我被要求使用 mal 的电子商务作为支付网关。我一直在尝试设置他们拥有的远程呼叫功能,以便在购买后它会回电到我的网站以运行脚本并发送电子邮件确认他们的订单。

然而,事实证明这非常令人沮丧,因为我存储的会话变量不会通过远程调用传递,只有它们允许的某些值。

我尝试将它们全部存储在一个数组中,并将它们放入我可以更改的值之一,称为 sd:

$cart =array($_SESSION["date"], $_SESSION["name"], $_SESSION["email"], $_SESSION["number"], $_SESSION["address"], $_SESSION["town"], $_SESSION["postcode"],
$_SESSION["county"], $_SESSION["cake_type"], $_SESSION["collection"], $_SESSION["icingColour"], $_SESSION["trimColour"], $_SESSION["filling"], $_SESSION["wording"],
$_SESSION["cakePhoto"], $_SESSION["price"], $_SESSION["photo"] );

<input type="hidden" name="sd" value="<?php  echo $cart?>">

然后在我的脚本中我尝试了:

$result = $_POST['sd']; 回声 $result[0];

测试一下

但是远程调用只是将值作为“Array”传递,所以 echo $result[0] 只是返回了“A”,这些值只是作为 Array 传递的,并且数组中的任何值都没有被传递。

所以现在我尝试将所有会话变量存储在 sd 值中,如下所示:

<input type="hidden" name="sd" value="<?php  foreach ($_SESSION as $key=>$val) {  echo $val;}?>">

然后我通过在我的脚本上进行测试:

$result = $_POST['sd'];
echo $result;

现在这确实传递了所有值,但显然只是一个大值,有没有办法可以将它们分开?我没有想到的数组有更好的方法吗?任何建议将不胜感激,因为我完全不知所措

编辑:

忘记添加这部分了:

因此,在拆分数组后,我需要单独存储这些值,例如:

$name = 第一个值 $email = 第二个值等

【问题讨论】:

  • 副本有很多实现这个结果的好方法。
  • 我已经添加了更多,因为我需要的不是重复我不认为,我知道如何获取值,然后我需要能够再次单独存储它们
  • 如果您使用(例如)第二个答案中的json_encode 方法,则可以使用json_decode 重新创建原始$cart 数组。就我个人而言,我会使用关联数组来更轻松地获取值,例如$cart =array('date' =&gt; $_SESSION["date"], 'name' =&gt; $_SESSION["name"], 'email' =&gt; $_SESSION["email"], ...);
  • 好的,谢谢,我会试试的
  • 您好,我只想说使用 json 编码和解码效果很好,感谢您的建议!让这项工作得到巨大的缓解

标签: php forms session


【解决方案1】:

尝试将&lt;input type="hidden" name="sd" value="&lt;?php echo $cart?> 更改为

<input type="hidden" name="sd[]" value="<?php  echo $cart?>

或使用serialize() 然后unserialize() 结果。

参考Passing an array using an HTML form hidden element

【讨论】:

    【解决方案2】:

    你可以使用phpimplode和explode函数。
    第一部分是内爆。
    我们使用; 作为内爆分隔符,它使用该分隔符将数组元素连接为单个字符串。

    <input type="hidden" name="sd" value="<?php  foreach ($_SESSION as $key=>$val) {  echo $val.';';}?>">
    

    Explode 使用我们传递的分隔符再次将该字符串转换为数组。

    foreach (explode(';', $_REQUEST["sd"]) as $key) {
            echo $key;
            echo "<br>";
        }
    

    更新:试试这个

    <input type="hidden" name="sd" value="<?php  foreach ($_SESSION as $key=>$val) {  echo $key.';'.$val.';;';}?>">
    

    Explode 使用我们传递的分隔符再次将该字符串转换为数组。

    foreach (explode(';;', $_REQUEST["sd"]) as $key) {
            echo explode(';', $key)[0];
            echo " = " ;
            echo explode(';', $key)[1];
            echo "<br>";
        }
    

    【讨论】:

    • 谢谢你,我想也许我的问题没用好,有没有办法在explode function $name =第一个值,$email =第二个值等之后做一些事情?
    • @LewisRoss 查看更新后的答案
    • 有没有办法实际存储这些值?就像这部分一样 echo explode(';', $key)[1];是否可以分别存储这些值,所以获取第一个 $key[1] 值并将其存储在 $name 中,获取第二个 $key[1] 值并将其存储在 $email 中等等?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2011-12-10
    • 2015-09-13
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多