在上的“page1.php中”概括地说我有由一个HTML表格的一个计算器,然后PHP代码总计的输入,并显示的总价格。 以下的价格,这也显示一个链接到包含HTML表单,他们可以输入自己的联系信息“则page2.php”。 在提交表单他们在定价计算器,以及对“使page2.php”中的联系信息“page1.php中”所做的选择是通过电子邮件发送给我,他们将被重定向到主页。
在提交给我的电子邮件,我收到来自“则page2.php”的联系信息,但我没有收到来自“page1.php中”任何东西,所以变量没有得到正确传递。 除了在每一页上的PHP,我正在使用的“使page2.php” HTML表单隐藏价值呼应这是在HTML表单中输入的“page1.php中”的数据。 我知道,我的问题之一是,我有一对夫妇的$_GET
领域时,我的方式是“后”。
然而,当我改变它,这一切都是$_POST
,计算器不再工作。 我试图与他人建议的代码片段不同干脆把这个。 在“page1.php中”的形式有13个领域,命名为“一” - “十三”。 $总显示的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中的信息,并有一个名为“名”,“电子邮件”和“细节”三个领域。
<?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”? 对不起代码是这样一个烂摊子,如果任何人都可以在正确的方向指向我,那将是巨大的。
PHP是无状态的,除非你保存会话的东西(这是不安全的吗?)
您需要做使page2.php从阅读page1.php中所有的值,并将其存储在服务器端的状态(会话)或客户端状态(cookie或形式,也许隐藏字段)
如果你想要的任何这种安全或机密的,那么你必须考虑所有的这一点。 没什么我解释为以任何方式或秘密安全。
编辑:这是发送的page1.php中的值,以使page2.php作为GET参数的page1.php中的例子。 您可以使用隐藏字段,饼干或会话做到这一点。
重要的是要记住的是,使page2.php是完全不知道的page1.php中,像你这样可以形成编程不能得到的值。 每个页面的开始和结束它是由你看到一个完整的网页时的生活,所以你必须使用一些额外的技巧,保持值。 这些招数会议,饼干,表单提交,或获取。
<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>
您可以尝试使用$_REQUEST
而不是$_GET
或$_POST
-它适用于这两种。 另外,如果你把<input type='hidden'
的形式第2页上的变量,从第1页,他们应该得到的权利传承下去公布。
你的PHP页面没有状态,所以你必须获得发布的变量,并通过隐藏输入字段一起发送。
<input type="hidden".....
你也可以使用会话,但它是一个有点hackish如果你问我用的形式使用它们。
这取决于method
的HTML属性form
的变量是怎样传递给你的PHP脚本。
在这种情况下,这听起来像page1.php
没有任何副作用,只是传递价值,等等形式page1.php
应该使用method=get
,而代码page2.php
读取这些领域可以找到他们在$_GET
。
提交按钮page2.php
(大概)确实对服务器端的副作用,所以它应该使用method=post
,你可以读回$_POST
在服务器端。
此外,看一看的HTML源page2.php
填写第一页,看是否值正确传递后。
有点晚了就回答,是的,最好的办法是使用type=hidden
正如其他人已经提到。
第1页发送到_POST第2页,其中“拯救”它的所有的隐藏字段,所以它可以一起发送一切最终(或其他)页面。
但更重要的,并且要更广泛的话题,这就是为什么使用网页都以分割的形式考虑!
对不起,这里触及这个问题上,我只是觉得给我的2美分。
不要页面形式
我说最好的办法是避免寻呼尽可能只有很好的理由这样做,如果你需要服务器验证,并与不接受JavaScript的浏览器向后兼容性所以会。
使用较新的资源,而不是
布局和设计都可以使用JavaScript和CSS,这都意味着那些实现。 即使你的用户“按下一步”,使用DHTML和所有在一个文件中。 需要服务器验证? 阿贾克斯 。
除非你使用HTML框架(你可能不应该),加载整个页面是需要更多的时间使用和编程都(从一个地方采取的形式传递信息的照顾到冗余和不必要的服务器和客户端负载另一个)。
和它的远远不是拯救的精选做什么工作状态的最佳方式。 当然,这是对自己的整体复杂的问题,但同样,阿贾克斯将是最好的位置。