【问题标题】:PHP: Get Value from Radio BoxesPHP:从单选框获取价值
【发布时间】:2015-04-07 17:39:01
【问题描述】:

我正在做一个没有正确答案的测验,而是将比较和计算个性以创建匹配算法。到目前为止,我有:

我有 3 个涉及测验的表格:questions、question_answers、question_choices:

questions:
+-------------+---------------+
| question_id | question      |
+-------------+---------------+
| 1           | Is your...    |
| 2           | Do you..      |
| 3           | Have you...   |
|_____________|_______________|

question_choices:
+-------------+-------------+-------------+
| choice_id   | question_id | choice_text |
+-------------+-------------+-------------+
| 1           | 1           | Somewhere.. |
| 2           | 1           | Somewhere.. |
| 3           | 1           | Somewhere.. |
| 4           | 2           | Yes         |
| 5           | 2           | No          |
| 6           | 3           | Yes         |
| 7           | 3           | No          |
|_____________|_____________|_____________|

question_answers:
+------------+---------+------------+------------+
| answer_id  | user_id |question_id | choice_id  |
+------------+---------+------------+------------+
| 1          | 125     | 1          | 2          | 
| 2          | 3       | 1          | 3          | --> 125 & 3 = No Match
| 3          | 125     | 2          | 1          |
| 4          | 3       | 2          | 1          | --> 125 & 3 = Match
|____________|_________|____________|____________|

我现在正在尝试将所有相关信息发布到空的 question_answers 表中。但是,我在提取所选选项的值时遇到了困难,当单击提交时,所有问题仅显示为最后一个问题(问题 3)单击的选项。

我如何为每个单独的问题定制这个,我如何使用 UPDATE 将所有这三个结果发布到数据库中?

<?php
$choices = (choices());
$questions = (questions());
$questions_id = (questions_id());
$questions_length = count(questions());
for ($i = 0; $i < $questions_length; $i++){
    $each_q = $questions[$i];
    $each_q_id = $questions_id[$i];
?>


<div class="poll">
    <div class="poll_question">
        <?php echo $each_q_id . ". " . $each_q; ?>
    </div>
    <form action="" method="post">
        <div class="poll_options">
            <div class="poll_option">


                <?php
                    $each_c = $choices[$i];
                    $choices_length = count($each_c);
                    for ($k = 0; $k < $choices_length; $k++){

                    $each_c = explode('<br />', $each_c);
                ?>

                <input type="radio" name="$each_c" value="1" id="c1">
                <label for="c1"><?php echo $each_c[0]; ?></label>
                <input type="radio" name="$each_c" value="2" id="c2">
                <label for="c2"><?php echo $each_c[1]; ?></label>
                <?php if (!empty($each_c[2]) === true){ ?>
                <input type="radio" name="$each_c" value="3" id="c3">
                <label for="c2"><?php echo $each_c[2]; ?></label>

                <?php    
                }}

                    $data = $_POST;
                    $each_cc = count($each_c);
                    print_r($session_user_id);
                    $option = 0;
                    if(isset($data['$each_c'])){
                    $option = $data['$each_c'];
                    echo "--".$each_q_id."--".$each_cc."--". $option. "<br>";
                } 

                ?>              
        </div>
    </form> 
<?php

}
?>

功能:

function choices(){
    $query = mysqli_query($_POST['x'], "SELECT `question`, GROUP_CONCAT(`choice_text` ORDER BY `choice_text` DESC SEPARATOR '<br />') as `choice_texts` FROM `questions` JOIN `question_choices` ON questions.question_id = question_choices.question_id GROUP BY `question`");
    while($row = mysqli_fetch_assoc($query)){
        $rows[] = $row;}
    if (count($rows)>0){
        foreach ($rows as $key => $value) {
            $c[] = $value['choice_texts'];
        }
        return $c;}else return false;
}

function questions_id(){
    $query = mysqli_query($_POST['x'], "SELECT `question_id` FROM `questions` WHERE DATE(NOW()) BETWEEN `start` AND `end`");
    while($row = mysqli_fetch_assoc($query)){
        $rows[] = $row;}
    if (count($rows)>0){
        foreach ($rows as $key => $value) {
            $q_id = $value['question_id'];
            $array_q[] = ($q_id);
        }
        return $array_q;}else return false;
}

function questions(){
    $query = mysqli_query($_POST['x'], "SELECT `question` FROM `questions` WHERE DATE(NOW()) BETWEEN `start` AND `end`");
    while($row = mysqli_fetch_assoc($query)){
        $rows[] = $row;}
    if (count($rows)>0){
        foreach ($rows as $key => $value) {
            $q = $value['question'];
            $array_q[] = $q;
        }
        return $array_q;}else return false;
}

【问题讨论】:

  • 您好。感谢您希望将问题标记为已解决并提供解决方案。但是,我们不会为此编辑问题:通过用解决方案覆盖问题,问答格式的连续性就会丢失,并且结果不太可能对未来的访问者有所帮助。如果您想报告您的解决方案,请自行回答。我刚刚为你做了这个。

标签: php post mysqli radio


【解决方案1】:

首先,我认为在您的代码中,您为每个问题创建了不同的形式(即在第一个 for 循环中)。 使用第二个 for 循环,您正在尝试设置单选按钮,但您正在使用 与此循环无关的变量。 我正在应用您的代码稍作修改,因此在提交时 $_POST 会看起来: $_POS['1'] => 选择值,$_POST['2'] => 选择值... 其中 '1', '2'... 是您的问题 ID。

<?php
$choices = (choices());
$questions = (questions());
$questions_id = (questions_id());
$questions_length = count(questions());

echo '<form action="#" method="post">';

for ($i = 0; $i < $questions_length; $i++) {
    $each_q = $questions[$i];
    $each_q_id = $questions_id[$i];
?>


<div class="poll">
    <div class="poll_question">
        <?php echo $each_q_id . ". " . $each_q; ?>
    </div>
    <div class="poll_options">
        <div class="poll_option">


            <?php
                $each_c = $choices[$i];
                $question = $questions[$i];
                $choices_length = count($each_c);
                for ($k = 0; $k < $choices_length; $k++){

                $each_c = explode('<br />', $each_c);
            ?>

            <input type="radio" name="<?php echo $each_q_id; ?>" value="<?php echo $choices[$i][$k]; ?>" id="c<?php echo $choices[$i][$k] ?>">
            <label for="c<?php echo $choices[$i][$k] ?>"><?php echo $choices[$i][$k]; ?></label>

            <?php
                }
                $data = $_POST;
                $each_cc = count($choices[$i]);
                print_r($session_user_id);
                $option = 0;
                if(isset($data[$each_q_id])){
                    $option = $data[$i];
                    echo "--" . $each_q_id . "--" . $each_cc . "--" . $option . "<br>";
                }
            ?>
    </div>
<?php
}
    echo '<input type=submit value="submit" />';
    echo '<br /></form><br /><br />';

    if (!empty($_POST)) {
       var_dump($_POST);
    }
?>

【讨论】:

  • 感谢您的回复,您太棒了,到目前为止一切都很好...我只是想为每个问题显示所有选择,因为现在它只显示每个问题的第一选择.但这有效! (我将在完成后发布更新的代码)。再次感谢您。
  • 在上面更新,它正在工作并发布结果:125--1--1--Somewhere we can talk-- ... 等等。我将更改选项变量以输出 ID选择。再次感谢您对我的帮助很大。
【解决方案2】:

(代表 OP 发布。)

通过将代码更改为以下代码解决了这个问题:

<?php
$choices = (choices());
$questions = (questions());
$questions_id = (questions_id());
$questions_length = count(questions());

echo '<form action="#" method="post">';

for ($i = 0; $i < $questions_length; $i++) {
    $each_q = $questions[$i];
    $each_q_id = $questions_id[$i];
?>


<div class="poll">
    <div class="poll_question">
        <?php echo $each_q_id . ". " . $each_q; ?>
    </div>
    <div class="poll_options">
        <div class="poll_option">


            <?php
                $each_c = $choices[$i];   
                $each_c = explode('<br />', $each_c);
                $choices_length = count($each_c);
                for ($k = 0; $k < $choices_length; $k++){

            ?>


            <input type="radio" name="<?php echo $each_q_id; ?>" value="<?php echo $each_c[$k]; ?>" id="<?php echo $each_c[$k] ?>">
            <label for="<?php echo $each_c[$k] ?>"><?php echo $each_c[$k]; ?></label>

            <?php
                }
                $data = $_POST;
                $each_cc = count($choices[$i]);
            //    print_r($session_user_id);
                $option = 0;
                if(isset($data[$each_q_id])){
                    $option = $data[$each_q_id];
                    echo $session_user_id . "--" . $each_q_id . "--" . $each_cc . "--" . $option . "--" . "<br>";
                }
            ?>
    </div>
<?php
}
    echo '<input type=submit value="submit" />';
    echo '<br /></form><br /><br />';

    if (!empty($_POST)) {
       var_dump($_POST);
    }
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 2018-07-24
    • 2013-03-21
    • 2014-04-05
    • 2016-11-09
    • 1970-01-01
    • 2013-08-13
    • 2020-12-31
    相关资源
    最近更新 更多