2017-04-16 11 views
0

他のページでも同じ方法を使用しています。 たとえば、ログインページでこれを使用します。ユーザーがログインフォームを入力すると、データベースに問い合わせるためにphpファイルが呼び出されます。クエリが失敗すると、セッション変数にエラーが設定され、ログインページにリダイレクトされます。ログインページには、そのセッション変数が設定されているかどうかを確認する場所があります。存在する場合は、エラーメッセージが表示されます。エラーメッセージ付きのPHPページリダイレクトは、ページ更新後にのみ表示されます。

エラーメッセージを表示するのと同じ方法を再利用しています。登録しようとしているユーザーの方が、このページに既にサインアップしている場合、データベースを照会するphpファイルでエラーが発生します。これと同じ方法は、ログインページの場合と同じように動作します。ただし、ページリフレッシュ後にのみ表示されますが、これは理想的ではありません。ここで

はアップに署名するユーザーのためのHTMLを保持しているPHPファイルであり、それが設定されていた場合、エラーメッセージが表示されます。

<?php 
if(isset($_SESSION['signUpError'])) { 
    $error = $_SESSION['signUpError']; 
    unset($_SESSION['signUpError']); 
    echo '<div class="alert alert-warning alert-dismissible" 
    role="alert" id="logError" style="width:600px; margin-left:auto; margin-right:auto;"> 
    <span type="button" class="close" data-dismiss="alert" aria- 
    label="Close"><span aria-hidden="true">&times;</span></span> 
    <strong>' . $error . '</strong></div>'; 
}else{ 
    $error = ""; 
} 
?> 

そして、彼らがサインアップした後に呼ばれていますPHPファイル:

ログインページの
<?php 
    session_start(); 
    include("../includes/databaseHandler.inc.php"); 

    $title = $_POST['title']; 
    $newTitle = $_POST['newTitle']; 
    $id = $_POST['id']; 
    $joinName= "%".$_POST['joinName']."%"; 

if($stmt = mysqli_prepare($conn, "SELECT title FROM rooms WHERE title LIKE ?")){ 
    mysqli_stmt_bind_param($stmt, 's', $joinName); 
    mysqli_stmt_execute($stmt); 
    $result = mysqli_stmt_get_result($stmt); 
    if($row = mysqli_fetch_assoc($result)){ 
    $_SESSION['signUpError'] = "This Dentist/Hygienist is already assigned to a room!"; 
    header('Refresh:5; url = ../dentist_home.php'); 
    exit; 
    } 
} 

if($stmt = mysqli_prepare($conn, "UPDATE rooms SET title = ? WHERE title = ? AND id = ?")){ 
    mysqli_stmt_bind_param($stmt, "sss", $newTitle, $title, $id); 
    mysqli_stmt_execute($stmt); 
    $result = mysqli_stmt_get_result($stmt); 
} 

mysqli_close($conn); 
?> 

私は、このページには、ページが更新される場合でも、一切のエラーが表示されないことを使用している場合、私はheader("Location: file_name.php");を使用しますが。私はまだPHPに新しいことがあるので、何が間違っているのかについての洞察はすばらしいものになるでしょう。

+0

です。セッションはセッションの開始後にのみ設定されました –

+1

これは、エラーメッセージが表示されるページのsession_start()を呼び出さなかったことを意味しますか?それがあなたが思っているものなら、セッション開始を呼びましたが、違いがあれば、そのページの上部にある別のPHPブロックにあります。 – Frank

答えて

0

だから、何を言っていることは次のとおりです。

  1. 誰かがあなたの第二のPHPブロックを含むファイルに行きます。
  2. すでにdbに一致する行があります。
  3. スクリプトはセッションでエラーメッセージを設定し、ログインページにリダイレクトします。
  4. ログインページはエラーを表示するはずですが、ページがリフレッシュされるまで表示されません。

そうですか?

+0

はい、上のコードで上記のajaxリクエストは、表示される2番目のPHPブロックであるchangeRoomName.phpというファイルに情報を渡します。データベースに出ると、サインアップした人の名前が既に存在するかどうかが調べられます。$ _SESSION ['signUpError']メッセージが設定されている場合は、サインアップしようとしたページにリダイレクトされます。そしてそのエラーメッセージはdentist_home.phpファイルに表示されます。これは上のブロックのコードです – Frank

+0

何百万ものかもしれません。可能性のあるスレッドがあります:https://stackoverflow.com/questions/17242346/php-session-lost-after-redirect – Phl3tch

関連する問題