【问题标题】:PHP for loop iteration for $_SESSION variablePHP for 循环迭代 $_SESSION 变量
【发布时间】:2015-04-23 14:57:41
【问题描述】:

我有一个电子邮件脚本,它分为 3 个部分,最后分别发送三封电子邮件。其中一封电子邮件有用户指定的字段数,for 循环获取字段数,适当地循环表格内容。本质上,我需要像这样迭代 for 循环内的内容:

for ($i = 1; $i <= $_SESSION['ct']; $i++) {

$_SESSION['sec4_fieldname_' .$i] = $_REQUEST['sec4_fieldname_' . $i];
$_SESSION['sec4_othername_' .$i] = $_REQUEST['sec4_othername_' . $i];
$_SESSION['sec4_finalname_' .$i] = $_REQUEST['sec4_finalname_' . $i];
}

有没有办法正确地迭代到会话的名称? 其中 fieldname 是要循环的字段之一的名称,以及下面的字段。 $_SESSION['ct'] 是根据用户的决定需要循环的次数

我 - 知道 - 这不是正确的语法。有没有人能帮助我理解如何做到这一点?如果不是这样,正确的做法是什么?

【问题讨论】:

  • 你应该使用数组,所以输入名称是name="sec4_fieldname[]"。容易得多。
  • 我很难理解这件事的背景。能举个例子和解释吗?
  • 您能否提供 $_REQUEST 或提交的 FORM 数据的示例输出?
  • 表单数据只是一个带有标题的简单表格,for 循环中的数据为创建的每个用户字段填充新行。由于表单共有三页,我已根据客户所在的页面将其合并为一个脚本。因此,我不得不使用会话变量来存储以前的页面信息,以便它们都可以正确输入到电子邮件中并发送出去。电子邮件中的所有内容都可以正常工作,除非是这个 for 循环。每个新字段都会获得 +1。所以最初只有 sec4_fieldname_1。但它会随着每增加一个用户而增加。
  • 这个我也不懂。 正确迭代会话名称是什么意思?

标签: php forms email session


【解决方案1】:
<html>
<body>
<form>
<input name="sec4[fieldname][]" value="fieldl">
<input name="sec4[othername][]" value="otherr">
<input name="sec4[finalname][]" value="finan">
</form>
</body>
</html>

这是通过 POST/GET/REQUEST 发送到 PHP 文件:

<?php
session_start();
foreach ($_REQUEST['sec4'] as $outerRowKey => $outerRowVal){
    // In this foreach loads all the values 
    // listed above in the HTML.
    // please note the IF clause is simply to only deal with the
    // array values and leaves the string values untouched. 
    if(is_array($outerRowVal)){
        foreach ($outerRowVal as $innerRowKey => $innerRowVal){
            //In this foreach loads the 'fieldname' or
            // 'othername' or 'finalname' arrays in turn
            // and saves its data to the session. 
            $_SESSION['sec4'][$outerRowKey][] = $innerRowVal;
            }
     unset($innerRowKey,$innerRowVal);
    }
 }
 unset($outerRowKey, $outerRowVal);

这将为您提供一个 $_SESSION 结构:

$_SESSION['sec4']['fieldname'][0] = "fieldl"
$_SESSION['sec4']['fieldname'][1]
$_SESSION['sec4']['fieldname'][2]
$_SESSION['sec4']['fieldname'][...]

$_SESSION['sec4']['othername'][0] = "other"
$_SESSION['sec4']['othername'][1]
$_SESSION['sec4']['othername'][2]
$_SESSION['sec4']['othername'][...]

$_SESSION['sec4']['finalname'][0] = "finan"
$_SESSION['sec4']['finalname'][1]
$_SESSION['sec4']['finalname'][2]
$_SESSION['sec4']['finalname'][...]

您当然可以自己调整结构,但关键是使用输入名称部分末尾的[] 语法将其设置为数组值,并在发送到$_POST 时附加/$_REQUEST 供 PHP 脚本使用的数组。使用 Foreach 你就不需要关心有多少,因为它们都被平等对待。

与在数字循环中手动编辑键值相比,这是一种更整洁、更灵活的解决方案。这也意味着,如果您在表单输入中添加或删除值,那么 PHP 代码仍然可以完美运行。

要使用您的上述代码, 不改变方法,只是为了改进代码的执行(以及使其更具可读性),试试这个:

注意: 这不如使用数组。这类问题是数组最擅长处理的问题。

for ($i = 1; $i <= $_SESSION['ct']; $i++) {
    $a = 'sec4_fieldname_' .$i;
    $b = 'sec4_othername_' .$i;
    $c = 'sec4_finalname_' .$i;
    $_SESSION[$a] = $_REQUEST[$a];  
    $_SESSION[$b] = $_REQUEST[$b];
    $_SESSION[$c] = $_REQUEST[$c];
    }
unset($a,$b,$c,$i);

【讨论】:

  • 我有一种烦人的感觉,我的 foreach 循环缺少一些东西:-/
  • 非常感谢这个..!这正是我正在寻找的。​​span>
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2020-05-19
  • 2017-02-09
  • 1970-01-01
相关资源
最近更新 更多