【问题标题】:Storing values of clicked buttons on arrays在数组上存储单击按钮的值
【发布时间】:2016-06-06 12:48:25
【问题描述】:

我有一个测验,在不同的页面上有多个问题,我想将用户的答案存储在一个数组中,以便以后检查他们的答案是否正确。测验的设置方式是测验的多个部分都有自己的页面,但这些页面上有多个问题。每个问题依次显示。假设第 1 部分有 2 个问题,单击答案按钮后会加载相同的页面。问题是这些值没有进入数组。只有一个值存储到数组中,当第二个问题被回答时,数组中的第一个值消失,只显示第二个值。 这是我用来在数组中存储按钮值的代码。

 <script>
 $( document ).ready(function() {

           var antwoordenObject1= new Array();
            $('.btn').click(function() {
                 antwoordenObject1.push($(this).val());

                  alert("newArray contents = "+ antwoordenObject1);

            });
       });
</script>

这是我显示问题和多项选择答案的 php 代码:

<?php


$conn = mysqli_connect("127.0.0.1", "root", "", "kinderboekenweek");
$sql = "SELECT * FROM vraag  WHERE object_id_object = (SELECT id_object FROM object WHERE speurtocht_speurtocht_id= ".$SpeurtochtID."  AND id_object = ".$object.") ";
$resultVragen = $conn->query($sql);

$URL = "";


if ($resultVragen->num_rows > 0) {
                        while($rowVragen = $resultVragen->fetch_assoc()) {
                            $arrayVraag[] = $rowVragen['vraag'];
                            $arrayVraag = array_filter(array_merge(array(0), $arrayVraag));
                            $arrayAntwoord[] = $rowVragen['antwoord'];
                            $arrayAntwoord = array_filter(array_merge(array(0), $arrayAntwoord));
                            $arrayOptie1[] = $rowVragen['optie1'];
                            $arrayOptie1 = array_filter(array_merge(array(0), $arrayOptie1));
                            $arrayOptie2[] = $rowVragen['optie2'];
                            $arrayOptie2 = array_filter(array_merge(array(0), $arrayOptie2));
                            $arrayOptie3[] = $rowVragen['optie3'];
                            $arrayOptie3 = array_filter(array_merge(array(0), $arrayOptie3));
                            $arrayOptie4[] = $rowVragen['optie4'];
                            $arrayOptie4 = array_filter(array_merge(array(0), $arrayOptie4));
                            $arrayHint[] = $rowVragen['hint'];
                            $arrayHint = array_filter(array_merge(array(0), $arrayHint));
                        }
}


$result = $conn->query("SELECT COUNT(*) FROM vraag WHERE object_id_object = (SELECT id_object FROM object WHERE speurtocht_speurtocht_id= ".$SpeurtochtID."  AND id_object = ".$object.") ");
if ($result->num_rows > 0) {
                        while($rowCount = $result->fetch_assoc()) {
                            $arrayCount[] = $rowCount;
                            $arrayCount = array_filter(array_merge(array(0), $arrayCount));
                        }
}


if($_SESSION['qno'] < implode($arrayCount[1])){
    if($_SESSION['qno']>$arrayCount[1] && isset($_SESSION['qno']))
        $_SESSION['qno'] = 1;
    elseif($_SESSION['qno']<$arrayCount[1] && isset($_POST['vraag1'])){
       $_SESSION['qno'] += 1;
       unset($_POST['vraag1']);
   } elseif ($_SESSION['qno'] != 1 &&  isset ($_POST['vorige'])){
       $_SESSION['qno'] -= 1;  
   }
}





if($_SESSION['qno'] == implode($arrayCount[1])){
    $URL = "loading1.php";
}else {
    $URL = "speurtochtvragenpagina.php";
}

?>

<form name="exam" method="post" action="<?php echo $URL; ?>">


<?php echo $arrayVraag[$_SESSION['qno']]; ?>  <br>
<input type="hidden" name="vraag1" value="submit" />
<input id = "vraag1"  class = 'btn btn-default' type="submit" name="vraag1" value="<?php echo $arrayOptie1[$_SESSION['qno']]; ?> "> <br>
<input id = "vraag1" class = 'btn btn-default' type="submit" name="vraag1" value="<?php echo $arrayOptie2[$_SESSION['qno']]; ?> "> <br>
<input id = "vraag1"  class = 'btn btn-default' type="submit" name="vraag1" value="<?php echo $arrayOptie3[$_SESSION['qno']]; ?>">  <br>
<input  id = "vraag1" class = 'btn btn-default' type="submit" name="vraag1" value="<?php echo $arrayOptie4[$_SESSION['qno']]; ?>">  <br>

</form> 

【问题讨论】:

  • 提交按钮提交。页面刷新,JavaScript 被重置...
  • 您的代码对SQL injection 是可访问的,您可能需要在公开此应用程序之前修复它:)
  • 您可以在脚本末尾添加event.preventDefault();return false;,以防止提交事件。

标签: javascript php jquery arrays


【解决方案1】:

如果你改变页面,你的js数据会被清理。

你必须使用持久化数据。

检查local-storage

代码是这样的:

localStorage.setItem("lastname", "Smith");

【讨论】:

    【解决方案2】:

    当您将测验设为 1 页时,您无需存储任何内容,只需进行一次 ajax 调用即可发布值并返回结果。

    【讨论】:

      【解决方案3】:

      您可以使用 map 函数将多个元素放入一个数组中,然后使用匹配条件检查 foreach 循环,但您必须放入 event.preventDefault();在你的 js 代码的开头!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 2021-12-02
        • 2021-05-19
        • 1970-01-01
        • 2016-06-28
        相关资源
        最近更新 更多