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

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

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

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

Q&A

解決済

1回答

1993閲覧

メモアプリの編集内容が変更されない。

wasabi13679

総合スコア13

PHP

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

0グッド

0クリップ

投稿2019/06/23 06:41

編集2019/06/23 07:38

編集機能を追加し、メモの内容は表示されるのですが変更する内容が保存されません。

下記のサイトを参考にしております。
https://gray-code.com/php/make-the-board-vol20/

該当のソースコード

<?php // データベースの接続情報 define( 'DB_HOST', 'localhost'); define( 'DB_USER', 'root'); define( 'DB_PASS', 'root'); define( 'DB_NAME', 'board'); // タイムゾーン設定 date_default_timezone_set('Asia/Tokyo'); // 変数の初期化 $now_date = null; $data = null; $file_handle = null; $split_data = null; $message_array = array(); $error_message = array(); $clean = array(); session_start(); if( !empty($_POST['btn_submit']) ) { // メッセージの入力チェック if( empty($_POST['message']) ) { $error_message[] = 'なにか入力してください。'; } else { $clean['message'] = h( $_POST['message'], ENT_QUOTES); } if( empty($error_message) ) { // データベースに接続 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); // 接続エラーの確認 if( $mysqli->connect_errno ) { $error_message[] = '書き込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error; } else { // 文字コード設定 $mysqli->set_charset('utf8'); // 書き込み日時を取得 $now_date = date("Y-m-d H:i:s"); // データを登録するSQL作成 $sql = "INSERT INTO message (message, post_date) VALUES ( '$clean[message]', '$now_date')"; // データを登録 $res = $mysqli->query($sql); if( $res ) { $_SESSION['success_message'] = '書き込みに成功しました。'; } else { $error_message[] = '書き込みに失敗しました。'; } // データベースの接続を閉じる $mysqli->close(); } header('Location: ./'); } } // データベースに接続 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); // 接続エラーの確認 if( $mysqli->connect_errno ) { $error_message[] = 'データの読み込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error; } else { $sql = "SELECT id,message,post_date FROM message ORDER BY post_date DESC"; $res = $mysqli->query($sql); if( $res ) { $message_array = $res->fetch_all(MYSQLI_ASSOC); } $mysqli->close(); } //htmlspecialcharsのショートカット function h($value){ return htmlspecialchars($value, ENT_QUOTES); } ?> <!DOCTYPE html> <html lang="ja"> <head> <title>メモ</title> <script src="js/count.js"></script> <link rel="stylesheet" type=text/css href="style.css"> </head> <body> <!--メインコンテンツ--> <h1>メモ</h1> <?php if( empty($_POST['btn_submit']) && !empty($_SESSION['success_message']) ): ?> <p class="success_message"><?php echo $_SESSION['success_message']; ?></p> <?php unset($_SESSION['success_message']); ?> <?php endif; ?> <?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; ?> <form method=post> <div> <textarea id="area1" id="message" name="message" onkeyup="viewStrLen();" cols="50" rows="10" placeholder="ここに書いてね"></textarea> </div> <input type="submit" name="btn_submit" value="登録" class="btn-square"> <form method="get" action="./download.php"> <input type="submit" name="btn_download" class="btn-square" value="CSV"> </form> <p id="strLen">文字</p> </form> <section> <?php if(!empty($message_array) ){ ?> <?php foreach($message_array as $value ){ ?> <article> <div class="info"> <h2><?php echo $value['view_name']; ?></h2> <time><?php echo date('Y年m月d日 H:i',strtotime($value['post_date'])); ?></time> <?php if($_SESSION['id']); ?> <form method="get" mode="delete.php<?php echo($message['id']); ?>"> <a class="btn-square" href="edit.php?message_id=<?php echo $value['id']; ?>">編集</a> <a class="btn-square" href="delete.php?message_id=<?php echo $value['id']; ?>">削除</a> </form> </div> <p><?php echo $value['message']; ?></p> </article> <?php } ?> <?php } ?> </section> </body> </html> [edit.php] <?php // データベースの接続情報 define( 'DB_HOST', 'localhost'); define( 'DB_USER', 'root'); define( 'DB_PASS', 'root'); define( 'DB_NAME', 'board'); // タイムゾーン設定 date_default_timezone_set('Asia/Tokyo'); // 変数の初期化 $message_id = null; $mysqli = null; $sql = null; $res = null; $error_message = array(); $message_data = array(); session_start(); if(!empty($_GET['message_id']) && empty($_POST['message_id'])) { $message_id = (int)h($_GET['message_id'], ENT_QUOTES); // データベースに接続 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); // 接続エラーの確認 if( $mysqli->connect_errno ) { $error_message[] = 'データベースの接続に失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error; } else { // データの読み込み $sql = "SELECT * FROM message WHERE id = $message_id"; $res = $mysqli->query($sql); if( $res ) { $message_data = $res->fetch_assoc(); } else { // データが読み込めなかったら一覧に戻る header("Location: ./index.php"); } $mysqli->close(); } }elseif(!empty($_POST['message_id'])){ $message_id = (int)h($_POST['message_id'], ENT_QUOTES); if( empty($_POST['message']) ) { $error_message[] = '入力してください。'; } else { $message_data['message'] = h($_POST['message'], ENT_QUOTES); } if( empty($error_message) ) { // データベースに接続 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); // 接続エラーの確認 if( $mysqli->connect_errno ) { $error_message[] = 'データベースの接続に失敗しました。 エラー番号 ' . $mysqli->connect_errno . ' : ' . $mysqli->connect_error; } else { $sql = "UPDATE message set post_date = '$message_data[post_date]', message= '$message_data[message]' WHERE id = $message_id"; $res = $mysqli->query($sql); } $mysqli->close(); // 更新に成功したら一覧に戻る if( $res ) { header("Location: ./index.php"); } } } //htmlspecialcharsのショートカット function h($value){ return htmlspecialchars($value, ENT_QUOTES); } ?> <!DOCTYPE html> <html lang="ja"> <head> <title>編集</title> <script src="js/count.js"></script> <link rel="stylesheet" type=text/css href="style.css"> </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; ?> <form method=post> <div> <textarea id="area1" id="message" name="message" onkeyup="viewStrLen();" cols="50" rows="10" placeholder="ここに書いてね"><?php if(!empty($message_data['message']) ){ echo $message_data['message']; }?></textarea> </div> <a class="btn-square" href="index.php">キャンセル</a> <a class="btn-square" href="index.php?message_id=<?php echo $value['id']; ?>">登録</a> <input type="hidden" name="message_id" value="<?php echo $message_data['id']; ?>"> <p id="strLen">文字</p> </form> </body> </html>

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

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

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

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

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

y_waiwai

2019/06/23 06:44

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
m.ts10806

2019/06/23 12:15

ifなどのあらゆる分岐に下記を埋め込んで結果を教えてください(ひとまずどこを通っているか確認するデバッグの1歩目です) echo __LINE__.PHP_EOL;
wasabi13679

2019/06/24 04:11

edit.phpの下記のコードに入力したら38,105とテキストエリアに表示されました。 ⬇️ // データの読み込み $sql = "SELECT * FROM message WHERE id = $message_id"; $res = $mysqli->query($sql); if( $res ) { $message_data = $res->fetch_assoc(); echo __LINE__.PHP_EOL; } else { // データが読み込めなかったら一覧に戻る header("Location: ./index.php"); } $mysqli->close(); }
wasabi13679

2019/06/24 04:13

※これが105の部分です。 <textarea id="area1" id="message" name="message" onkeyup="viewStrLen();" cols="50" rows="10" placeholder="ここに書いてね"><?php echo __LINE__.PHP_EOL;if(!empty($message_data['message']) ){ echo $message_data['message']; }?></textarea>
m.ts10806

2019/06/24 04:14

もっとたくさん分岐点はあると思いますが・・・。 要は「そこ(出力されたのはファイルの行数)を通った」という意味になるのでそこから処理を追っていけるはずです。
wasabi13679

2019/06/24 04:36

分かりました。 他のところにも入力したら出力されたので、処理を追ってみます。
wasabi13679

2019/06/25 04:27

無事に解決しました。 アドバイスをくださった皆様、ご協力ありがとうございました。
m.ts10806

2019/06/25 04:29

解決までの経緯を自身で回答書かれて自己解決とされた方が良いように思います(現状だとベストアンサーに選ばれた回答がどのように解決のヒントとなったのか分からないので、せめてコメントで書いてあげてください)
guest

回答1

0

ベストアンサー

編集画面のリンク「登録」をクリックしてもそのままの画面
かつ更新内容が元の内容になる、という現象ですかね?

PHPスクリプトの処理内容に合わせるなら
submitボタンで更新するように変更しましょう。

投稿2019/06/23 07:41

takasima20

総合スコア7460

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問