JQuery Form Plugin NULL ve 0 karıştırır Neden

0 Cevap php

I http://jquery.malsup.com/form/ Benim formu göndermek için jQuery Form Plugin kullanıyorum.

İşte formu göndermek için kullanılan koddur.

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; 
});

Bu benim test için kullanıyorum şeklidir.

<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>

İşte recaptcha.php içinde kod parçacığını

$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; 

İşte jQuery Form Plugin ile bulunan sorundur.

Ben # fname için hiçbir şey girmeden formu göndermek aşağıdaki gibi Olgu I>, döndürülen sonuç:

"is_fname_empty":true,"is_fname_isset":false

Ben # fname için 0 girerek formu göndermek aşağıdaki gibi Vaka II>, döndürülen sonuç:

"is_fname_empty":true,"is_fname_isset":false

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.

Herkes yardımcı olabilir?

Teşekkür ederim

// Update based on comments from dconde //

, Hello all

Ben kolayca benim sorunu açıklamak böylece ben bir çalışma senaryoyu kurmak.

<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> Ben herhangi bir bilgi girmeden formu gönderin.

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

2> Ben 0 ile formu gönderin.

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

Gördüğünüz gibi biz sadece boş, isset ve dconde tarafından sağlanan yöntemini düşünün, iki başvuru arasında hiçbir fark yoktur. Ancak, benim son deneyler farklı şey üzerinde dize uzunluğu beni fark yaratmaya yardımcı olabilir. Benim için son kez neden çalışmıyor bilmiyorum.

Teşekkür ederim all.

0 Cevap