将会话值传递给其他页面

时间:2014-10-08 16:18:59

标签: php session

我有两个页面:order.php和checkout.php。我在订单页面中有3个项目,我想将这些项目的数量传递到结帐页面。

我想问题出在isset($_POST['Submit'])上。我的猜测是,当我按下提交而不将值添加到会话变量时,它仍然会直接进入结帐页面。

我一直试图从这样的顺序传递值:

<?php echo '<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">';
session_start();

?>
<html>
<head>
<title>Lomake-esimerkki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body>

<?php
error_reporting(E_ALL); // raportoidaan virheet
ini_set('display_errors','On'); // näytetään ne myös

echo <<<END
<form action="checkout.php" 
method="post">
<p>Gaming Computer - 5 e/kpl <label>How many? <input type="text" name="maara1" /></label></p>
<p>Frigge - 10 e/kpl <label>How many? <input type="text" name="maara2" /></label></p>
<p>IKEA-table - 15 e/kpl <label>How many? <input type="text" name="maara3" /></label></p>
<p><input type="submit" name="submit" value="Order"/></p>
<input type=hidden name=price1 value=5>
<input type=hidden name=price2 value=10>
<input type=hidden name=price3 value=15>
</form>
<hr />
END;

if (isset($_POST['Submit'])) { 
    $_SESSION["maara1"] = $_POST["maara1"];
    $_SESSION["maara2"] = $_POST["maara2"];
    $_SESSION["maara3"] = $_POST["maara3"];
}
?>

</body>
</html>

在结帐时,我尝试打印一个会话值作为测试:

<?php echo '<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">';
session_start();
?>
<html>
<head>
<title>Lomake-esimerkki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body>

<?php
error_reporting(E_ALL); // raportoidaan virheet
ini_set('display_errors','On'); // näytetään ne myös

print ($_SESSION["maara1"]);
?>
</body>
</html>

2 个答案:

答案 0 :(得分:4)

  

“我想问题出在isset($_POST['Submit'])。”

是的,问题在于if (isset($_POST['Submit']))

您的提交按钮名为submit,而不是Submit

<input type="submit" name="submit" value="Order"/>

将其更改为

<input type="submit" name="Submit" value="Order"/>
  • 他们区分大小写。

或保持原样并改变

if (isset($_POST['Submit']))

if (isset($_POST['submit']))
  • 任何一种方法都可行。你只需要让它们(字母大小写)匹配。

正在发生的事情是,PHP正在寻找一个名为Submit的命名元素。

仅此一项就可以了应该抛出:

  

未定义的索引提交...


<强> 旁注:

我注意到了:

<input type=hidden name=price1 value=5>

和其他输入。

我建议您使用它周围的引号:

<input type="hidden" name="price1" value="5">

同时为其他人做同样的事情,因为它可能会产生不利影响和/或意外结果 我以前见过这种情况。


修改

您需要在第二页中移动整个块,而不是在第一页。

if (isset($_POST['Submit'])) { 
    $_SESSION["maara1"] = $_POST["maara1"];
    $_SESSION["maara2"] = $_POST["maara2"];
    $_SESSION["maara3"] = $_POST["maara3"];
}
然后从那里做print ($_SESSION["maara1"]);

您的第一页无法识别POST变量,因为它们尚未设置。


编辑#2

您可以尝试为输入设置值value="{$_SESSION["maara1"]}"

即:

旁注:您可以尝试<form action="" method="post">而不是<form action="checkout.php" method="post">

但是,我不确定以下是否是你想要的。如果action=""它确实有效,但在设置之前尝试获取值不起作用。这不是会议的工作方式。

有点像期待你还没写过的考试中的A+如果可以的话。

echo <<<END
<form action="checkout.php" method="post">
<p>Gaming Computer - 5 e/kpl <label>How many? <input type="text" name="maara1" value="{$_SESSION["maara1"]}" /></label></p>
<p>Frigge - 10 e/kpl <label>How many? <input type="text" name="maara2" /></label></p>
<p>IKEA-table - 15 e/kpl <label>How many? <input type="text" name="maara3" /></label></p>
<p><input type="submit" name="Submit" value="Order"/></p>
<input type=hidden name=price1 value=5>
<input type=hidden name=price2 value=10>
<input type=hidden name=price3 value=15>
</form>
<hr />
END;

if (isset($_POST['Submit'])){

$_SESSION["maara1"] = $_POST["maara1"];

$mar1 = $_SESSION["maara1"];

echo $mar1;

}

但正如你在评论中所说的那样:“我在第二页上使用会话变量有什么意义,那么我是否可以从$ _POST引用它们?”

  • A:正好。

答案 1 :(得分:0)

我去了,就这样做了。有了两个按钮,它现在也更接近webstore。所以我按第一个按钮添加项目的数量,同时设置会话变量。然后我按第二个按钮进入第二页结账。你们的想法是什么?

第一页:

<?php echo '<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">';
session_start();

?>
<html>
<head>
<title>Lomake-esimerkki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body>

<?php
error_reporting(E_ALL); // raportoidaan virheet
ini_set('display_errors','On'); // näytetään ne myös

echo <<<END
<form action="teht7.php" 
method="post">
<p>Gaming Computer - 5 e/kpl <label>How many? <input type="text" name="maara1" /></label></p>
<p>Fridge - 10 e/kpl <label>How many? <input type="text" name="maara2" /></label></p>
<p>IKEA-table - 15 e/kpl <label>How many? <input type="text" name="maara3" /></label></p>
<p><input type="submit" name="submit" value="Valitse tuotteet"/></p>

</form>
<hr />

<form action="teht7_kassa.php" 
method="post">
<p><input type="submit" name="submit" value="Siirry kasssalle"/></p>
<input type=hidden name=price1 value=5>
<input type=hidden name=price2 value=10>
<input type=hidden name=price3 value=15>
</form>
<hr />

END;

if (isset($_POST['submit'])) { 
    $ostostenmaara = $_POST["maara1"] + $_POST["maara2"] + $_POST["maara3"];
    print ("Ostoskorissa on: $ostostenmaara tuotetta");
    $_SESSION["maara1"] = $_POST["maara1"];
    $_SESSION["maara2"] = $_POST["maara2"];
    $_SESSION["maara3"] = $_POST["maara3"];
}

?>

</body>
</html>

第二页:

<?php echo '<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">';
session_start();
?>
<html>
<head>
<title>Lomake-esimerkki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body>

<?php
error_reporting(E_ALL); // raportoidaan virheet
ini_set('display_errors','On'); // näytetään ne myös




    $maara1 = $_SESSION["maara1"];
    $maara2 = $_SESSION["maara2"];
    $maara3 = $_SESSION["maara3"];
$summa = $_POST["price1"]*$maara1+$_POST["price2"]*$maara2+$_POST["price3"]*$maara3;
    print ("Ostostesi yhteissumma on: $summa euroa");

?>
</body>
</html>