質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

1043閲覧

PHP ログイン情報

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/02/21 06:55

編集2021/02/21 08:36

整理のため再度投稿します。
PHPで投稿機能を実装しています。

参考にしているサイトは、以下のサイトです。
https://www.techpit.jp/courses/132/curriculums/135/sections/976/parts/3946

こちらを見て投稿機能を作成しているのですが、不明点として投稿する度にuser_idが0として扱われます。

試したこととしては、requireで読み込んでいる部分(/common/auth.phpやfunction.php、database.phpなどをコメントアウトしてみる)をやってみました。この処理がまとまっていないために起きている不具合だと考えましたが、こちら原因わかる方いますか?

ログ出力してみると以下のような結果が出ました。

[21-Feb-2021 08:15:39 UTC] PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /Applications/MAMP/htdocs/aaaa/tweets/create.php on line 37
//tweets/create.php <?php require('../common/auth.php'); require('../common/function.php'); require('../common/database.php'); require('../common/head_info.php'); if (!isLogin()) { header('Location: ../login/'); exit; } $user_id = getLoginUserId(); $database_handler = getDatabaseConnection(); //post送信されていた場合 if(!empty($_POST)) { //バリデーションチェック $title = (isset($_POST['title'])) ? $_POST['title'] : ''; $content = (isset($_POST['content'])) ? $_POST['content'] : ''; // //最大文字数チェック // validMaxLen($comment, 'comment'); // //未入力チェック // validNotEntered($comment, 'comment'); if(empty($err_msg)) { //例外処理 try { $user_id = getLoginUserId(); print_r('debug',$user_id); //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(':user_id', $user_id); $statement->execute(); $_SESSION['select_tweet'] = [ 'id' => $database_handler->lastInsertId(), 'title' => $title, 'content' => $content, ]; //クエリ成功の場合 if($statement) { $_POST = array(); //postをクリア header('Location:../tweets/community01.php'); //自分自身に遷移する exit(); } } catch(Exception $e) { error_log('エラー発生:'. $e->getMessage()); } } } ?> <?php require('../common/header.php'); ?> <?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">zzz</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 require('../common/footer.php'); ?> <?php } ?>
//common/function.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(); // //================================= // //エラーメッセージ格納用の配列 // //================================= $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/database.php <?php /** * 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; }
//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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/21 07:06

DB2は本件関係ないのでは。
m.ts10806

2021/02/21 07:07

質問編集できるのできちんと編集して対応すべきでは。 前の質問も勝手に閉じただけで「回答」になってませんし解決してません。 コードが変わってない以上はほとんど同じアドバイスにしかなりません。
退会済みユーザー

退会済みユーザー

2021/02/21 07:10

すみません、自分なりに他のUdemyやサイト等でPHP ログイン等で検索しましたが、解決策が見当たらないため、このような状況になっています。
m.ts10806

2021/02/21 08:04

「解決してないことを解決したことにする」のはまた別の問題です。
退会済みユーザー

退会済みユーザー

2021/02/21 08:37

はい、すみません。ログインの件は解決しました。結果として、保存されているパスワードに問題がありました。 残り投稿する際のエラーが解決できない状態です。 質問編集しました。
guest

回答1

0

コードは見てませんが、ログの現象を追っているのであれば、普通に notice のとおりかと。
英文として読んでみると良いです。

投稿2021/02/21 08:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/21 08:38

ログを追ったログインの件は解決できました。
退会済みユーザー

退会済みユーザー

2021/02/21 08:55

質問内容を全く違ったもの変更にされると、回答が無意味になるのですけど。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問