【问题标题】:Foreach is taking last item of input text fieldForeach 正在获取输入文本字段的最后一项
【发布时间】:2015-08-17 15:46:58
【问题描述】:

下午好 StackOverflowers,

我有一个非常简单的问题。 (我猜:))

每次我提交包含许多其他输入字段的表单时,它都会使用输入字段的最后一个值。

一个月前我遇到了类似的问题,但我以某种方式解决了它..我无法解决这个问题..

您可以在下面看到我的 HTML 表单。 (没有标记,我知道)

<?php

include_once("database.php");

$sql = "SELECT * FROM statements";
$stmt = $db->prepare($sql);
$stmt->execute();

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
echo "<b>";
echo $row['question'];
echo "<br/></b>";



    $sqlA = "SELECT * FROM question_answer WHERE question_id =" . $row['id'];
    $stmtA = $db->prepare($sqlA);
    $stmtA->execute();
    $rowsA = $stmtA->fetchAll(PDO::FETCH_ASSOC);
        echo "<form id='modify' name='modify' action='modify.php' method='POST'>
        <div id='answers'>";
    foreach($rowsA as $rowa){
        if($rowa['correct_answer'] == 1){

        $rowAnswer = $rowa['answer'];
        $rowId = $rowa['question_id'];
        echo "<input type='text' checked value='" . $rowAnswer . "' name='" . $rowId."' style='background:lightgreen;'><br/>";
        echo "</div>";
    }
    else{
        $rowFalseId = $rowa['question_id'];
        echo "<input type='text' value='" . $rowAnswer . "' name='" . $rowFalseId."'><br/>";
    }




}

}
?>

<input type='submit' name='modify_answers' value="Modify Answers">
</form>

您可以在下面看到我的更新查询;

<?php
include_once("database.php");

// foreach($_POST as $val){
//      print_r($val);

//  }


$sql = "SELECT * FROM statements";
$stmt = $db->prepare($sql);
$stmt->execute();

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){

    $sqlA = "SELECT * FROM question_answer where question_id =" . $row['id'];
    $stmtA = $db->prepare($sqlA);
    $stmtA->execute();
    $rowsA = $stmtA->fetchAll(PDO::FETCH_ASSOC);

    foreach($rowsA as $rowa){
        foreach($_POST as $id => $value){
        $update = "UPDATE question_answer SET answer = '".$value."' WHERE question_id ='". $id."'";
        $stmt = $db->prepare($update);
        $stmt->execute();
    }
}
}
?>

每次提交到 modify.php 文件时,它都会更新输入字段的最后一个值。

例如,如果我有 16 个输入字段,则它采用输入字段的第 4、第 8、第 12 和第 16 个值。

所以问题可能出在输入字段的名称上,但也可能是 modify.php..

如有任何帮助,敬请期待!我正在为这个简单的问题苦苦挣扎:(

提前谢谢大家!!

【问题讨论】:

  • 只打印查询而不是执行,你自己就能解决问题
  • 试过很多次都没有运气:(我很挣扎,但这似乎是一个简单的问题..但它仍然没有解决:(
  • 远离循环更新。而不是循环更新check out multiple updates in one query。这可能会解决你当前的问题。此外,您很容易受到 sql 注入的攻击。
  • @andrew 谢谢!这真的很有帮助,比做单个查询更好:)

标签: php html sql forms pdo


【解决方案1】:

我想我可以看到这里发生了什么。你需要移动这条线...

$rowAnswer = $rowa['answer']; 

... 所以它不属于您的 if 语句(将它们移到上面)。目前,它仅在 $rowa['correct_answer'] == 1 评估为 true 时才被分配。

【讨论】:

  • 不,没有运气:(它仍然是相同的结果..仍然取输入字段的最后一个值。
  • NB 它仍然需要在 foreach 循环中,而不是在 if 中,但我猜你已经做到了。
  • 它是固定的伙计们,我有 $rowa['question_id'] 每次都有相同的数字..这就是问题,我应该得到 id..但无论如何感谢您的帮助!!
【解决方案2】:

这是固定的家伙!感谢您的帮助.. @d0ug7a5 感谢您的回答,这对我有帮助。但我的主要问题是我得到的是 Question_id 而不是 id。谢谢!!

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2016-05-28
    • 1970-01-01
    • 2014-10-30
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多