繁体   English   中英

即使条件为真,PHP 验证总是在 ajax 中返回错误/假

[英]PHP validation always returns error/false in ajax even the conditions are true

我只有两个条件。 如果您的yourname为空返回错误如果email为空返回错误但即使两者都不为空我也会收到错误。 我不知道为什么。

我的表格

<form action="" method="post" name="contact-me" id="profile-update" class="requires-validation">
    <div class="d-flex flex-row align-items-center mb-4">  
        <i class="fas fa-key fa-lg me-3 fa-fw"></i>
        <div class="d-flex form-floating mb-0 flex-fill">    
            <input name="yourname" type="text" class="form-control name" placeholder="Type your name" >
            <label for="yourname" class="form-label">Your Name</label>
            <div class="yournameerror">Name field is valid!</div>
        </div>
    </div>    

    <div class="d-flex flex-row align-items-center mb-4">  
        <i class="fas fa-key fa-lg me-3 fa-fw"></i>
        <div class="d-flex form-floating mb-0 flex-fill">   
            <input name="email"  type="email" class="form-control" placeholder="Type a valid email" >
            <label for="email" class="form-label">Your Email</label>
            <div class="emailerror">Name field is valid!</div>
        </div>    
    </div>

    <div class="d-flex justify-content-center mx-4 mb-3 mb-lg-4">
        <button type="submit" class="btn btn-primary btn-lg" id="submit">Send message!</button>
    </div>
    <div id="nds_form_feedback"></div>
</form>

验证功能

<?php
function stack_update_validation_func(){
    $errors = array();
    $response = array();

    $yourname=$_POST['yourname'];
    $email=$_POST['email']; 

    if ($_POST['yourname'] == '')  {
        $errors['yourname'] = "Please enter your name"; 
    }

    if ((empty($_POST['email'])) ) {
        $errors['email'] = "Please enter your email";    
    } 

    $response['errors'] = $errors;

     if($errors !== '') {

        $response['success'] = false;
        $response['message'] = "Fail";

    } else {

        $reponse['success'] = true;
        $response['message'] = "<div class='alert alert-success'>Article added</div>";

         
    }
    header("Content-Type: application/json", true);
    echo json_encode($response);
    wp_die();
}

在此Ajax中获取JSON响应:

也请阅读评论

<script type="text/javascript">
    jQuery(document).on('click', '#submit', function(e){
        e.preventDefault();
        var data = new FormData();

        data.append('action', 'stack_update_validation_func');   

        jQuery.ajax({
            type: 'POST',
            url: ajax_url,
            data: data,
            contentType: false, //because I have a file upload feild as well
            processData: false, //because I have a file upload feild as well
            headers: {Accept : "application/json;charset=utf-8"},
            dataType: 'json',
            debug:true,
            success: function(response) {
                if(response.success) {
                   jQuery("#nds_form_feedback").html('Sucessfully Sent'); // if the form passes the validation this works fine
                }
                else {
                    alert("Not Uploaded"); // shows the popup if there is a validation error

                    jQuery.each(response.errors, function(key, val) {   
                        console.log(key); // returns the key like this https://prnt.sc/I4R0rNdRIF0o
                    }); 

                    console.log(response); // returns the json response in console 
                    
                    jQuery.each(response.errors, function(key, val) {   
                        jQuery('#profile-update [name="'+key+'"]').parent().find('.'+key+'error').html(val); 
                    });
                }
             }
       
    });
});
</script>

console.log(response); 显示了这个

控制台输出

但问题是即使您的yournameemail填写正确,也会显示错误消息。 不知道出了什么问题。 请帮忙。

在您的方法stack_update_validation_func中有一个条件if($errors !== '') { 此条件将始终为真,因为$errors永远不会是空字符串。 它被初始化为空数组。 因此,您应该更新条件,您的方法可能如下所示:

function stack_update_validation_func()
{
    $errors = array();
    $response = array();

    $yourname = $_POST['yourname'];
    $email = $_POST['email']; 

    if ($_POST['yourname'] == '')  {
        $errors['yourname'] = "Please enter your name"; 
    }

    if (empty($_POST['email'])) {
        $errors['email'] = "Please enter your email";    
    }

    $response['errors'] = $errors;

    if(!empty($errors)) {

        $response['success'] = false;
        $response['message'] = "Fail";

    } else {

        $reponse['success'] = true;
        $response['message'] = "<div class='alert alert-success'>Article added</div>";

    }
    header("Content-Type: application/json", true);
    echo json_encode($response);
    wp_die();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM