首页 > 解决方案 > 为什么它只显示变量“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>

订单信息页面

标签: phphtml

解决方案


在您当前的代码中,您将表单提交到 bestellingoverzicht.php(您在表单中action设置了该表单)。所以,bestellingmaken.php 永远不会得到这些值。

要解决此问题,您可以将代码从 移动bestellingmaken.phpbestellingoverzicht.php.

此外,在您当前拥有的代码中bestellingmaken.php,您拥有if (isset($_POST){在 'voornaam' 部分之后关闭的代码。然后你有更多的设置器(将 achternaam 移动到会话等),但语法不正确,也需要放在if $_POST.


由于这是某种形式的作业,因此需要学习一些额外的小东西:

使用适当的缩进。里面的所有东西都{}必须向右移动 1tab/4spaces。如果您有ifin if,则需要缩进 2 个制表符。
如果您在当前代码中执行此操作,您将在没有我们帮助的情况下在上面的代码中遇到问题 :)

此外,您不需要将 分配$_POST给变量,并将其分配给会话:

$voornaam = $_POST['voornaam'];
$_SESSION["voornaam"] = $voornaam;

// This is also fine, possible even better:
$_SESSION['voornaam'] = $_POST['voornaam'];

这节省了一行代码,而你有 8 行代码,所以你节省了 8 行代码,从而得到更小、更清晰的代码。

最后,您可能需要稍微了解一下functions,这将使您的代码更加易于管理,而且工作量很小。


推荐阅读