[英]How do I pass data between pages in PHP?
簡而言之,在“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” - “十三”。 $ 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”? 對不起代碼是如此混亂,如果有人能指出我正確的方向,那將是偉大的。
PHP是無狀態的除非你在會話中保存東西(這不安全嗎?)
您需要讓page2.php讀取page1.php中的所有值,並將它們存儲在服務器端狀態(會話)或客戶端狀態(cookie或表單中的隱藏字段)
如果你想要任何這些安全或秘密,那么你也必須考慮所有這些。 我解釋的任何內容都不是秘密或安全的。
編輯:這是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>
您可以嘗試使用$_REQUEST
而不是$_GET
或$_POST
- 它適用於兩者。 此外,如果您在第2頁的表單中<input type='hidden'
,並且您的變量已從第1頁發布,那么它們應該正確傳遞。
你的php頁面沒有狀態,所以你必須得到發布的變量,並通過隱藏的輸入字段發送它們。
<input type="hidden".....
您也可以使用會話,但如果您問我,將它們與表格一起使用會有些不自在。
它取決於HTML form
的method
屬性如何將變量傳遞給PHP腳本。
在這種情況下,聽起來像page1.php
沒有任何副作用,只是傳遞值,所以page1.php
上的page1.php
應該使用method=get
,並且讀取這些字段的page2.php
的代碼可以找到它們在$_GET
。
page2.php
上的Submit按鈕(推測)確實在服務器端有副作用,因此它應該使用method=post
,你可以從服務器端的$_POST
讀回來。
另外,在填寫第一頁后,查看page2.php
的HTML源代碼,以查看值是否正確傳遞。
回答有點遲,是的,最好的方法是使用type=hidden
就像其他人已經提到過的那樣。
page1將_POST發送到page2,它將所有內容“保存”在隱藏字段中,因此它可以將所有內容一起發送到最終(或另一個)頁面。
但更重要的是,並且進入更廣泛的話題,正在考慮為什么要使用頁面來划分表格!
對不起在這里觸摸這個主題,我只想給我2美分。
我說最好的事情是盡可能避免分頁,只有很好的理由才能做到這一點,如果你需要服務器驗證和向后兼容不接受javascript的瀏覽器。
布局和設計都可以使用javascript和CSS實現,這兩者都是為了這個。 即使你讓用戶“按下”,也可以使用dhtml和all in 1文件。 需要服務器驗證? 阿賈克斯 。
除非您使用HTML框架(您可能不應該這樣做),否則加載整個頁面是一個冗余且不必要的服務器和客戶端加載,在使用和編程時需要花費更多時間(以便將表單信息從一個地方傳遞到另一個)。
並且它遠遠不是保存正在完成的狀態的最佳方式。 這是一個完全復雜的主題,但同樣,ajax在這里也是最好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.