Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将表单POST提交到另一页,但在重定向之前进行验证,如果验证失败,则保持在同一页上_Php_Forms_Validation - Fatal编程技术网

Php 将表单POST提交到另一页,但在重定向之前进行验证,如果验证失败,则保持在同一页上

Php 将表单POST提交到另一页,但在重定向之前进行验证,如果验证失败,则保持在同一页上,php,forms,validation,Php,Forms,Validation,是否有一种php方法来验证表单,该表单在提交之前提交到另一个页面,如果字段无效或所有内容都有效,则保持在同一页面上,并将post数据发送到另一个页面 例如: 我在somesite.com/orderitems页面上,有如下表单 <form method="post" id="orderform" action="somesite.com/shoppingcart"> <input type="number" name="numitems" id="numitems" va

是否有一种php方法来验证表单,该表单在提交之前提交到另一个页面,如果字段无效或所有内容都有效,则保持在同一页面上,并将post数据发送到另一个页面

例如: 我在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>
例如,谷歌浏览器已经知道,若你们在输入字段中输入了所需的值,那个么就要进行验证,并且要验证日期和数字字段。我还有一个jquery日期选择器,这样用户可以轻松地选择日期,还有jquery验证器在提交前验证字段,但所有这些都可能被覆盖和/或在某个时候失败

所以,当表单提交时,结束点将是php中的验证

但我无意中发现,我无法使用GET请求在somesite.com/shoppingcart上获取数据,因此我必须向该页面发送帖子,但如果某些字段无法验证,例如错误的日期或错误的日期格式,我甚至不应该重定向或发布到somesite.com/shoppingcart,相反,我应该停留在somesite.com/orderitems页面上,显示错误


那么有没有一个解决办法,你会推荐什么建议呢。如果重定向到另一个页面并传递post数据,或者停留在同一页面并显示错误,那么我是否可以将表单发布到同一页面并验证字段?

我也面临着这个问题。我通过这样做来解决它

更新

$document.readyfunction{ $'orderform'。验证{ 规则:{ 努米特姆:{ 要求:正确, 数字:对 }, 日期:{ 要求:正确, 日期:对 } } }; $'orderform input'。在'keyup blur'上,函数{ 如果$'orderform'。有效{ $button1.removeClasssubmit; //触发形式 //$'orderform'。提交; } }; }; .提交{ 用户选择:无; 颜色:红色; } 提交
我将向您展示如何通过JavaScript/Ajax和PHP实现这一点。我认为从本教程中学习如何做并不困难,但如果出现一些问题,我愿意帮助您

JavaScript/Ajax请求 首先,我们需要在表单中添加Submit按钮,并将sendData函数设置为onclick监听器。这意味着每次单击Submit按钮时,sendData函数都将执行。此外,我们需要将“class”属性添加到“number”和“date”输入元素中,以更清晰的方式获取它们的值

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

您要求的是AJAXAJAX,或者在shoppingcart中进行验证-如果一切正常,请继续订单流程。如果没有,请将$\u POST项目保存到会话中,准备一条错误消息并重定向回orderitems。输入中的值将从会话中预先填充。嗯,听起来太复杂了。我使用WordPress网站来实现这一点,虽然我以前在网站上使用过ajax,但我仍然不知道在帖子成功后ajax会如何重定向。为此,我必须进一步阅读,有没有一种方法不使用ajax,因为一些移动浏览器可能会遇到麻烦。我也在使用jQuery验证,但问题是,用户仍然可以发布表单并覆盖验证,只需使用chrome developer工具删除jQuery验证代码,所以仍然需要php验证,以便使用span或其他,并创建您自己的类来禁用span标记,然后如果所有字段都有效,则删除该类。请参阅我发布的UpdateLook,如我将使用此方法,与示例不完全相同,但这有助于我了解如何使用它,因为没有php唯一的解决方案。
<?php
    if($_SESSION["Status"] === "OK"])
    {
       //give permission
    }
    else 
    {
        return false;
    }
?>