【问题标题】:CCJavascript Return True Page Refresh ErrorCCJavascript 返回 True 页面刷新错误
【发布时间】:2013-02-19 20:08:58
【问题描述】:

我正在用 PHP 编写表单验证代码。下面是代码。

id 为 #questionSubmit 的元素是一个包含 6 个文本字段(代码、问题、答案、选项 1、选项 2、选项 3、选项 4、选项 5)和一个提交按钮的表单。

<form id="createQuestionForm" action="" method="POST">
    Question Code: <input id="code" class="createQuestionTextBox1" type="text" name="questionCode">
    Question Name: <input id="question" class="createQuestionTextBox1" type="text" name="questionName">
    Correct Answer: <input id="answer" class="createQuestionTextBox1" type="text" name="correctAnswer">
    Option 1: <input id="option1" class="createQuestionTextBox2" type="text" name="option_1">
    Option 2: <input id="option2" class="createQuestionTextBox2" type="text" name="option_2">
    Option 3 <input id="option3" class="createQuestionTextBox2" type="text" name="option_3">
    Option 4 <input id="option4" class="createQuestionTextBox2" type="text" name="option_4">
    Option 5 <input id="option5" class="createQuestionTextBox2" type="text" name="option_5">
    <input type="Submit" id="questionSubmit" value="Create Question"></input> 
</form>

function SubmitFormCreationData() {
    $("#questionSubmit").click(function() {
        if (CheckCodeField($("#code").val()) == false) {
            return false;
        } else if (CheckAnswerNameFields($("#question").val()) == false) {
            return false;
        } else if (CheckCorrectAnswerField($("#answer").val()) == false) {
            return false;
        } else if (CheckAnswerNameFields($("#option1").val()) == false) {
            return false;
        } else if (CheckAnswerNameFields($("#option2").val()) == false) {
            return false;
        } else if (CheckAnswerNameFields($("#option3").val()) == false) {
            return false;
        } else if (CheckAnswerNameFields($("#option4").val()) == false) {
            return false;
        } else if (CheckAnswerNameFields($("#option5").val()) == false) {
            return false;
        } else {
            $.post("InsertNewQuestion.php", $('#createQuestionForm').serialize());
            alert('Quiz Created');
            window.setTimeout(delay,2000);
            return true;
        }
        return false;
    });
}

function CheckAnswerNameFields(value) {
    var isValid = true;

    if (value == "") 
        isValid = false;
    if (value == null)
        isValid = false;
    for(LCV = 0;LCV <= (count(value)-1); LCV++) {
        if(value[LCV] == "'")
            isValid = false;
        if(value[LCV] == '"')
            isValid = false;
    }

    return isValid;
}

function CheckCodeField(value) {
    var isValid = true;

    if(isInteger(value) == false)
        isValid = false;
    if(value < 100000)
        isValid = false;
    if(value > 999999)
        isValid = false;

    return isValid;
}  

function CheckCorrectAnswerField(value) {
    var isValid = true;

    if(isInteger(value) == false)
        isValid = false;
    if(value < 1)
        isValid = false;
    if(value > 5)
        isValid = false;

    return isValid;
}

function isInteger(possibleInteger) {
    return /^[\d]+$/.text(possibleInteger);
}

现在,如果第一个字段输入正确,则输出符合要求,则返回 false。但是,如果第一个字段输入正确并且其余字段为空白,则页面会刷新,但是它应该返回 false,因为我检查问题和选项字段是否为空白。为什么会这样?

【问题讨论】:

  • 客户端是可绕过的,你必须在使用ajax调用的页面上添加控件(在服务器端)
  • 为什么会有三个CheckCodeField函数??无论如何,这可能不是问题的原因。您能否也发布表单字段?
  • 你是指表单的 HTML 吗?
  • 是的..这将有助于找到问题.. :)
  • @Sam 我不太明白,你能详细说明一下吗?你的意思是我应该粘贴处理表单数据的php代码吗?

标签: php javascript jquery forms refresh


【解决方案1】:
    $("#questionSubmit").click(function() {
        $.post("InsertNewQuestion.php", $('#createQuestionForm').serialize(), function(data){
        if(data=='SUCCESS'){
               alert('Quiz Created');
               window.setTimeout(delay,2000);
               return true;
               }
            else{
                var alertx='';
                for(i=0;i<data.split('-').length-1;i++) alertx += data.split('-')[i].toString()+"\n";
                alert(alertx);
            }
        });
    return false;
});

插入新问题.php

extract($_POST);

 $errors = '';

if(!in_array($questionCode,range(100000,999999))) $errors .= 'Invalid code-';
if(!in_array($correctAnswer,range(1,5))) $errors .= "Invalid answer-";

 for($i=1;$i<=6;$i++){ 
   $var = $i==6 ? $questionName : ${'option_'.$i};
   if(empty($var) || strstr($var,'"') || strstr($var,"'")) $errors.= "Invalid ".($i==6?"question name":"option $i")."-"; 
    }

     echo $errors=='' ? 'SUCCESS':$errors;

如果工作正常,试着写

【讨论】:

  • 实际上我需要表单验证才能在 javascript 中工作,因为我在 Javascript 中通过 jQuery 显示无效框
  • 我在每个文本框旁边都有一个跨度,我用文本填充“无效!” 2秒后消失
  • 我没有写在上面的代码中,因为我认为它对调试没有必要。
  • 客户端对表单控件很危险,专家用户可以在不做客户端控件(js)的情况下将vars发送到php页面
  • Sam 是对的,您可以在 JavaScript 中进行验证,但仍然需要在服务器端进行一些检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2010-11-14
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多