Why jQuery Form Plugin mixes the NULL and 0

Uphopeapape

New Member
I am using jQuery Form Plugin \[code\]http://jquery.malsup.com/form/\[/code\] to submit my form.Here is the code that is used to submit the form.\[code\]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; });\[/code\]This is the form I am using for testing.\[code\]<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="http://stackoverflow.com/questions/3605560/Submit" id="submit_button" /> </form>\[/code\]Here is the code snippet in recaptcha.php\[code\]$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; \[/code\]Here is the problem I found with jQuery Form Plugin.Case I> If I submit the form without entering anything for #fname, the returned result is as follows:\[code\]"is_fname_empty":true,"is_fname_isset":false\[/code\]Case II> If I submit the form with entering 0 for #fname, the returned result is as follows:\[code\]"is_fname_empty":true,"is_fname_isset":false\[/code\]As you can see, it seems that there is no way that I can differentiate what the user enters.I really need to know whether the user DOES NOT enter anything or the user enters 0.Anyone can help?Thank you\[code\]// Update based on comments from dconde //\[/code\]Hello all,I set up a working script so that I can explain my problem easily.\[code\]<html> // testAjaxForm.php<head> <script type="text/javascript" src="http://stackoverflow.com/questions/3605560/js/jquery/jquery-1.4.2.js"></script> <script type="text/javascript" src="http://stackoverflow.com/questions/3605560/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="http://stackoverflow.com/questions/3605560/Submit Comment" /> </form></body></html><?php // verify.phprequire_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.\[/code\]1> I submit the form without entering any information.\[code\]$_POST: array('fname'=>'')strlen(name): 0empty(fname): TRUEisset(fname): TRUE$is_fname_empty: FALSE\[/code\]2> I submit the form with 0.\[code\]$_POST: array('fname'=>'0')strlen(name): 1empty(fname): TRUEisset(fname): TRUE$is_fname_empty: FALSE\[/code\]As you can see, there is NO difference between two submission if we only consider the empty, isset, and the method provided by dconde. However, on thing that is different from my last experiments is that the string length can help me make difference. I don't know why it doesn't work for me last time.Thank you all.
 
Back
Top