php - 为什么它只显示变量“voornaam”的值?
问题描述
第一次在 PHP 中使用 Sessions。我正在尝试在另一个页面上打印出部分付款信息,它将您重定向到该页面,但它告诉我当我们在下一页时会话变量未定义。对于第一个会话变量 AKA voornaam(荷兰语中的名字)并没有这样说
付款页面(bestellingmaken.php):
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bestellen</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" />
</head>
<body>
<div class="sushipic">
<img src="images/sushipic.jpg">
</div>
<div class="bestellingpagina">
<h1>Maak hier uw bestelling</h1>
//Form to make the order with.
<form action="bestellingoverzicht.php" method="post">
<p>Voornaam <input type="text" name="voornaam"/></p>
<p>Achternaam <input type="text" name="achternaam"/></p>
<p>Email-adres <input type="text" name="emailadres"/></p>
<p>Straatnaam <input type="text" name="straatnaam"/></p>
<p>Postcode <input type="text" name="postcode"/></p>
<p>Woonplaats <input type="text" name="woonplaats"/></p>
<p>Telefoonnummer <input type="text" name="telefoonnummer"/></p>
<p>Te bestellen drankjes:</p>
<p>Cola <input type="checkbox" name="cola"/><select name="colahvl">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
</select></p>
<p>Sprite <input type="checkbox" name="sprite"/><select name="spritehvl">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
</select></p>
<p>Te bestellen gerechten</p>
<p>Sushi familiegerecht (Voor 5 mensen)<input type="checkbox" name="gerechten"/></p>
<p>Teriyaki 5 rolls <input type="checkbox" name="gerechten"/></p>
//Submit button to submit the order with!
<p><input type="submit" name="input" value="Doorgaan"/></p>
</form>
</div>
<?php
if (isset($_POST['input'])){
//Sets the Session variables for all variables with the input value, so we get to use it on the next page.
//Voornaam
$voornaam = $_POST['voornaam'];
$_SESSION["voornaam"] = $voornaam;
}
//Achternaam
$achternaam = $_POST['achternaam'];
$_SESSION["achternaam"] =$achternaam;
}
//EmailAdres
$emailadres = $_POST['emailadres'];
$_SESSION["emailadres"] = $emailadres;
//Straatnaam
$straatnaam = $_POST['straatnaam'];
$_SESSION["straatnaam"] = $straatnaam;
//Postcode
$postcode = $_POST['postcode'];
$_SESSION["postcode"] = $postcode;
//Woonplaats
$woonplaats = $_POST['woonplaats'];
$_SESSION["woonplaats"] =$woonplaats;
//Telefoonnummer
$telnmmr = $_POST['telefoonnummer'];
$_SESSION["telefoonnummer"] =$telnmmr;
//Cola
$colaselect = $_POST['cola'];
$_SESSION["colaselect"] =$colaselect;
$colaAantal = $_POST['colahvl'];
//Pepsi
$spriteselect = $_POST['sprite'];
$spriteaantal = $_POST['spritehvl'];
}
?>
</body>
</html>
显示付款信息的页面(bestellingoverzicht.php):
<?php
session_start();
echo print_r($_SESSION);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bestellen</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" />
</head>
<body>
<div class="sushipic">
<img src="images/sushipic.jpg">
</div>
<h1>Uw bestellingsgegevens:</h1>
<p>Naam: <?php echo $_SESSION["voornaam"].$_SESSION["achternaam"]; ?></p>
<p>Email: <?php echo $_SESSION["emailadres"]; ?></p>
<p>Adres: <?php echo $_SESSION['straatnaam'].$_SESSION["postcode"]; ?></p>
<p>Plaats: <?php echo $_SESSION["woonplaats"]; ?></p>
<p>Telefoonnummer: <?php echo $_SESSION['telefoonnummer']; ?></p>
<?php
if (isset($colaselect))
{
echo "Er zijn " . $colaAantal . " blikjes Sprite besteld";
}
if (isset($spriteselect))
{
echo "Er zijn " . $spriteaantal . " blikjes Sprite besteld";
}
?>
</body>
</html>
解决方案
在您当前的代码中,您将表单提交到 bestellingoverzicht.php(您在表单中action
设置了该表单)。所以,bestellingmaken.php 永远不会得到这些值。
要解决此问题,您可以将代码从 移动bestellingmaken.php
到bestellingoverzicht.php
.
此外,在您当前拥有的代码中bestellingmaken.php
,您拥有if (isset($_POST){
在 'voornaam' 部分之后关闭的代码。然后你有更多的设置器(将 achternaam 移动到会话等),但语法不正确,也需要放在if $_POST
.
由于这是某种形式的作业,因此需要学习一些额外的小东西:
使用适当的缩进。里面的所有东西都{}
必须向右移动 1tab/4spaces。如果您有if
in if
,则需要缩进 2 个制表符。
如果您在当前代码中执行此操作,您将在没有我们帮助的情况下在上面的代码中遇到问题 :)
此外,您不需要将 分配$_POST
给变量,并将其分配给会话:
$voornaam = $_POST['voornaam'];
$_SESSION["voornaam"] = $voornaam;
// This is also fine, possible even better:
$_SESSION['voornaam'] = $_POST['voornaam'];
这节省了一行代码,而你有 8 行代码,所以你节省了 8 行代码,从而得到更小、更清晰的代码。
最后,您可能需要稍微了解一下functions,这将使您的代码更加易于管理,而且工作量很小。