3

我正在使用 jQuery Form Pluginhttp://jquery.malsup.com/form/提交我的表单。

这是用于提交表单的代码。

var options = { 
    beforeSubmit:  showRequest,  // pre-submit callback 
    success:       showResponse,  // post-submit callback 
    url:           'recaptcha.php',  // override for form's 'action' attribute 
    type:          'POST'
}; 
$('#myform').submit(function() { 
    $(this).ajaxSubmit(options); 
    return false; 
});

这是我用于测试的表格。

<form action="" method="post" style="margin:10px 0;" id="myform">
<div id="recaptcha_image"></div>
<input type="text" name="recaptcha_response_field" id="recaptcha_response_field" size="30"  />
<input type='file' name='filename' size='10' />
First name: <input type="text" id="fname" name="fname" />
<input type="submit" value="Submit" id="submit_button" /> 
</form>

这是 recaptcha.php 中的代码片段

$results['success'] = true;
$results['msg'] = 'Security code is valid!';
$results['is_fname_empty'] = empty($fname);
$results['is_fname_isset'] = isset($fname);
echo json_encode( $results );
return; 

这是我在 jQuery Form Plugin 中发现的问题。

案例一> 如果我提交表单时没有为#fname 输入任何内容,则返回结果如下:

"is_fname_empty":true,"is_fname_isset":false

案例二> 如果我在#fname输入0的情况下提交表单,返回结果如下:

"is_fname_empty":true,"is_fname_isset":false

如您所见,我似乎无法区分用户输入的内容。我真的需要知道用户是否没有输入任何内容或用户输入 0。

任何人都可以帮忙吗?

谢谢

// Update based on comments from dconde //

大家好,

我设置了一个工作脚本,以便我可以轻松地解释我的问题。

<html> // testAjaxForm.php
<head> 
    <script type="text/javascript" src="js/jquery/jquery-1.4.2.js"></script> 
    <script type="text/javascript" src="js/jquery/jquery.form.js"></script> 
    <script type="text/javascript"> 
        $(document).ready(function() { 
            $('#myForm').submit(function() { 
                $(this).ajaxSubmit(); // called first
                return false; 
            });        
        }); 
    </script> 
</head> 

<body>
  <form id="myForm" action="verify.php" method="post"> 
      Name: <input type="text" name="fname" /> 
      <input type="submit" value="Submit Comment" /> 
  </form>
</body>
</html>

<?php // verify.php
require_once('./FirePHPCore/FirePHP.class.php');
require_once('./FirePHPCore/fb.php');
FB::setEnabled(true);
ob_start(); // avoid 'headers already sent error'

FB::log($_POST,      '$_POST');
FB::log(strlen($_POST['fname']), 'strlen(name)');
FB::log(empty($_POST['fname']), 'empty(fname)');
FB::log(isset($_POST['fname']), 'isset(fname)');
$is_fname_empty = empty($_POST['fname']) && $_POST['fname'] != 0 && $_POST['fname'] != '0';
FB::log($is_fname_empty, '$is_fname_empty');

?>

Here is the printed information from FirePHP.

1> 我提交表格时没有输入任何信息。

$_POST: array('fname'=>'')
strlen(name): 0
empty(fname): TRUE
isset(fname): TRUE
$is_fname_empty: FALSE

2> 我用 0 提交表单。

$_POST: array('fname'=>'0')
strlen(name): 1
empty(fname): TRUE
isset(fname): TRUE
$is_fname_empty: FALSE

可以看到,如果只考虑empty、isset和dconde提供的方法,两次提交没有区别。然而,与我上次实验不同的是,字符串长度可以帮助我有所作为。我不知道为什么上次它对我不起作用。

谢谢你们。

4

7 回答 7

3

PHP 文档指出 0 被认为是空的,因此您可能需要修补此函数认为为空的所有值,例如:

//I believe these are the most important values to cover
$results['is_fname_empty'] = empty($fname) && $fname != 0 && $fname != '0';

我希望我能帮助祝你好运!

于 2010-09-02T14:07:58.623 回答
3

在 PHP 中测试这种空性的最好方法是通过字符串长度,即。

isset($_POST['fname']) && (strlen($_POST['fname']) !== 0)
于 2010-09-07T16:33:44.107 回答
2

你得到isset($fname) == false,所以$fname没有定义。那是因为您在 PHP 中通过$_POST. 正确的代码是:

$results['is_fname_empty'] = empty($_POST['fname']);
$results['is_fname_isset'] = isset($_POST['fname']);
于 2010-09-06T17:40:34.060 回答
1

这个代码示例对我来说看起来很可疑:

FB::log(strlen($_POST['fname']), 'strlen(name)');
FB::log(empty($_POST['fname']), 'empty(fname)');
FB::log(isset($_POST['fname']), 'isset(fname)');
$is_fname_empty = empty($fname) && $fname != 0 && $fname != '0'; // from dconde
FB::log($is_fname_empty, '$is_fname_empty');

在第 4 行 $fname 似乎未定义。也许应该是

$is_fname_empty = empty($_POST['fname']) && $_POST['fname'] != 0 && $_POST['fname'] != '0';
于 2010-09-08T17:45:44.690 回答
1
strlen(fname)
  • strlen 成功时获取字符串的长度,如果字符串为空则为0 。
empty(fname)
  • 如果 var 具有非空且非零值,则返回FALSE 。以下内容被认为是的:

  • ""(一个空字符串)

  • 0(0 为整数)
  • "0" (0 作为字符串)
  • 空值
  • 错误的
  • array()(一个空数组)
  • 变量$变量;(声明的变量,但在类中没有值)在类中没有值)
isset(fname)
  • 如果 var 存在并且具有除NULL以外的值,则返回TRUE ,否则返回FALSE

因此,换句话说,您使用错误的方法检查$_POST是否为空!

你可以这样做,只是一个例子:

$empty = false;
foreach ( $_POST as $key => $val ) {
if ( trim($val) == '' || $val == 0 ) {
$empty = true;
} else {
$post[$key] .= $val;
}
}

if ( false === $empty ) {
print_r($post);
}

注意==的使用很重要,因为 "0" 和 0 是 == 0"0" 不是=== 0

于 2010-09-09T00:14:47.307 回答
0

在 PHP 中,您可以使用常用符号来测试变量值,例如:

$a = 0;
($a == "0") || ($a == 0) || (empty($a))

都是一样的,但是你可以使用'===',它不仅可以测试变量的值,还可以测试它的转换。

$a = 0;
($a === 0)

上面的代码为真,但下面的代码为假。

$a = 0;
($a === "0")

因此要测试变量是否为空而不是简单地设置为 0,然后使用代码

$fname = trim($fname);
$results['is_fname_empty'] = ($fname !== 0) && (empty($fname)) ? TRUE : FALSE;

如果有人输入“”(双空格),则需要 TRIM。

于 2010-09-06T16:39:29.637 回答
0

如果您使用 IF 语句,请记住它会计算表达式

IF(0) 返回 FALSE

IF(null) 返回 FALSE

if($_POST['fname']===0) - 检查 var=0

if($_POST['fname']=='') - 检查 var=empty

于 2010-09-09T09:35:31.560 回答