php - 用户已存在于数据库中 php 未显示消息

标签 php mysql

我正在为用户创建一个寄存器。如果数据库中已存在该用户名,则程序需要显示一条消息。它有效,但我不知道为什么程序第一次不显示该消息。例如,如果名称 michael 已注册,并且我尝试再次输入,则不会显示消息“用户名已存在”。但如果我再试一次,就会显示。或者,如果我尝试使用已注册的其他名称,则会显示 。但不是第一次,只有第二次及之后。你能帮我一下吗?

<?php
session_start();
if(!isset($_SESSION['$k'])) {
    $_SESSION['$k'] = false;
}
?>

<html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="register.css">
    <title>Word Games Register</title>
</head>

<body>
    <form action="" method="POST">
        <a href="../index.php"><img src="../img/close.png" /></a>
        <h2>REGISTRARSE</h2>
        <input type="text" placeholder="Usuario" name="user">
        <input type="password" placeholder="Contraseña" name="password">
        <input type="text" placeholder="E-mail" name="email">
        <?php
            if($_SESSION['$k']) {
                echo '<h5 id="mensaje">El usuario ya existe</h5>';
                unset($_SESSION['$k']);
            }
        ?>
        <input type="submit" value="Enviar" name="btn">
    </form>
</body>
</html>

<?php
if(isset($_POST['btn'])){
    $user = $_POST['user'];
    $pass = $_POST['password'];
    $email = $_POST['email'];

    $link = mysqli_connect("localhost", "root", "") or die ("Error       conectando al servidor" . mysqli_error());
    mysqli_select_db($link, "wordgames") or die ("Error seleccionando la base de datos" . mysqli_error());
    mysqli_query($link, "SET NAMES 'utf8'");

    $resultado = mysqli_query($link, "select * from usuario where usuario='$user'") or die ("Error en la consulta" . mysqli_error());
    $filas = mysqli_num_rows($resultado);
    if($filas > 0){
        $_SESSION['$k'] = true;
    } else{
        mysqli_query($link, "insert into usuario values (NULL, '$user', '$pass', '$email')") or die ("Error en la consulta". mysqli_error());
        mysqli_close($link);
        header("location:../index.php");
    }


}
?>

最佳答案

您正在检查是否设置了某个 session 变量,如果是,则显示“用户已存在”消息。关键是你在打印完所有内容之后设置这个变量,所以基本上你首先检查“它设置了吗?”然后你设置它。因此,您的消息不会被打印(因为该代码已经被评估)。

由于它是一个 session 变量,因此它在 session 期间保持设置状态。因此,如果您重新加载页面,您的消息将会显示。如果您随后尝试另一个现有用户,则该变量之前已设置,因此会显示该消息(尽管基本上是针对以前的用户名)。

解决此问题的一种方法是将较低的 PHP 代码块移至 HTML 之上;这样,您的 header("Location: ...") 也将起作用。

关于php - 用户已存在于数据库中 php 未显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36942259/

相关文章:

MySQL Workbench 需要在表名和列之间输入命令

php - Mysql - 查看值是否已存在

php - PHP 面向对象编程中的困惑

php - 如何读取名称中包含空格和特殊字符的文件?

PHP 私信 (PM) 系统

mysql-workbench - 如何将 DISTINCT 数据导出到 DISTINCT 文件

mysql - hibernate 映射mysql

security - PHP session 安全

php - 是否可以插入一行,但前提是值尚不存在?

mysql - 错误代码 : 1215. 无法添加外键约束