繁体   English   中英

PHP foreach构造混乱

[英]PHP foreach Construct Confusion

我很难绕过foreach结构。 我当然找到了很多例子,但是我似乎永远无法使它们适应我的需求。

请考虑我有这个工作示例:

我正在以HTML形式收集两个日期:

<form method="post">
    <legend>Minutes and Records</legend>

    <label for="FirstAGMDate">First AGM Date (only if known)</label>
    <input type="text" name="FirstAGMDate" value="2014-01-01" />

    <label for="MinutesInspectedFromDate">Minutes Inspected From Date</label>
    <input type="text" name="MinutesInspectedFromDate" value="2014-01-02" />

    <input type="submit" name="submit" />
</form>

在提交时,将使用PDO准备好的语句将值推送到mysql数据库:

if (isset($_POST['submit'])) {
    $sql = "UPDATE jobsinglevalues SET Date = :FirstAGMDate WHERE FormId = 0; 
            UPDATE jobsinglevalues SET Date = :MinutesInspectedFromDate WHERE FormId = 1;";
    $sth = $db->prepare($sql);
    $sth->execute(array(':FirstAGMDate'=>($_POST['FirstAGMDate']), ':MinutesInspectedFromDate'=>($_POST['MinutesInspectedFromDate'])));
}

这没有问题,但是当我需要为十几个输入重复此操作时,它并不是很聪明。 我要做的是仅用一行sql来实现; 为每个<input type="text" name="Value" />循环。

如何将其放入foreach循环?

在我的脑海中,它的工作方式如下:

提交时,每个输入都会更新基于FormId的数据库中的值,该值将从0开始的每个循环递增FormId不是主键,它仅反映表单元素的显示顺序。

更新-工作示例

if (isset($_POST['submit'])) {
$FormId = 0;
    foreach($_POST['Value'] as $avalue){
        $sql = "UPDATE jobsinglevalues SET Date = :Value WHERE FormId = :FormId";
        $sth = $db->prepare($sql);
        $sth->execute(array(':Value'=>($avalue), ':FormId'=>($FormId)));
        ++$FormId;
    }
}

这似乎在逻辑上对我有效! 正确的解决方案是否相似? 请让我知道是否需要澄清任何事情。

谢谢,

山姆

首先确保发布后所有值都在数组中; 如果您不关心键,则可以使用name="Values[]" ,但是我将使用name="Value[FirstAGMDate]"等,这样我们就知道值属于哪个键。

<form method="post">
    <legend>Minutes and Records</legend>

    <label for="FirstAGMDate">First AGM Date (only if known)</label>
    <input type="text" id="FirstAGMDate" name="Value[FirstAGMDate]" value="2014-01-01" />

    <label for="MinutesInspectedFromDate">Minutes Inspected From Date</label>
    <input type="text" id="MinutesInspectedFromDate" name="Value[MinutesInspectedFromDate]" value="2014-01-02" />

    <input type="submit" name="submit" />
</form>

现在,我们可以处理发布的值数组。 如果我们想对键做一些事情,可以使用foreach($_POST['Value'] as $akey => $avalue) ,如果我们只对值感兴趣,那么可以使用foreach($_POST['Value'] as $avalue)就足够了。

$sql = "UPDATE jobsinglevalues SET Date = :Value WHERE FormId = :FormId;";
$sth = $db->prepare($sql);
foreach($_POST['Value'] as $akey => $avalue) {
    $sth->execute(array(':Value' => $avalue, ':FormId'=> $FormId ));
    ++$FormId;
}

[edit]根据@AravindKishore的编辑建议,创建准备好的语句最好在循环之前完成。 准备一次,永远享受。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM