首页 > 解决方案 > PHP - 会话错误消息未显示

问题描述

我有一个带有联系表格的页面。如果字段为空/无效,我正在尝试在字段旁边显示一些错误消息。如果所有字段都正常,则字段的内容将发送到数据库。

验证本身有效。如果字段为空或无效,则不会将它们提交到数据库中。但是,字段旁边不会显示错误消息。

这是代码

带有名为 palaute3.php 的联系表单的页面:

<?php
session_start();



$_SESSION["nimiVirhe"]="";
$_SESSION["spostiVirhe"]="";
$_SESSION["palauteVirhe"]="";


$servername = "localhost";
$username = "username";
$password = "passwd";
$dbname = "dbname";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Game Over</title>
                <link href="https://fonts.googleapis.com/css?family=Press+Start+2P" rel="stylesheet">
                <link rel="stylesheet" type="text/css" href="tyyli1.css"/>
                <style type="text/css">
                @import url('https://fonts.googleapis.com/css?family=Press+Start+2P');
                </style> 
    </head>
    <body>



        <div id="container">

            <div id="header">
            </div>
            <div id="menuBG">
            </div>

            <ul class="navlist">
                <li><a href="index.html">Etusivu</a>
                </li>

                <li><a href="leffat.html">Leffat</a>
                </li>

                <li><a href="pelit.html">Pelit</a>
                </li>

                <li><a href="palaute.html" class="active">Ota yhteyttä</a>
                </li>

            </ul>




                <div id="content">



                <h3>Palaute</h3>
                    <p>Anna Palautetta sivujen ulkonäöstä tai vinkkejä uusiksi arvosteluiksi!</p>

                    <p><span class="error">Kaikki kentät ovat pakollisia</span></p>
                    <form method="post" action="validointi.php">
                    <table width="450px">
                        <tr>
                        <td valign="top">
                            <label for="nimi">Nimi</label>
                        </td>
                        <td valign="top"> 

                            <input type="text" name="nimi" /><span class="error"><?php echo $_SESSION["nimiVirhe"];?></span>
                        </td>
                        </tr>

                        <tr>
                        <td valign="top">
                            <label for="sposti">Sähköposti</label>

                        </td>
                        <td valign="top">
                            <input type="text" name="sposti" /><span class="error"><?php echo $_SESSION["spostiVirhe"];?></span>


                        </td>
                        </tr>

                        <tr>
                        <td valign="top">
                            <label for="palaute">Palaute</label>
                        </td>
                        <td valign="top">


                            <textarea  name="palaute" maxlength="1000" cols="30" rows="6"></textarea><span class="error"><?php echo $_SESSION["palauteVirhe"];?> </span>
                        </td>
                        </tr>

                        <tr>
                        <td colspan="2" style="text-align:center">
                        <input type="submit" value="Lähetä" name="submit">
                        </td>
                        </tr>


                        </table>

                    </form>
                    <?php
                    session_unset();
                    ?>







                    <p>
                    Palautteet tähän
                    </p>


<?php


$sql = "SELECT id, palaute FROM dbtable";


$result = mysqli_query($conn, $sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Palaute: " . $row["palaute"]. "<br>";
    }
} else {
    echo "0 results";
}

$conn->close();



 ?>






                </div>


                <div id="footer">
                    <p>© Game Over 2018 All rights reserved</p>
                </div>
        </div>
        </body>
</html>

这是验证:

<?php
session_start();
 $_SESSION["nimiVirhe"]="";
 $_SESSION["spostiVirhe"]="";
 $_SESSION["palauteVirhe"]="";

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

   if (empty($_POST["nimi"])) {
     $_SESSION["nimiVirhe"] = " Nimi on pakollinen.";
   }
   else {
     $nimi = $_POST["nimi"];
     $_SESSION["nimi"]=$nimi;
     if (!preg_match("/^[a-zA-Z ]*$/",$nimi)) {
       $_SESSION["nimiVirhe"] = " Nimi on väärässä muodossa.";
     }
   }

   if (empty($_POST["sposti"])) {
        $sposti = $_SESSION["sposti"];
        $_SESSION["spostiVirhe"] = " Sähköposti on pakollinen.";
   } 
   else {
        $sposti = $_POST["sposti"];
        $_SESSION["sposti"]=$sposti;
        if (!filter_var($sposti, FILTER_VALIDATE_EMAIL)) {
            $_SESSION["spostiVirhe"] = " Sähköpostiosoite on väärässä muodossa.";
        }
   }

   if (empty($_POST["palaute"])) {
        $_SESSION["palauteVirhe"] = "<br>Palaute on pakollinen.";
   } 
   else {
        $palaute = $_POST["palaute"];
        $_SESSION["palaute"]=$palaute;
   }



    if($_SESSION["nimiVirhe"] == "" && $_SESSION["spostiVirhe"] == "" && $_SESSION["palauteVirhe"] == ""){
        header("Location: yhteystesti.php");
        return;
    } else {
        header("Location: palaute3.php");
        return;
    }



   }


?>

数据库插入工作正常,所以我不打算在这里包含它。

知道我在这里做错了什么吗?

PS:这是一个学校作业,老师试图让它工作,但做不到。

标签: phpformsvalidation

解决方案


在你文件的顶部palaute3.php你有这个

$_SESSION["nimiVirhe"]="";
$_SESSION["spostiVirhe"]="";
$_SESSION["palauteVirhe"]="";

因此,您在使用它们之前重新初始化会话错误消息。

这 3 行应该在验证页面中,而不是在您的错误页面中!

删除它,它会工作。


推荐阅读