2016-04-29 22 views
0

私はユーザーのための登録を作成しています。ユーザー名がすでにデータベースに存在する場合、プログラムはメッセージを表示する必要があります。それは動作しますが、なぜプログラムがメッセージを初めて表示しないのか分かりません。たとえば、michaelという名前が既に登録されていて、再度入力しようとすると、「ユーザー名は既に存在します」というメッセージは表示されません。しかし、もう一度やり直すと表示されます。または既に登録されている別の名前で試してみると表示されます。しかし、初めてではなく、2回目以降。私を手伝ってくれますか。データベースメッセージにユーザーが既に存在しています

<?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

データベースをチェックしてライブを更新するには、ajaxコールを実行する必要があります。 – DevDonkey

+0

それはすばらしいことですが、厳密には必要ではありません。 – Rick

+0

簡単で一般的なトラブル。 PHPをマニュアルで実行すると、POST文脈では、最初にHTMLを表示し(セッションセットがないので)、$ _POSTを解析して、すでにあなたのSESSIONをtrueに設定します。それ以外は何もないので、あなたのHTMLはエラーメッセージなしで既にビルドされています。リフレッシュするときに表示されるのは、SESSIONに格納されているからです。 HTMLテキストをエコーする前に、常にPHPの処理を行ってください。うまくいきます。 PHPの部分を最初に置く場合は、SESSIONを行う必要はありません。 – niconoe

答えて

2

特定のセッション変数が設定されているかどうか確認している場合は、「ユーザーが既に存在します」というメッセージが表示されます。あなたがすでにすべてを印刷した後で、をこの変数に設定しているということです。基本的に最初に「それは設定されていますか?それを設定します。その結果、あなたのメッセージは印刷されません(コードはすでに評価されているため)。

セッション変数であるため、セッション中に設定されたままです。したがって、ページをリロードすると、メッセージと表示されます。それから、別の既存のユーザーを試してみると、その変数はすでに設定されています。そのため、メッセージは表示されます(基本的に前のユーザー名)。

この問題を解決するには、下位のPHPコードブロックをHTMLの上に移動する方法があります。そうすれば、header("Location: ...")も動作します。

関連する問題