将表单帖子提交到另一个页面,但在重定向之前进行验证,并在验证失败时保留同一页面



是否有PHP验证在提交之前提交给另一个页面并留在同一页面的表格(如果字段无效,或者一切有效地将发布数据发送到另一个页面)?<<<<<<<<<<

示例是:我在页面somesite.com/orderitems上,会有

的形式
<form method="post" id="orderform" action="somesite.com/shoppingcart">
   <input type="number" name="numitems" id="numitems" value="1">
   <input type="date" name="date" id="date">
</form>

因此,例如,Google Chrome例如,已经知道是否将输入字段required值验证并验证日期和数字字段。我也有一个jQuery datePicker,因此用户可以轻松选择日期,也可以在提交之前验证字段,但是所有这些都可以在某个时候覆盖和/或失败。

因此,在提交表格时,终点将在PHP中进行验证。

但是我偶然发现的是,我无法在somesite.com/shoppingcart上获取数据时使用get请求,因此我必须将帖子发送到该页面,但是如果某些字段未能验证,例如错误的日期或错误的日期格式,比我什至不应该(重定向或发布)到somesite.com/shoppingcart,而是应该留在页面somesite.com/orderitems并显示错误。

因此,是否有这样的解决方案,您建议您建议什么建议。我可以将表单发布到同一页面并验证字段,如果所有内容都比重定向到另一个页面并传递帖子数据,或者保留在同一页面上并显示错误?

我将向您展示如何通过javascript/ajax和php完成。我认为从本教程中学习它并不困难,但是如果出现一些问题,我已经准备好帮助您。

javascript/ajax请求

首先,我们需要添加"Submit"按钮形成并将"sendData()"函数设置为其" OnClick" 侦听器。这意味着每次单击"Submit"按钮时,"sendData()"功能都将执行。另外,我们需要将"类"属性添加到"数字"one_answers"日期"输入元素,以更清洁的方式获取其值。

<form method="post" id="orderform" action="somesite.com/shoppingcart">
   <input type="number" class='myForm' name="numitems" id="numitems" value="1">
   <input type="date" class='myForm' name="date" id="date">
   <input type="Submit" value="Send" onclick = sendData(); return false;"/>
</form>
<script type="text/javascript">
function sendData()
{
    var formElements = document.querySelectorAll(".myForm"); // We use 'class' attribute to get form elements (number and date).
    var formData = new FormData(); // we create FormData object with which we can send data to "PHP" script (server side).
    for(var i = 0; i < formElements.length; i++)
    {
        formData.append(formElements[i].name, formElements[i].value);
    }
    //AJAX Starts Here
    var xmlHttp = new XMLHttpRequest(); // Create "ajax" object
        xmlHttp.onreadystatechange = function() //This is to wait for response from your PHP script
        {
            if(xmlHttp.readyState === 4 && xmlHttp.status === 200) //And when status is OK use result
            {
                var responseText = xmlHttp.responseText; //here you save your response from server side.
                if(responseText["Status"] === "OK") //if you send from server side that "Status" is OK, then you can go to that page
                {
                    window.location.href = "somesite.com/shoppingcart";
                }
                else //otherwise you refresh page
                {
                    window.location.reload();
                }
            }
        }
        xmlHttp.open("POST", "somesite.com/shoppingcart"); //set page value, where you want to send form values
        xmlHttp.send(formData); //send actual data
}
</script>

PHP验证(避免在客户端上操纵/覆盖)

当您在服务器端验证值时,设置$_SESSION["Status"] = "OK"。之后,如果某人尝试" hack" 您的页面和"更改" 您的JavaScript函数以导航到Somesite.com/shoppingcart页面,您将检查:

somesite.com/shoppingcart

<?php
    if($_SESSION["Status"] === "OK"])
    {
       //give permission
    }
    else 
    {
        return false;
    }
?>

我也面临着这个问题。我通过这样做

来解决它

update

$(document).ready(function () {
    
    $('#orderform').validate({
        rules: {
            numitems: {
                required: true,
                number: true
            },
            date: {
                required: true,
                date: true
            }
        }
    });
    $('#orderform input').on('keyup blur', function () {
        if ($('#orderform').valid()) {
           $("#button1").removeClass("submit");
           //TRIGGER FORM 
           //$('#orderform').submit();
        }
    });
});
.submit{
  user-select: none;
  color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
<form method="post" id="orderform" action="somesite.com/shoppingcart">
   <input type="number" name="numitems" id="numitems"><br/>
   <input type="date" name="date" id="date"><br/>
   <span class="submit" id="button1">SUBMIT</span>
</form>

我希望它有帮助。!

最新更新