簡體   English   中英

如何在PHP中的頁面之間傳遞數據?

[英]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 formmethod屬性如何將變量傳遞給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的瀏覽器。

使用更新的資源

布局和設計都可以使用javascriptCSS實現,這兩者都是為了這個。 即使你讓用戶“按下”,也可以使用dhtml和all in 1文件。 需要服務器驗證? 阿賈克斯

除非您使用HTML框架(您可能不應該這樣做),否則加載整個頁面是一個冗余且不必要的服務器和客戶端加載,在使用和編程時需要花費更多時間(以便將表單信息從一個地方傳遞到另一個)。

並且它遠遠不是保存正在完成的狀態的最佳方式。 這是一個完全復雜的主題,但同樣,ajax在這里也是最好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM