php
1<?php
2
3function h($string)
4{
5 return htmlspecialchars($string, ENT_QUOTES);
6}
7
8// $no = $_GET["no"];
9$no = filter_input(INPUT_GET, 'no');
10
11$options = [
12 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
13 PDO::ATTR_EMULATE_PREPARES => false,
14];
15
16$pdo = new PDO("mysql:dbname=testdb;host=localhost;charset=utf8"
17 , "user"
18 , "password"
19 , $options
20);
21
22// if($_POST['submit']){
23if (!is_null(filter_input(INPUT_POST, 'submit'))) {
24
25// $title = $_POST['title'];
26// $content = $_POST['content'];
27 $title = filter_input(INPUT_POST, 'title');
28 $content = filter_input(INPUT_POST, 'content');
29
30// $sql = <<<EOF
31//UPDATE `post`
32//SET `title` = '{$title}' , `content` = '{$content}'
33//WHERE `no` = '{$no}'
34//EOF;
35// 実行しなきゃ更新されないのは当たり前じゃね?
36
37 $sql_update = "UPDATE `post` SET `title`=:title, `content`=:content WHERE `no`=:no";
38 $stmt = $pdo->prepare($sql_update);
39 $params = [
40 ':title' => $title
41 , ':content' => $content
42 , ':no' => $no
43 ];
44 $stmt->execute($params);
45}
46
47// プログラムは上から下に実行される。
48// UPDATE -> SELECT の順に実行しなきゃ反映するわけないでしょ
49
50// SQLインジェクション対策されていない
51// $st = $pdo->query("SELECT * FROM post WHERE no = $no");
52
53$sql = "SELECT * FROM post WHERE no = :no";
54$stmt = $pdo->prepare($sql);
55
56$params = [
57 ':no' => $no
58];
59$stmt->execute($params);
60
61$posts = $st->fetchAll();
62
63// </div> 閉じタグ忘れ
64//
65//foreach ($posts as $post) {
66// print "<form action='' method='post'>
67// タイトル<br>
68// <div><input type='text' name='title' value=\"{$post['title']}\"><br />
69// 内容<br><textarea name='content'>{$post['content']}</textarea>
70// <input type='submit' name='submit' value=\"更新\"></form>\n";
71//}
72?>
73<?php foreach ($posts as $post) : ?>
74 <form action='' method='post'>
75 <div>
76 タイトル<br>
77 <input type='text' name='title' value="<?php echo h($post['title']); ?>"><br />
78 内容<br>
79 <textarea name='content'><?php echo h($post['content']); ?></textarea>
80 <input type='submit' name='submit' value="更新">
81 </div>
82 </form>
83<?php endforeach; ?>
84
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。