首页 文章

如何在PHP中的页面之间传递数据?

提问于
浏览
4

简而言之,在“page1.php”中我有一个由HTML表单组成的计算器,然后PHP代码总计输入并显示总价 . 在价格之下,它还会显示“page2.php”的链接,其中包含一个HTML表单,可以输入他们的联系信息 . 提交表格后,他们在定价计算器中的“page1.php”上做出的选择以及“page2.php”上的联系信息都会通过电子邮件发送给我,然后他们会被重定向到主页 .

在提交给我的电子邮件中,我收到了来自"page2.php"的联系信息,但我没有从"page1.php"收到任何内容,因此变量未正确传递 . 除了每页上的PHP之外,我在"page2.php"上的HTML表单中使用隐藏值来回显在"page1.php"上的HTML表单中输入的数据 . 我知道我的一个问题是,当我的表格是"post"时,我有几个 $_GET 字段 .

但是,当我更改它以便一切都是 $_POST 时,计算器不再有效 . 我试图将其与其他人建议的不同代码片段放在一起 . "page1.php"上的表单有13个字段,名为"one" - "thirteen" . $ total显示1-13的值 .

<?php
  $submit = $_GET['submit'];
  if($submit == "true")
  {
    $total = ($_POST['one'] + $_POST['two'] + $_POST['three'] + $_POST['four']  + 
    $_POST['five'] + $_POST['six'] + $_POST['seven'] + $_POST['eight']+ $_POST['nine'] + 
    $_POST['ten']+ $_POST['eleven'] + $_POST['twelve']+ $_POST['thirteen']); 
    echo  " Your Price is \$ " .number_format ($total, 2, '.', ','). "<BR>";
    echo ('">Get Your Project Started</a>');
  }
?>

第二种形式使用隐藏值来回显来自page1.php的信息,还有三个名为“name”,“email”和“details”的字段 .

<?php
  $to = "jessica@designs.com";
  $message = "Pages:\t$_POST[one]\n";
  $message .= "Pages:\t$_POST[two]\n";
  $message .= "Pages:\t$_POST[three]\n";
  $message .= "Ecommerce:\t$_POST[four]\n";
  $message .= "No Ecommerce:\t$_POST[five]\n";
  $message .= "CMS:\t$_POST[six]\n";
  $message .= "No CMS:\t$_POST[seven]\n";
  $message .= "Audio or Video:\t$_POST[eight]\n";
  $message .= "Flash Intro:\t$_POST[nine]\n";
  $message .= "Image Gallery:\t$_POST[ten]\n";
  $message .= "Graphic Design or Logo:\t$_POST[eleven]\n";
  $message .= "Copy:\t$_POST[twelve]\n";
  $message .= "Images:\t$_POST[thirteen]\n";
  $message .= "Price Total:\t$_POST[total]\n";
  $message .= "Name:\t$_POST[name]\n";
  $message .= "Email:\t$_POST[email]\n";
  $message .= "\n";
  $message .= "\n";
  $message .= "Details:\t$_POST[details]\n";
  mail($to, $subject, $message, $headers) ;
  }
?>

那么什么是正确的PHP放在“page1.php”和“page2.php”?对不起代码是如此混乱,如果有人能指出我正确的方向,那将是伟大的 .

5 回答

  • 0

    PHP是无状态的除非你在会话中保存东西(这不安全吗?)

    您需要让page2.php读取page1.php中的所有值,并将它们存储在服务器端状态(会话)或客户端状态(cookie或表单中的隐藏字段)

    如果你想要任何这些安全或秘密,那么你也必须考虑所有这些 . 我解释的任何内容都不是秘密或安全的 .

    EDIT: 这里是page1.php的一个示例,它将page1.php的值作为get参数发送到page2.php . 您也可以使用隐藏字段,Cookie或会话执行此操作 .

    重要的是要记住,page2.php完全没有意识到page1.php,并且无法获得像它可以形成编程的值 . 当您看到完整的网页时,每个页面都会开始和结束它的生命,因此您必须使用一些额外的技巧来保持值 . 这些技巧是会话,cookie,表格帖子或获取 .

    <html>
    <head>
    <title>Page 1</title>
    </head>
    <body>
    <?php
    //set defaults assuming the worst
    $total = 0;
    $one =0;
    $two=0;
    
    //verify we have that value in $__POST
    if (isset($_POST['submit']))
    {
        $submit = $_POST['submit'];
        //If it is true, try some math
        if($submit == "sub-total")
            {
                if (isset($_POST['one']))
                {   
                    $one = $_POST['one'];
                    //Add checks to see if your values are numbers
                    if ( ! is_numeric($one)) { $one = 0;}
                }
    
                if (isset($_POST['two']))
                {
                    $two = $_POST['two'];
                    if ( ! is_numeric($two)) { $two = 0;}
                }
                $total = $one + $two;
                echo " Your Price is \$ " .number_format ($total, 2, '.', ','). "<BR>";
            }
        if($submit == "submit" )
        {
            //go to page two, with the total from page1.php passed as a $__GET value
            header("Location: page2.php?total=".$total);
        }
    }
    ?>
        <form method="post" action="page1.php?submit=true">
            <input type="text" name="one" id="one" value="<?=$one?>"/>
            <input type="text" name="two" id="two"  value="<?=$two?>"/>
            <input type="submit" name="submit" value="sub-total" />
            <input type="submit" name="submit" value="submit" />
        </form>
    </body>
    </html>
    
  • 0

    您可以尝试使用 $_REQUEST 而不是 $_GET$_POST - 它适用于两者 . 此外,如果您将 <input type='hidden' 放在第2页的表单中,并且您的变量从第1页发布,那么它们应该正确传递 .

  • 2

    你的php页面没有状态,所以你必须得到发布的变量,并通过隐藏的输入字段发送它们 .

    <input type="hidden".....
    

    您也可以使用会话,但如果您问我,将它们与表格一起使用会有些不自在 .

  • 6

    它取决于HTML method 属性如何将变量传递给PHP脚本 .

    在这种情况下,它听起来像 page1.php 没有任何副作用,只是传递值,所以 page1.php 上的表格应该使用 method=get ,读取这些字段的 page2.php 的代码可以在 $_GET 中找到它们 .

    page2.php 上的“提交”按钮(可能)在服务器端确实有副作用,因此它应该使用 method=post ,您可以从服务器端的 $_POST 读回 .

    此外,在填写第一页后,查看 page2.php 的HTML源代码,以查看值是否正确传递 .

  • 3

    回答不太晚,是的,最佳方式是使用 type=hidden ,正如其他人已经提到的那样 .

    page1将_POST发送到page2,它将所有内容“保存”在隐藏字段中,因此它可以将所有内容一起发送到最终(或另一个)页面 .

    但更重要的是,并且进入更广泛的话题,正在考虑为什么要使用页面来划分表格!

    对不起在这里触摸这个主题,我只想给我2美分 .

    不要页面表格

    我说最好的事情是尽可能避免分页,只有很好的理由才能做到这一点,如果你需要服务器验证 and 向后兼容不接受javascript的浏览器 .

    使用更新的资源

    布局和设计都可以使用 javascriptCSS 来实现,这两者都是为了这个 . 即使你做了用户"press next",使用 dhtml 和全部在1个文件中 . 需要服务器验证? ajax .

    除非您使用HTML框架(您可能不应该这样做),否则加载整个页面是一个冗余且不必要的服务器和客户端加载,在使用和编程时需要花费更多时间(以便将表单信息从一个地方传递到另一个) .

    并且它远远不是保存正在完成的状态的最佳方式 . 这是一个完全复杂的主题,但同样,ajax在这里也是最好的 .

相关问题