【问题标题】:PHP - Posting Data across multiple Form pagesPHP - 跨多个表单页面发布数据
【发布时间】:2013-10-04 19:47:25
【问题描述】:

说实话,我对PHP一无所知,但我可以看到它的强大,我只是想学习如何控制它。我有一个三页的预订表格。第一到第二页可以正常工作,但第二到第三页不能正常工作。这是第二页的 PHP 代码 -

<?php

// Total Number of Nights Between Picked Dates

$days = (strtotime($_POST["checkoutdate"]) - strtotime($_POST["checkindate"])) / 86400 - 1;

// Extra Nightly Cost

define ("extranights", 80);
$addnights = (int)extranights * ($days - 4);

// Deposit Price Calculation

define("deposit", 370); 
$deposit = null;

if (isset($_POST["numberofpeople"])) {
$numberofpeople = intval($_POST["numberofpeople"]);
$deposit = ((int)deposit * $numberofpeople + $addnights) * 0.3;
}     

// Total Price Calculation

define("totalprice", 370);  
$result = null;

if (isset($_POST["numberofpeople"])) {
$numberofpeople = intval($_POST["numberofpeople"]);
$result = (int)totalprice * $numberofpeople + $addnights;
}     

?>

然后我在同一页面上重复了 deposit 和 totalprice 的值

...... (确认预订) 30% 定金: 欧元 总价: 欧元

我一直在苦恼的是如何将存款和总价的呼应值发布到第三页上。如果解决方案/答案很广泛,那么我将不得不回到绘图板并一点一点地重新开始。但这将完成表单的用户端。我不期待数据库的东西:(

【问题讨论】:

  • 没有看到你所有的代码,我的直觉是想知道你的整体方法是否可能是错误的。通常,我们希望通过 javascript/jQuery 控制整个用户体验——使用 Tabs (see jQueryUI example) 创建新页面,然后——当所有数据存在时——将其发送到 PHP 以进入数据库。如果在我们进行的过程中需要从数据库中获取由用户到目前为止输入的内容确定的额外数据位,那么we can use AJAX 来获取这些位。
  • 是的,我同意,因为我对 PHP 缺乏了解,因此我可能会遇到无法预料的问题。我使用隐藏的输入字段来回显输出,然后在第三页上使用 $_Post 再次回显。我不知道这是否是最好的方法以及未来的影响可能是什么,但我会牢记您的建议 - 谢谢

标签: php forms post


【解决方案1】:

我建议你查看 php 会话:

你会在第 2 页做这样的事情:

<?php
  session_start();
    $deposit= $_SESSION['deposit'] = $depositVar; 
    $total = $_SESSION['total'] = $totalVar; 
  ?>

然后在第 3 页上,您可以像这样调用这些值:\

            echo  $deposit= $_SESSION['deposit'];
               echo  $total= $_SESSION['total']

PhP Documentation

【讨论】:

  • 我得到的答案之一是在隐藏的输入字段中回显值,然后在第三页上回显值,它就像一个魅力。感谢您的建议
【解决方案2】:

请考虑这种替代方法的优势。您可以使用多个“页面”设置您的预订表单,这些“页面”仅向用户显示为页面。

jsFiddle example

也就是说,对于用户来说,他/她会从一个屏幕转到下一个屏幕,但这将是由 javascript(例如 jQueryUI 选项卡)创建的一种错觉。实际上,所有字段都在相同的页面/相同的表单中,就像在 jsFiddle 中一样。然后,您可以在用户点击提交按钮时收集所有信息:

  • 验证所有字段均已填写;
  • 验证字段中数据的正确格式;
  • 如果有任何问题,(1) 通过alert() 或jQueryUI 对话框显示消息,(2) 通过return false; 将用户发送回表单
  • 如果没有问题,请通过以下方式提交表单:$('#IdOfForm').submit();

通过在客户端进行所有数据收集和验证,您可以大大简化您的 PHP 代码。 此外,如果用户被送回完整的遗漏字段,他们迄今为止输入的所有数据仍然存在......

请注意,您仍然必须在 PHP 端验证数据以防止 SQL 注入。 See this articlethis SO Post 了解更多信息。


独立的工作代码示例:

<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />

        <style>
        </style>

        <script type="text/javascript">
            $(document).ready(function() {

                var arrFormFields = ['cn','ca','ce','cp','dd','rd'];

                $("#tabs").tabs();
                $("#theMsg").dialog({
                    autoOpen: false,
                });
                $('#doit').click(function() {
                    for (var fld in arrFormFields) {
                        if ( $('#' + arrFormFields[fld]).val() == ''){
                            console.log('Var ' +arrFormFields[fld]+ ' has value: ' + $('#'+arrFormFields[fld]).val() );
                            $('#' + arrFormFields[fld]).css({'border':'1px solid red','background':'yellow'})
                            $('#ui-id-1').trigger('click');
                            $('#' + arrFormFields[fld]).focus();
                            alert('Please complete all fields'); //For some reason the alert isn't displaying
                            return false;
                        }else{
                            //Submit form to "dothebooking.php", like this:
                            //$('#TripForm').submit();
                            $('#theMsg').html('<h2>Form was successfully submitted</h2>');
                            $('#theMsg').dialog({'title':'Notice'}).dialog('open');
                        }
                    }
                });

                $('input:text').blur(function() {
                    $("input:not(:button)").css({'border':'1px solid grey','background':'white'});
                });

            }); //END $(document).ready()

        </script>
    </head>
<body>

    <div id="tabs">
        <ul>
            <li><a href="#tabs-1">Customer Details</a></li>
            <li><a href="#tabs-2">Trip Details</a></li>
            <li><a href="#tabs-3">Trip Options</a></li>
        </ul>
        <form id='TripForm' action="dothebooking.php" method="POST">
            <div id="tabs-1">
                Customer Name: <input type='text' id="cn"><br>
                Customer Address: <input type='text' id="ca"><br>
                Customer Email: <input type='text' id="ce"><br>
                Customer Phone: <input type='text' id="cp"><br>
            </div><!-- #tabs-1 -->
            <div id="tabs-2">
                Departure Date: <input type='text' id="dd"><br>
                Return Date: <input type='text' id="rd"><br>
            </div><!-- #tabs-2 -->
            <div id="tabs-3">
                Guided Tour option <input type='checkbox' id="gt"><br>
                Presidential Suite <input type='checkbox' id="ps"><br>
                Bed and Breakfast <input type='checkbox' id="bb"><br>
                <input type='button' id="doit" value="Submit Trip"><br>
            </div><!-- #tabs-3 -->
        </form><!-- #TripForm -->
    </div><!-- #tabs -->
    <div id="theMsg"></div>

</body>
</html>

您可能也对jQuery validation plugin 感兴趣。

Check out these demos 快速浏览/查看。

【讨论】:

    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多