获取循环中的所有数组值

时间:2015-10-05 15:22:05

标签: php arrays loops

所以这是我的代码,从用户那里得到他/她想要提出的问题(多项选择)的输入:

       Multiple choice: <input type = "text" name="MC"><br>

       <input type = "submit" name = "confirm" value = "Confirm">

之后,这是系统将生成多少问题的代码:

<?php

if(isset($_POST['confirm'])){

$MC = $_POST['MC'];
echo "<form method = 'POST' name = 'items' action ='createquestions.php'>";
$items = 1;

    for ($x = 1; $x <= $MC; $x++) {

        echo "Question Number $items:"; echo "<input type = 'text' name = 'questions[]' style='width: 500px'><br><br>";
        echo "A. "; echo "<input type = 'text' name = 'ans1[]'>";
        echo "B. "; echo "<input type = 'text' name = 'ans2[]'><br>";
        echo "C. "; echo "<input type = 'text' name = 'ans3[]'>";
        echo "D. "; echo "<input type = 'text' name = 'ans4[]'><br>";
        echo "Correct Answer: "; echo "<input type = 'text' name ='cans[]'><br><br>";
        $items++;

    }
        echo "<input type ='submit' name = 'save' value = 'Save'>";
        echo "</form>";
}
?>
<?php

问题是它只会保存用户的最后一个输入。 例如,我在多项选择中输入了 2 : - textbox here - 此代码将生成 2个问题,8个选项,2个cans =正确答案,但它只会保存第2个问题,答案和正确答案。系统将无法获得第一个问题,答案和正确答案的记录。

以下是我将其插入数据库的代码:

<?php

    if(isset($_POST['save'])){

        $user_id = $_SESSION['id'];
        $questions = $_POST['questions']; 
        $ans1 = $_POST['ans1'];
        $ans2 = $_POST['ans2'];
        $ans3 = $_POST['ans3'];
        $ans4 = $_POST['ans4'];
        $cans = $_POST['cans'];


        foreach($questions as $q){
            echo "<input type = 'hidden' value = '$q'>";
        }

        require_once('xcon.php');

        $query = "INSERT INTO mcq (mc_id, user_id, questions, ans1, ans2, ans3, ans4, cans) 
              VALUES ('NULL','$user_id','$q','$ans1','$ans2','$ans3','$ans4','$cans')";
    $result = mysql_query($query);

    if($result){
        echo 'Insert Success!';
    }
    else{
        echo 'Error';
    }

}

?>

3 个答案:

答案 0 :(得分:0)

根据this post你应该使用:

#define  MATCH_REST ((size_t)-1)

char *str_sub(const char *string, size_t from, size_t to) {
  size_t length = strlen(string);
  if (to > length) to = length;
  if (from > to) from = to;

  size_t diff = to - from;
  char *result = malloc(diff + 1);
  if (result) {
    memcpy(result, &string[from], diff);
    result[diff] = '\0';
  }
  return result;
}

而且:

echo "Question Number $items:"; echo "<input type = 'text' name = 'questions' style='width: 500px'><br><br>";
echo "A. "; echo "<input type = 'text' name = 'ans[]'>";
echo "B. "; echo "<input type = 'text' name = 'ans[]'><br>";
echo "C. "; echo "<input type = 'text' name = 'ans[]'>";
echo "D. "; echo "<input type = 'text' name = 'ans[]'><br>";
echo "Correct Answer: "; echo "<input type = 'text' name ='cans'><br><br>";

解释

您只需要重复发布$ans1 = $_POST['ans'][0]; $ans2 = $_POST['ans'][1]; $ans3 = $_POST['ans'][2]; $ans4 = $_POST['ans'][3]; ,而不是

ans[]以获得类似

的数组

ans1[], ans2[], ans3[]...

或者您可以使用

$_POST['ans'][0], $_POST['ans'][1]...

(不带括号[])读作

ans1, ans2, ans3

答案 1 :(得分:0)

保存时,您应该再次运行循环。试试这个吗?

<?php

    if(isset($_POST['save'])){
        $user_id = $_SESSION['id'];
        require_once('xcon.php');
        foreach ($_POST['questions'] as $key => $question){
            $ans1 = $_POST['ans1'][$key];
            $ans2 = $_POST['ans2'][$key];
            $ans3 = $_POST['ans3'][$key];
            $ans4 = $_POST['ans4'][$key];
            $cans = $_POST['cans'][$key];


            echo "<input type = 'hidden' value = '$question'>";

            $query = "INSERT INTO mcq (mc_id, user_id, questions, ans1, ans2, ans3, ans4, cans) 
                  VALUES ('NULL','$user_id','$question','$ans1','$ans2','$ans3','$ans4','$cans')";
            $result = mysql_query($query);

            if($result){
                echo 'Insert Success!<br>';
            }else{
                echo 'Error<br>';
            }
        }    
    }

?>

答案 2 :(得分:0)

您正在以奇怪的方式使用元素命名,您正在使用数组,但仍然使用数字。尝试生成这样的:

for ($x = 0; $x <= $MC; $x++) {
    echo "<input type = 'text' name = 'questions[$i]'>";
    echo "A. <input type = 'text' name = 'ans[$i][A]'>";
    echo "B. <input type = 'text' name = 'ans[$i][B]'><br>";
    echo "C. <input type = 'text' name = 'ans[$i][C]'>";
    echo "D. <input type = 'text' name = 'ans[$i][D]'><br>";
    echo "Correct Answer: <input type = 'text' name ='cans[$i]'><br><br>";
}

然后,您将在$_POST

中获得以下结果
[
    "questions" => [
        0 => "question1",
        ...
    ]
    "ans" => [
        0 => [
            "A" => "answer A",
            "B" => "answer B",
            "C" => "answer C",
            "D" => "answer D",
        ]
        ...
    ]
    "cans" => [
        0 => "A",
        ....
    ]
]

使用foreach很容易处理:

foreach ($_POST['questions'] as $key => $question) {
    // $question == 'question1';
    $answers = $_POST['ans'][$key]; // array of answers
    $solution = $_POST['cans'][$key];
}