在PHP中手动发送帖子

在PHP中手动发送帖子,php,ajax,Php,Ajax,我有一个表单,在通过ajax请求提交到服务器进行服务器端验证之前,它将在客户端进行验证。如果服务器端验证失败,则需要进行包含所有错误消息的回发。有什么办法我可以做到这一点吗 例如: if ((!empty($nameError) && (!empty($emailError)) { $_POST['nameError'] = $nameError; $_POST['emailError'] = $emailError; // send postback

我有一个表单,在通过ajax请求提交到服务器进行服务器端验证之前,它将在客户端进行验证。如果服务器端验证失败,则需要进行包含所有错误消息的回发。有什么办法我可以做到这一点吗

例如:

if ((!empty($nameError) && (!empty($emailError)) {

    $_POST['nameError'] = $nameError;
    $_POST['emailError'] = $emailError;
    // send postback with values
}
else {

    echo 'No errors';
}
更新------------------------------------------------

以下是处理表单提交的javascript:

$(".button").click(function() {

            $(".error").hide();

            var name = $(":input.name").val();
            if ((name == "") || (name.length < 4)){

                $("label#nameErr").show();
                $(":input.name").focus();
                return false;
            }

            var email = $(":input.email").val();
            if (email == "") {

                $("label#emailErr").show();
                $(":input.email").focus();
                return false;
            }


            var phone = $(":input.phone").val();
            if (phone == "") {

                $("label#phoneErr").show();
                $(":input.phone").focus();
                return false;
            }

            var comment = $.trim($("#comments").val());
            if ((!comment) || (comment.length > 100)) {

                $("label#commentErr").show();
                $("#comments").focus();
                alert("hello");
                return false;
            }

            var info = 'name:' + name + '&email:' + email + '&phone:' + phone + '&comment:' + comment;
            var ajaxurl = '<?php echo admin_url("admin-ajax.php"); ?>';
            alert(info);

            jQuery.ajax({

                type:"post",
                dataType:"json",
                url: myAjax.ajaxurl,
                data: {action: 'submit_data', info: info},
                success: function(response) {
                    if (response.type == "success") {

                        alert("success");
                    }
                    else {

                        alert("fail");
                    }
                }
            });

            $(":input").val('');
            return false;


        });
$(“.button”)。单击(函数(){
$(“.error”).hide();
var name=$(“:input.name”).val();
如果((name==“”)| |(name.length<4)){
$(“label#nameErr”).show();
$(“:input.name”).focus();
返回false;
}
var email=$(“:input.email”).val();
如果(电子邮件==“”){
$(“label#emailErr”).show();
$(“:input.email”).focus();
返回false;
}
var phone=$(“:input.phone”).val();
如果(电话==“”){
$(“label#phoneErr”).show();
$(“:input.phone”).focus();
返回false;
}
var comment=$.trim($(“#comments”).val();
如果((!comment)| |(comment.length>100)){
$(“label#commentErr”).show();
$(“#注释”).focus();
警惕(“你好”);
返回false;
}
变量信息='name:'+name+'和email:'+email+'和phone:'+phone+'和comment:'+comment;
var ajaxurl='';
警报(信息);
jQuery.ajax({
类型:“post”,
数据类型:“json”,
url:myAjax.ajaxurl,
数据:{操作:'submit_data',info:info},
成功:功能(响应){
如果(response.type==“success”){
警惕(“成功”);
}
否则{
警报(“失败”);
}
}
});
$(“:输入”).val(“”);
返回false;
});
下面是ajax发布到的php函数:

function submit_data() {

    $nameErr = $emailErr = $phoneErr = $commentErr = "";
    $full = explode("&", $_POST["info"]);
    $fname = explode(":", $full[0]);
    $name = $fname[1];
    $femail = explode(":", $full[1]);
    $email = $femail[1];
    $fphone = explode(":", $full[2]);
    $phone = $fphone[1];
    $fcomment = explode(":", $full[3]);
    $comment = $fcomment[1];

    if ((empty($name)) || (strlen($name) < 4)){

        $nameErr = "Please enter a name";
    }
    else if (!preg_match("/^[a-zA-Z ]*$/", $name)) {

        $nameErr = "Please ensure you have entered your name and surname";
    }


    if (empty($email)) {

        $emailErr = "Please enter an email address";
    }
    else if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {

        $emailErr = "Please ensure you have entered a valid email address";
    }


    if (empty($phone)) {

        $phoneErr = "Please enter a phone number";
    }
    else if (!preg_match("/(?:\(?\+\d{2}\)?\s*)?\d+(?:[ -]*\d+)*$/",$phone)) {

        $phoneErr = "Please ensure you have entered a valid phone number";
    }


    if ((empty($nameErr)) && (empty($emailErr)) && (empty($phoneErr)) && (empty($commentErr))) {

        $conn = mysqli_connect("localhost", "John", "Change9", "plugindatadb");
        mysqli_query($conn, "INSERT INTO data (Name, Email, Phone, Comment) VALUES ('$name', '$email', '$phone', '$comment')");
    }
    else {

        // display error messages
    }

    die();
}
函数提交_数据(){
$nameErr=$emailErr=$phoneErr=$commentErr=“”;
$full=爆炸(&,$_POST[“info”]);
$fname=分解(“:”,$full[0]);
$name=$fname[1];
$femail=explode(“:”,$full[1]);
$email=$femail[1];
$fphone=explode(“:”,$full[2]);
$phone=$fphone[1];
$fcomment=explode(“:”,$full[3]);
$comment=$fcomment[1];
if((空($name))| |(strlen($name)<4)){
$nameErr=“请输入名称”;
}
如果(!preg_match(“/^[a-zA-Z]*$/”,$name))为else{
$nameErr=“请确保您已输入姓名”;
}
如果(空($email)){
$emailErr=“请输入电子邮件地址”;
}
如果(!preg\u match(“/([\w\-]+\@[\w\-]+\.\w\-]+)/”,$email)){
$emailErr=“请确保您输入了有效的电子邮件地址”;
}
如果(空($phone)){
$phoneErr=“请输入电话号码”;
}
如果(!preg\u match(“/(?:\(?\+\d{2}\)?\s*)?\d+(?:[-]*\d+*$/”,$phone)){
$phoneErr=“请确保您输入了有效的电话号码”;
}
if((empty($nameErr))&&&(empty($emailErr))&&(empty($phoneErr))&&&(empty($commentErr))){
$conn=mysqli_connect(“localhost”、“John”、“Change9”、“plugindatadb”);
mysqli_query($conn,“插入数据(名称、电子邮件、电话、注释)值(“$Name”、“$Email”、“$Phone”、“$Comment”)”);
}
否则{
//显示错误消息
}
模具();
}

使用json ajax请求。如果存在错误,则显示错误消息。我通常会把成功或失败的标志

$message='';
if ((!empty($nameError) && (!empty($emailError)) {

     $errorArray=array();
    $errorArray['nameError'] = $nameError;
    $errorArray['emailError'] = $emailError;
    // send postback with values
}
else {

    $message='No errors';
}

echo json_encode(array(
"message"=>$message,
"errors"=>$errorArray
));

您的答案将分为两部分:

伪代码:

第1部分:PHP

if ($error) {
    $reply["status"]=false;
    $reply["message"]="Fail message"; //Here you have to put your own message, maybe use a variable from the validation you just did before this line: $reply["message"] = $fail_message.
}
else {    
    $reply["status"]=true;
    $reply["message"]="Success message"//$reply["message"] = $success_message;
}

echo json_encode($reply);//something like {"status":true, "message":"Success message"}
第2部分AJAX:修改您对此的AJAX响应

                success: function(response) {
                    if (response.status == true) {

                        alert("success: "+response.message);
                    }
                    else {

                        alert("fail: " + response.message);
                    }
                }

如果你所说的回发是指你想重定向页面(或者再次称之为self),那么,不,你不能,因为一旦你重定向了,帖子就会消失。问题是,为什么要重定向回(或刷新)页面?对于如何在页面上显示错误消息,您是否有任何建议?我尝试回显一个javascript脚本,该脚本会将错误消息设置为显示,但没有luckuse
$\u SESSION['namererror']
。因此,实际上您不需要刷新页面,只需要显示错误消息。对吗?事实上,使用AJAX是阻止回音工作的原因。请分享您的ajax代码,并向我们展示如何调用php页面。该部分负责显示错误消息,而不是php部分php将只为您设置标志并可能返回错误消息文本,但JAVASCRIPT将从那里处理该过程。@Joraid发布了代码。因此,一旦返回了错误消息(比如通过json_encode函数),我是否会触发javascript函数来显示错误消息?