前提・実現したいこと
いつもありがとうございます。
PHPで本の登録・編集・削除機能が存在するシステムを作っています。
登録した情報を、編集ボタンを押すことで編集フォームに情報を反映させたいです。
反映させたい情報は、
本の登録キー(id)
本のタイトル(title)
画像イメージ(image_url)
の3つです。
編集機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Fatal error: Uncaught Error: Call to undefined function h() in /home/ec2-user/environment/bookshelf/bookshelf_edit.php:2 Stack trace: #0 {main} thrown in /home/ec2-user/environment/bookshelf/bookshelf_edit.php on line 2
該当のソースコード
create_table_bookshelf.sql
CREATE TABLE books( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(100), image_url VARCHAR(100), status VARCHAR(10), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP );
bookshelf_edit.php(編集フォーム)
php
1<?php 2 var_dump(h($id)); 3?> 4<!DOCTYPE html> 5<html lang="ja"> 6 <head> 7 <meta charset="uft-8"> 8 <title>Bookshelf | 簡単!あなたのオンライン本棚</title> 9 <link rel="stylesheet" href="bookshelf.css"> 10 </head> 11 <body> 12 <header> 13 <div id="header"> 14 <div id="logo"> 15 <a href="./bookshelf_index.php"><img src="./images/logo.png" alt="Bookshelf"></a> 16 </div> 17 <nav> 18 <a href="./bookshelf_form.php"><img src="./images/icon_plus.png" alt="">書籍編集</a> 19 </nav> 20 </div> 21 </header> 22 <div id="wrapper"> 23 <div id="main"> 24 <form action="bookshelf_index.php" method="post" class="form_book" enctype="multipart/form-data"> 25 <div class="book_title"> 26 <input type="text" name="book_title" placeholder="書籍タイトルを入力"> 27 </div> 28 <div class="book_image"> 29 <input type="file" name="book_image"> 30 </div> 31 <div class="book_submit"> 32 <input type="submit" name="submit_edit_book" value="再登録"> 33 </div> 34 </form> 35 </div> 36 </div> 37 <footer> 38 <small>2020 Bookshelf.</small> 39 </footer> 40 </body> 41</html>
bookshelf_index.php
php
1<?php 2 3 //表示データの無害化 htmlspecialcharsの関数化 4 function h($str){ 5 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 6 } 7 8 //MySQLサーバ接続に必要な値を変数に代入 9 $host = 'localhost'; 10 $username = 'root'; 11 $password = ''; 12 $db_name = 'bookshelf'; 13 14 //変数を設定して、MySQLサーバに接続 15 $database = mysqli_connect($host,$username,$password,$db_name); 16 17 //接続を確認し、接続できていない場合にはエラーを出力して終了 18 if($database == false){ 19 die('Connect Error (' . mysqli_connect_errno() . ')' . mysqli_connect_error()); 20 } 21 22 //MySQLにutf8で接続するための設定をする 23 $charset = 'utf8'; 24 mysqli_set_charset($database,$charset); 25 26 //ここにMysqlを使ったなんらかの処理を書く 27 28 //bookshelf_formから送られてくる書籍データの登録 29 if($_POST['submit_add_book']){ 30 31 //まずは送られてきた画像をuploadsフォルダに移動させる 32 $file_name = $_FILES['add_book_image']['name'];//アップロードさせるファイル名 33 $image_path = './uploads/' .$file_name;//アップロード先の場所 34 move_uploaded_file($_FILES['add_book_image']['tmp_name'], $image_path);//第一引数には移動前のパス、第二引数では移動先のパス 35 36 //データベースに書籍を新規登録する 37 $sql = 'INSERT INTO books (title, image_url, status) VALUES(?, ?, "unread")'; 38 $statement = mysqli_prepare($database, $sql); 39 mysqli_stmt_bind_param($statement,'ss', $_POST['add_book_title'],$image_path); 40 mysqli_stmt_execute($statement); 41 mysqli_stmt_close($statement); 42 43 } 44 45 //bookshelf_editに書籍データを送る 46 //もし編集(submit_book_edit)ボタンが押されたら 47 if($_POST['submit_book_edit']){ 48 49 $sql = 'SELECT * FROM WHERE id=?'; 50 $statement = mysqli_prepare($database,$sql); 51 mysqli_stmt_bind_param($statement,'i', $POST['book_id']); 52 mysqli_stmt_execute($statement); 53 mysqli_close($statement); 54 } 55 56 /*一部略*/ 57 58 //すべての書籍を取得する 59 $sql = 'SELECT * FROM books ORDER BY created_at DESC'; 60 61 //いずれかの$sqlを実行して$resultに代入する 62 $result = mysqli_query($database,$sql); 63 64 //MySQLを使った処理が終わると、接続は不要なので切断する 65 mysqli_close($database); 66 67?> 68 69<!DOCTYPE html> 70<html lang="ja"> 71 <head> 72 <meta charset="utf-8"> 73 <title>Bookshelf | 簡単!あなたのオンライン本棚</title> 74 <link rel="stylesheet" href="bookshelf.css"> 75 </head> 76 <body> 77 <!--ヘッダー(ロゴとメニュー)--> 78 <header> 79 <div id="header"> 80 <div id="logo"> 81 <a href="./bookshelf_index.php"><img src="./images/logo.png" alt="Bookshelf"></a> 82 </div> 83 <nav> 84 <a href="./bookshelf_form.php"><img src="./images/icon_plus.png" alt="">書籍登録</a> 85 </nav> 86 </div> 87 </header> 88 89 <!--カバー(最初に目に入るアイキャッチ)--> 90 <div id="cover"> 91 <h1 id="cover_title">カンタン!あなたのオンライン本棚</h1> 92 <form action="bookshelf_index.php" method="post"> 93 <div class="book_status unread active"> 94 <input type="submit" name="submit_only_unread" value="未読"><br> 95 <div class="book_count"><?php print h($count_unread);?></div> 96 </div> 97 <div class="book_status reading active"> 98 <input type="submit" name="submit_only_reading" value="読中"><br> 99 <div class="book_count"><?php print h($count_reading);?></div> 100 </div> 101 <div class="book_status finished active"> 102 <input type="submit" name="submit_only_finished" value="読了"><br> 103 <div class="book_count"><?php print h($count_finished);?></div> 104 </div> 105 </form> 106 </div> 107 108 <!--書籍一覧--> 109 <div class="wrapper"> 110 <div id="main"> 111 <div id="book_list" class="clearfix"> 112 <?php 113 //登録書籍の数だけ.book_itemを繰り返しはじめ 114 if($result){ 115 while($record = mysqli_fetch_assoc($result)){ 116 //1レコード分の値をそれぞれ変数に代入する 117 $id = $record['id']; 118 $title = $record['title']; 119 $image_url = $record['image_url']; 120 $status = $record['status']; 121 $created_at = $record['created_at']; 122 // $update_at = $record['updated_at']; 123 124 ?> 125 <div class="book_item"> 126 <div class="book_detail"> 127 <div class="book_title"> 128 <?php print h($title); ?> 129 </div> 130 131 <form action="bookshelf_index.php" method="post"> 132 <input type="hidden" name="book_id" value="<?php print h($id); ?>"> 133 <div class="book_delete"> 134 <input type="submit" name="submit_book_delete" value="削除する"><img src="images/icon_trash.png" alt="icon trash"> 135 </div> 136 </form> 137 <form action="bookshelf_edit.php" method="post"> 138 <input type="hidden" name="book_id" value="<?php print h($id); ?>"> 139 <input type="hidden" name="book_title" value="<?php print h($title); ?>"> 140 <input type="hidden" name="book_image_url" value="<?php print h($image_url); ?>"> 141 <div class="book_edit"> 142 <input type="submit" name="submit_book_edit" value="編集する"> 143 </div> 144 </form> 145 </div> 146 </div> 147 <?php //繰り返し終了 148 } 149 mysqli_free_result($result); 150 } 151 ?> 152 </div> 153 </div> 154 </div> 155 <footer> 156 <small>2020 Bookshelf.</small> 157 </footer> 158 </body> 159</html> 160
試したこと
POSTで編集フォーム(bookshelf_edit.php)に、hiddenで情報を飛ばすやり方で考えていました。
飛ばした後に、bookshelf_edit.phpでどのように表示させたらよいのか困っております。
<form action="bookshelf_edit.php" method="post"> <input type="hidden" name="book_id" value="<?php print h($id); ?>"> <input type="hidden" name="book_title" value="<?php print h($title); ?>"> <input type="hidden" name="book_image_url" value="<?php print h($image_url); ?>"> <div class="book_edit"> <input type="submit" name="submit_book_edit" value="編集する"> </div> </form>
補足情報(FW/ツールのバージョンなど)
PHP:7.2
FW:なし
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/10 14:00