我正在为用户创建一个注册表。如果数据库中已存在用户名,则程序需要显示消息。它有效,但我不知道该程序为什么第一次显示该消息。例如,如果名称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");
}
}
?>
答案 0 :(得分:2)
您正在检查是否设置了某个会话变量,如果是,则显示您的&#34;用户已存在&#34;信息。关键是你已经打印完所有内容后设置这个变量,所以基本上你先检查&#34;它是否已设置?&#34;然后你设置它。因此,不会打印您的消息(因为该代码已经过评估)。
由于它是会话变量,因此在会话期间保持设置。因此,如果您重新加载页面,则会显示 消息。如果您再尝试另一个现有用户,则该变量先前已设置,因此会显示该消息(尽管基本上是以前的用户名)。
解决此问题的一种方法是将较低的PHP代码块移到HTML之上;这样,您的header("Location: ...")
也会有用。