首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表单处理

表单处理
EN

Stack Overflow用户
提问于 2011-06-23 00:02:54
回答 1查看 238关注 0票数 2

我尝试做的是为每个答案运行一条select语句,在数据库中选择questionID = $i和userID = $userID的答案,所以到目前为止,我已经设置了这样的查询,但不确定我遗漏了什么,或者我是对的,没有遗漏任何东西吗?此外,无论我做什么,两个字段都有值,但我仍然收到需要填写两个表单域的错误消息。

代码语言:javascript
复制
<?php 
                    $i = 1;
                    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                    ?>
                        <dl>

                            <dt style="width: 190px;"><label for="answer[<?php echo $row['id']; ?>]"><?php echo $row['question'] ?></label></dt>
                            <dd><input type="text" name="answer<?php echo $i ?>[<?php echo $row['id']; ?>]" size="54" /></dd>

                        </dl>
                    <?php
                    ++$i;
                    }
                    ?>

    if (empty($_POST['answer1'][$i]) || trim($_POST['answer1'][$i])=="") {$errors = "yes";}
if (empty($_POST['answer2'][$i]) || trim($_POST['answer2'][$i])=="") {$errors = "yes";}

// Error checking, make sure all form fields have input
if ($errors == "yes") {

// Not all fields were entered error
$message = "You must enter values to all of the form fields!";

$output = array('errorsExist' => true, 'message' => $message);

} else {

$userID = mysqli_real_escape_string($dbc,$_POST['userID']);
$answer1 = mysqli_real_escape_string($dbc,$_POST['answer1'][$i]);
$answer2 = mysqli_real_escape_string($dbc,$_POST['answer2'][$i]);

$query = "SELECT * FROM manager_users_secretAnswers WHERE questionID = '".$questionID."' AND userID = '".$userID."'";
$result = mysqli_query($dbc,$query);
echo $query;
EN

回答 1

Stack Overflow用户

发布于 2011-11-15 22:27:35

据我所知,您正在使用以下代码检查错误:

代码语言:javascript
复制
empty($_POST['answer1'][$i]);

这里的问题是,脚本中的'$i‘将等于数据库中的行数+1,因为您在while循环中使用了它。因此,它很有可能始终为空,并且您将始终得到错误。

为了更简单,对每个字段使用foreach循环(当然,有很多方法可以做到这一点):

代码语言:javascript
复制
$error = false;
foreach ($_POST['answer1'] as $answer) {
    if ($error === true) break; // we already have an error, why continue?
    if (empty($answer)) $error = true; 
}

在此之前,更重要的是,您的表单名称的命名似乎令人困惑。

代码语言:javascript
复制
name=answerNUM[ROW_ID]

您的结果将是:

代码语言:javascript
复制
answer1[ROW_ID]
answer2[ROW_ID]
answer3[ROW_ID]
answer4[ROW_ID]
//etc...

出于调试目的,您需要转储POST变量,以便在提交表单时能够看到表单的结构:

代码语言:javascript
复制
die(print_r($_POST, true));

您将获得每个值,并能够将您的代码与之进行比较。如果你想把结果上传上去,我可以对答案进行扩展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8099518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档