

現在、PHPで簡易掲示板を作っています。

そこで、投稿一覧のページから編集ボタンを押した際に、ログインをしていれば、編集の画面に飛べて、ログインしていない場合は投稿一覧の画面に戻るような機能をつけたいと思っています。

投稿一覧が「admin.php」で編集画面が「edit.php」です。

しかし、「admin.php」上で、ログインした上で編集ボタンを押しても、もれなく「edit.php」から「admin.php」に戻されてしまいます。

うまくログインしている際は「edit.php」に留まって欲しいです。

以下、「edit.php」のコードです。

[code]

    <?php
    var_dump($_SESSION['admin_login']);
    exit();
    $link= mysqli_connect("localhost","root","root","keijiban");
    
    date_default_timezone_set('Asia/Tokyo');
    
    if( empty($_SESSION['admin_login']) || $_SESSION['admin_login'] !== true ) {
    
        // ログインページへリダイレクト
        header("Location: ./admin.php");
    }
    
    if( !empty($_GET['comment_id'])&& empty($_POST['comment_id']) ) {
    
        $comment_id = (int)htmlspecialchars($_GET['comment_id'], ENT_QUOTES);
    
        // データベースに接続
        $mysqli = new mysqli( "localhost","root","root","keijiban");
    
        // 接続エラーの確認
        if( $mysqli->connect_errno ) {
            $error_message[] = 'データベースの接続に失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error;
        } else {
    
            // データの読み込み
            $sql = "SELECT * FROM comment WHERE id = $comment_id";
            $res = $mysqli->query($sql);
    
            if( $res ) {
                $arrayData  = $res->fetch_assoc();
            } else {
    
                // データが読み込めなかったら一覧に戻る
                header("Location: ./admin.php");
            }
    
            $mysqli->close();
        }
    
    } elseif( !empty($_POST['comment_id']) ) {
    
    }
    
    ?>
    
    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title>てりー掲示板 管理ページ（投稿の編集）</title>
    <style>
    
    .btn_cancel {
        display: inline-block;
        margin-right: 10px;
        padding: 10px 20px;
        color: #555;
        font-size: 86%;
        border-radius: 5px;
        border: 1px solid #999;
    }
    .btn_cancel:hover {
        color: #999;
        border-color: #999;
        text-decoration: none;
    }
    
    </style>
    </head>
    <body>
    <h1>てりー掲示板　管理ページ（投稿の編集）</h1>
    <?php if( !empty($error_message) ): ?>
        <ul class="error_message">
            <?php foreach( $error_message as $value ): ?>
                <li>・<?php echo $value; ?></li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
    <div class="container">
    
              <form method="post">
            <div class="form-group">
              <label for="form-mail">ユーザー名</label>
              <input type="username" class="form-control" name="username" placeholder="てりー"　value="<?php if( !empty($arrayData['username']) ){ echo $arrayData['username']; } ?>">
            </div>
            <div class="form-group">
              <label for="exampleInputComment">コメント</label>
              <input type="comment" class="form-control" name="comment" placeholder="自由に投稿！" value="<?php if( !empty($arrayData['comment']) ){ echo $arrayData['comment']; } ?>">
            </div>
            <a class="btn_cancel" href="admin.php">キャンセル</a>
            <button type="submit" class="btn btn-primary">更新</button>
            <input type="hidden" name="comment_id" value="<?php echo $arrayData['id']; ?>">
          </form>
    
    </div>
    </body>
    </html>
    
[/code]


CC BY-SA 4.0
2019-04-28T06:01:21.023
54537
2020-05-30T00:02:40.300
2019-05-03T16:39:24.993
3060
32797
question
php mysql
PHPでログインセッションをうまく作れない


僕はphp初心者ですが。  
まだ解決してなければ、参考までに。

ソース見ると、./admin.phpにリダイレクトする条件は2つあるようですね。

一つは、SESSIONの値が入っていないとき、２つ目は、SQLの実行に失敗したとき。

SESSIONの値が入らない原因として下記の点が考えられると思います。

  * SESSIONのキーの名前のタイプミスないか確認してみる。
  * ブラウザか、サーバの設定で、SESSIONの使用が制限されてる？かもしれないので、configを確認してみる。（完全に推測）
  * 確か、SESSION使うときって、作法として最初にsession_start()をスクリプトで実行しないといけないはず。なので、スクリプトの最初のほうでsession_start()を１行追加してみる。

SQL実行失敗の原因としては、下記が考えられると思います。

  * DBに接続できていない。サーバ名、DB名、テーブル名に間違いないか確認する。
  * SQL文がおかしいかもしれない。スクリプト内でSQL文を生成していると思いますが、その生成されたSQL文をprintとかechoとかして、デバックして確認してみる。

上記の要素が原因となっているかもしれないので、一度確認してみてください。


CC BY-SA 4.0
2019-05-03T14:13:04.080
54690
2019-05-03T16:35:59.023
2019-05-03T16:35:59.023
29826
34173
54537
answer