以下、PHPでCRUDを作成しています。
PHPでユーザー登録後、ログイン情報を取得できずに詰まっています。
実際に投稿しようと思った際、ユーザー情報を取得できずにログイン画面にいってしまいます。
こちら、調べてみたり、公式ドキュメントを読んだのですが、解決策が見つからず、原因わかる方いますか?
ログイン情報を確保したいのですが、以下のようになってしまいます。
//users/login.php <?php require('../common/head_info.php'); ?> <?php require('../common/database.php'); require('../common/auth.php'); //POST送信された場合 if(!empty($_POST)) { $email=$_POST['email']; $pass = $_POST['pass']; //未入力チェック validateNot($email,'email'); validateNot($pass,'pass'); if(empty($err_msg)) { if(empty($err_msg)) { $database_handler = getDatabaseConnection(); if ($statement = $database_handler->prepare('SELECT id, name, password FROM users WHERE email = :email')) { $statement->bindParam(':email', $email); $statement->execute(); } header('Location: ../tweets/index.php'); } } } ?> <div class='main-top'> <div class='form-login'> <div class="form-login-list"> <form action="" method='post' class='form'> <label> <input type="text" name='email' placeholder="メールアドレス" value="<?php print(htmlspecialchars($_POST['email'],ENT_QUOTES));?>"> <div class="error_mes"> <?php if(!empty($err_msg['email'])) echo $err_msg['email']; ?> </div> </label> <label> <input type="password" name='pass' placeholder="パスワード" value="<?php print(htmlspecialchars($_POST['pass'],ENT_QUOTES));?>"></br> <div class="error_mes"> <?php if(!empty($err_msg['pass'])) echo $err_msg['pass']; ?> </div> <span class='form-rule'>※英数字8文字以上</span> </label> <label> <input type="checkbox" name='pass_save'>次回ログインを省略する </label> <div class='button-container'> <input type="submit" value='ログインする'> </div> </form> </div> </div> </div>
//common/database.php <?php define('message01', '入力必須です'); define('message02', 'ニックネームは256文字以内で入力してください。'); define('message03', 'パスワードは256文字以内で入力してください。'); define('message04', 'パスワードは半角英数字8文字以上で入力してください。'); //================================ // ログ //================================ //画面にエラーを表示させるか ini_set('display_errors', 'On'); //ログを取るか ini_set('log_errors', 'On'); //ログの出力ファイルを指示 ini_set('error_log', 'php.log'); session_start(); /** * PDOを使ってデータベースに接続する * @return PDO */ function getDatabaseConnection() { try { $database_handler = new PDO('mysql:dbname=aaa;host = 127.0.0.1;port=8889;charset=utf8', 'root', 'root'); } catch (PDOException $e) { echo "DB接続に失敗しました。<br />"; echo $e->getMessage(); exit; } return $database_handler; } // //================================= // //エラーメッセージ格納用の配列 // //================================= $err_msg = array(); //未入力チェック function validateNot($str,$value){ if(empty($str)) { global $err_msg; $err_msg[$value] = message01; } } //ニックネームの最大文字数チェック function validateNameMaxLen($str,$value){ //全角も半角も1文字として扱う if(mb_strlen($str)>256){ global $err_msg; $err_msg[$value] = message02; } } //パスワードの最大文字数チェック function validatePassMaxLen($str,$value){ //全角も半角も1文字として扱う if(mb_strlen($str)>256){ global $err_msg; $err_msg[$value] = message03; } } //パスワードの最小文字数チェック function validatePassMinLen($str,$value){ //全角も半角も1文字として扱う if(mb_strlen($str)<8){ global $err_msg; $err_msg[$value] = message04; } }
//common/head_info.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> <link rel="stylesheet" href="../public/css/style.css"> </head> <body> <script src='https://code.jquery.com/jquery-3.4.1.min.js'></script> </body>
//tweets/create.php <?php require('../common/head_info.php'); require('../common/database.php'); require('../common/auth.php'); ?> <?php if (!isLogin()) { header('Location: ../users/login.php'); exit; } $user_id = getLoginUserId(); $database_handler = getDatabaseConnection(); //post送信されていた場合 if(!empty($_POST)) { //バリデーションチェック $title = (isset($_POST['title'])) ? $_POST['title'] : ''; $content = (isset($_POST['content'])) ? $_POST['content'] : ''; print_r('debug',$title); print_r('debug',$content); // //最大文字数チェック // validMaxLen($comment, 'comment'); // //未入力チェック // validNotEntered($comment, 'comment'); if(empty($err_msg)) { //例外処理 try { //DB接続 $database_handler = getDatabaseConnection(); // プリペアドステートメントで SQLをあらかじめ用意しておく $statement = $database_handler->prepare('INSERT INTO tweets (user_id, title, content) VALUES (user_id, :title, :content)'); //指定された変数名にパラメータをバインド(紐付け) $statement->bindParam(':title', ($title)); $statement->bindParam(':content', ($content)); $statement->bindParam(':user_id', ($user_id)); $statement->execute(); $_SESSION['select_memo'] = [ 'id' => $database_handler->lastInsertId(), 'title' => $title, 'content' => '', ]; //クエリ成功の場合 if($statement) { $_POST = array(); //postをクリア header('Location:../tweets/index.php'); //自分自身に遷移する exit(); } } catch(Exception $e) { error_log('エラー発生:'. $e->getMessage()); } } } ?> <?php if(!empty($_SESSION['user_id'])) { ?> <div class="main-top"> <form action="" method='post' class='form review-form'> <div class='button-containers'> <div class="tweet-header">aaaa</div> <div class="tweet-body"> <div class="tweet-tops"> <label> <input type="text" name='title' placeholder="タイトル"> <div class="error_mes"> <?php if(!empty($err_msg['pass'])) echo $err_msg['pass']; ?> </div> </label> <label> <textarea name="content" cols="82" rows="10" class='review-textarea'></textarea> <div class="error_mes"> <?php if(!empty($err_msg['pass'])) echo $err_msg['pass']; ?> </div> </label> <div class='button-container'> <input type="submit" value='投稿する'> </div> </div> </div> </div> </form> </div> <?php } ?>
<?php require('../common/head_info.php'); require('../common/database.php'); require('../common/auth.php'); ?> <?php if (!isLogin()) { header('Location: ../users/login.php'); exit; } $user_id = getLoginUserId(); $database_handler = getDatabaseConnection(); //post送信されていた場合 if(!empty($_POST)) { //バリデーションチェック $title = (isset($_POST['title'])) ? $_POST['title'] : ''; $content = (isset($_POST['content'])) ? $_POST['content'] : ''; print_r('debug',$title); print_r('debug',$content); if(empty($err_msg)) { //例外処理 try { //DB接続 $database_handler = getDatabaseConnection(); $statement = $database_handler->prepare('INSERT INTO tweets (user_id, title, content) VALUES (user_id, :title, :content)'); //指定された変数名にパラメータをバインド(紐付け) $statement->bindParam(':title', ($title)); $statement->bindParam(':content', ($content)); $statement->bindParam(':user_id', ($user_id)); $statement->execute(); $_SESSION['select_memo'] = [ 'id' => $database_handler->lastInsertId(), 'title' => $title, 'content' => '', ]; //クエリ成功の場合 if($statement) { $_POST = array(); //postをクリア header('Location:../tweets/index.php'); //自分自身に遷移する exit(); } } catch(Exception $e) { error_log('エラー発生:'. $e->getMessage()); } } } ?> <?php if(!empty($_SESSION['user_id'])) { ?> <div class="main-top"> <form action="" method='post' class='form review-form'> <div class='button-containers'> <div class="tweet-header">aaa</div> <div class="tweet-body"> <div class="tweet-tops"> <label> <input type="text" name='title' placeholder="タイトル"> <div class="error_mes"> <?php if(!empty($err_msg['pass'])) echo $err_msg['pass']; ?> </div> </label> <label> <textarea name="content" cols="82" rows="10" class='review-textarea'></textarea> <div class="error_mes"> <?php if(!empty($err_msg['pass'])) echo $err_msg['pass']; ?> </div> </label> <div class='button-container'> <input type="submit" value='投稿する'> </div> </div> </div> </div> </form> </div> <?php } ?>
回答3件
あなたの回答
tips
プレビュー