PHPの学習中に、記載されているコード内で分からない部分があった為、お聞きしたくご質問させて貰いました。
下記のコード、「bindParam_form.php」はデータベースに接続しbookテーブルより入力されているデータを一覧表示し、更新したい箇所があった際は、フォーム内のテキストエリアを書き換え、更新ボタンを押し、「bindParam_process.php」より、bookテーブル内のデータを書き換える、といった流れの処理になります。
php
1<?php 2require_once '../DbManager.php'; 3require_once '../Encode.php'; 4 5try { 6 $db = getDb(); 7 $stt = $db->query('SELECT * FROM book ORDER BY published DESC'); 8 $cnt = 0; 9?> 10<!DOCTYPE html> 11<html> 12<head> 13<meta charset="UTF-8" /> 14<title>既存データの更新</title> 15</head> 16<body> 17<form method="POST" action="bindParam_process.php"> 18<input type="submit" value="更新" /> 19<table border="1"> 20<tr> 21 <th>ISBNコード</th><th>書名</th><th>価格</th> 22 <th>出版社</th><th>刊行日</th> 23</tr> 24<?php 25 while ($row = $stt->fetch(PDO::FETCH_ASSOC)) { 26 $cnt++; 27?> 28 <tr> 29 <td> 30 <?=e($row['isbn']) ?> 31 <input type="hidden" name="isbn<?=e($cnt) ?>" 32 value="<?=e($row['isbn']) ?>" /> 33 </td><td> 34 <input type="text" name="title<?=e($cnt) ?>" 35 value="<?=e($row['title']) ?>" size="35" /> 36 </td><td> 37 <input type="text" name="price<?=e($cnt) ?>" 38 value="<?=e($row['price']) ?>" size="5" /> 39 </td><td> 40 <input type="text" name="publish<?=e($cnt) ?>" 41 value="<?=e($row['publish']) ?>" size="12" /> 42 </td><td> 43 <input type="text" name="published<?=e($cnt) ?>" 44 value="<?=e($row['published']) ?>" size="12" /> 45 </td> 46 </tr> 47<?php 48 } 49} catch (PDOException $e) { 50 print "エラーメッセージ:{$e->getMessage()}"; 51} 52?> 53</table> 54<input type="hidden" name="cnt" value="<?=e($cnt) ?>" /> 55</form> 56</body> 57</html>
下記は、フォーム内のテキストエリアを書き換え、更新ボタンを押した際に、データベースに接続しテーブルのデータを書き換えるための、「bindParam_process.php」になります。
php
1<?php 2require_once '../DbManager.php'; 3 4try { 5 $db = getDb(); 6 $stt = $db->prepare('UPDATE book SET title=:title, price=:price, publish=:publish, published=:published WHERE isbn=:isbn'); 7 $stt->bindParam(':isbn' ,$isbn); 8 $stt->bindParam(':title' ,$title); 9 $stt->bindParam(':price' ,$price); 10 $stt->bindParam(':publish' ,$publish); 11 $stt->bindParam(':published' ,$published); 12 for($i = 1; $i <= $_POST['cnt']; $i++) { 13 $isbn = $_POST['isbn'.$i]; 14 $title = $_POST['title'.$i]; 15 $price = $_POST['price'.$i]; 16 $publish = $_POST['publish'.$i]; 17 $published = $_POST['published'.$i]; 18 $stt->execute(); 19 } 20 header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/bindParam_form.php'); 21} catch (PDOException $e) { 22 print "エラーメッセージ:{$e->getMessage()}"; 23} 24
下記は、「bindParam_form.php」にアクセスをし、一行目の書名の欄を、「test」に書き換えた画像です
お聞きしたい箇所なのですが、「bindParam_process.php」のfor文内の「$title = $_POST['title'.$i];」ここの部分なのですが、 「$_POST['title'.$i]」と$iを追加しています。そして、$titleに代入し、プレイスホルダにセットされていると思うのですが、何故、$iを追加するのかが分かりません。$iを追加した場合、書き換えた文字列に、$iが追加される形となり、結果的に書名の欄には、「test」ではなく、「test1」と数字がつくと思うのですが、そのまま書き換えた文字列が表示されています。何故なのでしょうか...?
ここら辺の部分に関しまして、理解に苦しんでいるため、どなたか、ご助言頂けましたら幸いです。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー