SBクリエイティブ

正誤情報

『確かな力が身につく「PHP」超入門』正誤情報

2019.11.22
対象書籍
確かな力が身につくPHP「超」入門

本書内の記載のうち、以下の項目で誤りがありました。
修正内容を提示させていただきます。
ご迷惑をおかけいたしました事、深くお詫び申し上げます。

※初版第4刷
Linuxのバージョンアップなどに伴い、一部記述を変更しております。

▽309ページ  Note「boxの選択」
変更前) https://atlas.hashicorp.com/boxes/search
変更後) https://app.vagrantup.com/boxes/search

変更前) 今回は最もダウンロード数が多い「ubuntu/trusty64」を選びました。説明は「Official Ubuntu Server 14.04 LTS (Trusty Tahr)」となっており、Linuxの1つであるUbuntuであることがわかります。
変更後) 今回は広く使われているLinuxの1つであるUbuntuの中から、「ubuntu/bionic64」を選びました。boxの説明は「Official Ubuntu 18.04 LTS (Bionic Beaver) builds」となっています。

▽310ページ  Vagrantfile, 2行目
変更前) trusty64
変更後) bionic64

▽311ページ Table「Vagrantfileの内容」, 2行目
変更前) trusty64
変更後) bionic64

▽311ページ bootstrap.sh, 最下行
変更前) apt-get install -y php7.0 php7.0-json php7.0-mysql libapache2-mod-php7.0
変更後) apt-get install -y php php-json php-mysql libapache2-mod-php

▽315ページ 上から2番目の網掛け
変更前) 14.04.5
変更後) 18.04.3

変更前) vagrant@vagrant-ubuntu-trusty-64:~$
変更後) vagrant@ubuntu-bionic:~$

▽315ページ 上から2番目の網掛けの下
変更前) 以後は「vagrant@vagrant-ubuntu-trusty-64:~$」というプロンプトが長いので、
変更後) 以後は「vagrant@ubuntu-bionic:~$」というプロンプトを、

▽315ページ 上から3番目の網掛け
変更前) vagrant@vagrant-ubuntu-trusty-64:~$
変更後) vagrant…$

▽315ページ 上から3番目の網掛けの下
MySQLのインストール中に…適切なパスワードを使用してください。
※段落を削除

「-p」の後に、空白を入れずにパスワードを記述してください。
※削除

▽315ページ 上から4番目の網掛け
変更前) mysql -u root -ppassword < /var/www/html/php/chapter7/shop.sql
変更後) sudo mysql -u root < /var/www/html/php/chapter7/shop.sql

▽316ページ Note「文字化けの対策」
変更前) my.cnfで[mysqld]および[mysql]と書かれた部分を探し、
変更後) [mysqld]および[mysql]と書かれた部分を探し(なければ作成し)、

変更前) mysql -u root -ppassword < /var/www/html/php/chapter7/shop.sql
変更後) sudo mysql -u root < /var/www/html/php/chapter7/shop.sql

 

※初版第2刷
▽130ページ Note内のリスト
誤

if (isset($_REQUEST[‘genre’])) {
foreach ($_REQUEST[‘genre’] as $item) {
…
}
}

正
<?php require ‘../header.php’;?>
<?php
if(isset($_REQUEST[‘genre’])){
foreach ($_REQUEST[‘genre’] as $item) {
echo ‘<p>’, $item, ‘</p>’;
}
}
echo ‘に関するお買い得情報をお送りさせて頂きます。’;
?>
<?php require ‘../footer.php’;?>

▽208ページ search-output.php
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽211ページ
誤
書式 execute
変数->execute([値])

正
書式 execute
PDOStatementの変数->execute([値])

▽212ページ
誤
SQLスクリプトを実行した結果の取得(fetchAllメソッド)
SQLスクリプトをexecuteメソッドで実行した結果は、PDOStatementクラスのfetchAllメソッドで取得することができます。取得した結果を処理するときには、foreachループ(p.116)と組み合わせて、次のように記述します。$sqlはPDOStatementインスタンス(p.210)を代入した変数です。

foreach ($sql->fetchAll() as $row) {

書式 fetchAll
foreach (PDOの変数->fetchAll() as 結果を代入する変数)

ここでは結果を・・・

正
SQLスクリプトを実行した結果の処理
SQLスクリプトをexecuteメソッドで実行した結果を処理するには、PDOStatementインスタンス(p.210)とforeachループ(p.116)を組み合わせて、次のように記述します。$sqlはPDOStatementインスタンスを代入した変数です。

foreach ($sql as $row) {

書式 SQLスクリプトの実行結果を処理する
foreach (PDOStatementの変数 as 結果を代入する変数)

ここでは結果を・・・

▽214ページ search-output2.php
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽230ページ
誤
このスクリプトは、6-3のStep5(p.200)で作成した、商品一覧を表示するスクリプト(chapter6all4.php)によく似ています。異なる部分を赤字で示しました。

正
このスクリプトは、6-3のStep5(p.200)で作成した、商品一覧を表示するスクリプト(chapter6all4.php)と構造が似ています。異なる部分を赤字で示しました。HTMLの表(テーブル)の中に複数のフォームを配置するのは少し難しいので、ここでは<div>タグとスタイルファイル(chapter6style.css)を使って、表のようなレイアウトを作りました。

▽231ページ  update-input.php
誤
<?php require ‘../header.php’;?>
<table>
<tr><th>商品番号</th><th>商品名</th><th>商品価格</th></tr>
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,
‘staff’, ‘password’);
foreach ($pdo->query(‘select * from product’) as $row) {
echo ‘<tr><form action=”update-output.php” method=”post”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<td>’, $row[‘id’], ‘</td>’;
echo ‘<td>’;
echo ‘<input type=”text” name=”name” value=”‘, $row[‘name’], ‘”>’;
echo ‘</td>’;
echo ‘<td>’;
echo ‘<input type=”text” name=”price” value=”‘, $row[‘price’], ‘”>’;
echo ‘</td>’;
echo ‘<td><input type=”submit” value=”更新”></td>’;
echo ‘</form></tr>’;
echo “n”;
}
?>
</table>
<?php require ‘../footer.php’;?>

正
<?php require ‘../header.php’;?>
<div class=”th0″>商品番号</div>
<div class=”th1″>商品名</div>
<div class=”th1″>商品価格</div>
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,
‘staff’, ‘password’);
foreach ($pdo->query(‘select * from product’) as $row) {
echo ‘<form action=”update-output.php” method=”post”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<div class=”td0″>’, $row[‘id’], ‘</div> ‘;
echo ‘<div class=”td1″>’;
echo ‘<input type=”text” name=”name” value=”‘, $row[‘name’], ‘”>’;
echo ‘</div>’;
echo ‘<div class=”td1″>’;
echo ‘ <input type=”text” name=”price” value=”‘, $row[‘price’], ‘”>’;
echo ‘</div>’;
echo ‘<div class=”td2″><input type=”submit” value=”更新”></div>’;
echo ‘</form>’;
echo “n”;
}
?>
<?php require ‘../footer.php’;?>

▽238ページ delete-input.php
誤
echo ‘<td>’$row[‘id’]'</td>’;
echo ‘<td>’$row[‘name’]'</td>’;
echo ‘<td>’$row[‘price’]'</td>’;

正
echo ‘<td>’, $row[‘id’], ‘</td>’;
echo ‘<td>’, $row[‘name’], ‘</td>’;
echo ‘<td>’, $row[‘price’], ‘</td>’;

▽243ページ edit.php
誤
<?php require ‘../header.php’;?>
<table>
<tr><th>商品番号</th><th>商品名</th><th>商品価格</th></tr>
<tr>
<form action=”edit3.php” method=”post”>
<input type=”hidden” name=”command” value=”insert”>
<td></td>
<td><input type=”text” name=”name”></td>
<td><input type=”text” name=”price”></td>
<td><input type=”submit” value=”追加”></td>
</form>
</tr>
</table>
<?php require ‘../footer.php’;?>

正
<?php require ‘../header.php’;?>
<div class=”th0″>商品番号</div>
<div class=”th1″>商品名</div>
<div class=”th1″>商品価格</div>
<form action=”edit3.php” method=”post”>
<input type=”hidden” name=”command” value=”insert”>
<div class=”td0″></div>
<div class=”td1″><input type=”text” name=”name”></div>
<div class=”td1″><input type=”text” name=”price”></div>
<div class=”td2″><input type=”submit” value=”追加”></div>
</form>
<?php require ‘../footer.php’; ?>

▽245ページ edit2.php
誤
<?php require ‘../header.php’;?>
<table>
<tr><th>商品番号</th><th>商品名</th><th>商品価格</th></tr>
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,
‘staff’, ‘password’);
foreach ($pdo->query(‘select * from product’) as $row) {
echo ‘<tr>’;
echo ‘<form action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”update”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<td>’, $row[‘id’], ‘</td>’;
echo ‘<td>’;
echo ‘<input type=”text” name=”name” value=”‘, $row[‘name’], ‘”>’;
echo ‘</td>’;
echo ‘<td>’;
echo ‘<input type=”text” name=”price” value=”‘, $row[‘price’], ‘”>’;
echo ‘</td>’;
echo ‘<td><input type=”submit” value=”更新”></td>’;
echo ‘</form>’;
echo ‘<form action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”delete”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<td><input type=”submit” value=”削除”></td>’;
echo ‘</form>’;
echo ‘</tr>’;
echo “n”;
}
?>
<tr>
<form action=”edit3.php” method=”post”>
<input type=”hidden” name=”command” value=”insert”>
<td></td>
<td><input type=”text” name=”name”></td>
<td><input type=”text” name=”price”></td>
<td><input type=”submit” value=”追加”></td>
</form>
</tr>
</table>
<?php require ‘../footer.php’;?>

正
<?php require ‘../header.php’;?>
<div class=”th0″>商品番号</div>
<div class=”th1″>商品名</div>
<div class=”th1″>商品価格</div>
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,
‘staff’, ‘password’);
foreach ($pdo->query(‘select * from product’) as $row) {
echo ‘<form class=”ib” action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”update”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<div class=”td0″>’;
echo $row[‘id’];
echo ‘</div>’;
echo ‘<div class=”td1″>’;
echo ‘<input type=”text” name=”name” value=”‘, $row[‘name’], ‘”>’;
echo ‘</div>’;
echo ‘<div class=”td1″>’;
echo ‘<input type=”text” name=”price” value=”‘, $row[‘price’], ‘”>’;
echo ‘</div>’;
echo ‘<div class=”td2″>’;
echo ‘<input type=”submit” value=”更新”>’;
echo ‘</div>’;
echo ‘</form>’;
echo ‘<form class=”ib” action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”delete”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<input type=”submit” value=”削除”>’;
echo ‘</form>’;
echo “n”;
}
?>
<form action=”edit3.php” method=”post”>
<input type=”hidden” name=”command” value=”insert”>
<div class=”td0″></div>
<div class=”td1″><input type=”text” name=”name”></div>
<div class=”td1″><input type=”text” name=”price”></div>
<div class=”td2″><input type=”submit” value=”追加”></div>
</form>
<?php require ‘../footer.php’;?>

▽247ページ edit3.php
誤
<?php require ‘../header.php’;?>
<table>
<tr><th>商品番号</th><th>商品名</th><th>商品価格</th></tr>
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,
‘staff’, ‘password’);
if (isset($_REQUEST[‘command’])) {
switch ($_REQUEST[‘command’]) {
case ‘insert’:
if (empty($_REQUEST[‘name’]) ||
!preg_match(‘/[0-9]+/’, $_REQUEST[‘price’])) break;
$sql=$pdo->prepare(‘insert into product values(null,?,?)’);
$sql->execute(
[htmlspecialchars($_REQUEST[‘name’]),        $_REQUEST[‘price’]]);
break;
case ‘update’:
if (empty($_REQUEST[‘name’]) ||
!preg_match(‘/[0-9]+/’, $_REQUEST[‘price’])) break;
$sql=$pdo->prepare(
‘update product set name=?, price=? where id=?’);
$sql->execute(
[htmlspecialchars($_REQUEST[‘name’]),  $_REQUEST[‘price’],
$_REQUEST[‘id’]]);
break;
case ‘delete’:
$sql=$pdo->prepare(‘delete from product where id=?’);
$sql->execute([$_REQUEST[‘id’]]);
break;
}
}
foreach ($pdo->query(‘select * from product’) as $row) {
echo ‘<tr>’;
echo ‘<form action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”update”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<td>’, $row[‘id’], ‘</td>’;
echo ‘<td>’;
echo ‘<input type=”text” name=”name” value=”‘, $row[‘name’], ‘”>’;
echo ‘</td>’;
echo ‘<td>’;
echo ‘<input type=”text” name=”price” value=”‘, $row[‘price’], ‘”>’;
echo ‘</td>’;
echo ‘<td><input type=”submit” value=”更新”></td>’;
echo ‘</form>’;
echo ‘<form action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”delete”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<td><input type=”submit” value=”削除”></td>’;
echo ‘</form>’;
echo ‘</tr>’;
echo “n”;
}
?>
<tr>
<form action=”edit3.php” method=”post”>
<input type=”hidden” name=”command” value=”insert”>
<td></td>
<td><input type=”text” name=”name”></td>
<td><input type=”text” name=”price”></td>
<td><input type=”submit” value=”追加”></td>
</form>
</tr>
</table>
<?php require ‘../footer.php’;?>

正
<?php require ‘../header.php’;?>
<div class=”th0″>商品番号</div>
<div class=”th1″>商品名</div>
<div class=”th1″>商品価格</div>
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,
‘staff’, ‘password’);
if (isset($_REQUEST[‘command’])) {
switch ($_REQUEST[‘command’]) {
case ‘insert’:
if (empty($_REQUEST[‘name’]) ||
!preg_match(‘/[0-9]+/’, $_REQUEST[‘price’])) break;
$sql=$pdo->prepare(‘insert into product values(null,?,?)’);
$sql->execute(
[htmlspecialchars($_REQUEST[‘name’]), $_REQUEST[‘price’]]);
break;
case ‘update’:
if (empty($_REQUEST[‘name’]) ||
!preg_match(‘/[0-9]+/’, $_REQUEST[‘price’])) break;
$sql=$pdo->prepare(
‘update product set name=?, price=? where id=?’);
$sql->execute(
[htmlspecialchars($_REQUEST[‘name’]), $_REQUEST[‘price’],
$_REQUEST[‘id’]]);
break;
case ‘delete’:
$sql=$pdo->prepare(‘delete from product where id=?’);
$sql->execute([$_REQUEST[‘id’]]);
break;
}
}
foreach ($pdo->query(‘select * from product’) as $row) {
echo ‘<form class=”ib” action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”update”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<div class=”td0″>’;
echo $row[‘id’];
echo ‘</div>’;
echo ‘<div class=”td1″>’;
echo ‘<input type=”text” name=”name” value=”‘, $row[‘name’], ‘”>’;
echo ‘</div>’;
echo ‘<div class=”td1″>’;
echo ‘<input type=”text” name=”price” value=”‘, $row[‘price’], ‘”>’;
echo ‘</div>’;
echo ‘<div class=”td2″>’;
echo ‘<input type=”submit” value=”更新”>’;
echo ‘</div>’;
echo ‘</form>’;
echo ‘<form class=”ib” action=”edit3.php” method=”post”>’;
echo ‘<input type=”hidden” name=”command” value=”delete”>’;
echo ‘<input type=”hidden” name=”id” value=”‘, $row[‘id’], ‘”>’;
echo ‘<input type=”submit” value=”削除”>’;
echo ‘</form>’;
echo “n”;
}
?>
<form action=”edit3.php” method=”post”>
<input type=”hidden” name=”command” value=”insert”>
<div class=”td0″></div>
<div class=”td1″><input type=”text” name=”name”></div>
<div class=”td1″><input type=”text” name=”price”></div>
<div class=”td2″><input type=”submit” value=”追加”></div>
</form>
<?php require ‘../footer.php’; ?>

▽261ページ login-output.php
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽266ページ
誤
SQL文をexecuteメソッドで実行した結果は、fetchAllメソッド(p.212)で取得することができます。foreachループ(p.116)と組み合わせて、取得した結果を処理します。

foreach ($sql->fetchAll() as $row) {

正
SQL文をexecuteメソッドで実行した結果を、foreachループ(p.116)を使って処理します(p.212)。

foreach ($sql as $row) {

▽273ページ customer-output.php
誤
$sql=$pdo->prepare(‘update customer set name=?, address=?, ‘

正
$sql=$pdo->prepare(‘update customer set name=?, address=?, ‘.

▽275ページ
誤
いずれの場合も、検索結果が空ならば、ログイン名が重複している他のユーザーはいないということです。検索結果が空かどうかは、変数が空であるかどうかを調べるempty関数(p.226)を使います。引数に指定した変数や式が空であるとき、empty関数はTRUEを返します。

if (empty($sql->fetchAll())) {

正
いずれの場合も、検索結果が空ならば、ログイン名が重複している他のユーザーはいないということです。検索結果が空かどうかは、変数や配列が空であるかどうかを調べるempty関数(p.226)を使います。引数に指定した変数や配列が空であるとき、empty関数はTRUEを返します。

if (empty($sql->fetchAll())) {

 検索結果の取得には、PDOStatementクラスのfetchAllメソッドを使います。fetchAllメソッドは、検索結果を配列で返します。検索結果が空ならば、空の配列を返します。

書式 fetchAll
PDOStatementの変数->fetchAll()

▽278ページ product.php
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽279ページ detail.php
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽281ページ
誤
SQL文の実行結果をfetchAllメソッド(p.212)で取得し、foreachループを使って、商品情報を表示します。

正
SQL文の実行結果をforeachループを使って処理し(p.212)、商品情報を表示します。

▽296ページ favorite.php
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽298ページ
誤
foreach ($sql->fetchAll() as $row) {

正
foreach ($sql as $row) {

▽327ページ
誤
fetchAll 212

正
fetchAll 275

※初版第1刷

15ページ サンプルデータの構成
誤
chapter2 Chapter2のスクリプトを収録したフォルダ
chapter3 Chapter3のスクリプトを収録したフォルダ
chapter4 Chapter4のスクリプトを収録したフォルダ
chapter5 Chapter5のスクリプトを収録したフォルダ
chapter6 Chapter6のスクリプトを収録したフォルダ
chapter7 Chapter7のスクリプトを収録したフォルダ
header.php HTMLドキュメントの先頭部分
footer.php HTMLドキュメントの末尾部分
logo.png ページに表示するロゴ画像
style.css Webページの外観をよくするためのスタイルシート

正
chapter2 Chapter2のスクリプトを収録したフォルダ
chapter3 Chapter3のスクリプトを収録したフォルダ
chapter4 Chapter4のスクリプトを収録したフォルダ
chapter5 Chapter5のスクリプトを収録したフォルダ
chapter6 Chapter6のスクリプトを収録したフォルダ
chapter7 Chapter7のスクリプトを収録したフォルダ
chapter8 Chapter8のスクリプトを収録したフォルダ
header.php HTMLドキュメントの先頭部分
footer.php HTMLドキュメントの末尾部分
logo.png ページに表示するロゴ画像
style.css Webページの外観をよくするためのスタイルシート

30ページ phpフォルダの構成
誤
chapter2 Chapter2のスクリプトを収録したフォルダ
chapter3 Chapter3のスクリプトを収録したフォルダ
chapter4 Chapter4のスクリプトを収録したフォルダ
chapter5 Chapter5のスクリプトを収録したフォルダ
chapter6 Chapter6のスクリプトを収録したフォルダ
chapter7 Chapter7のスクリプトを収録したフォルダ
chapter8 Chapter8のスクリプトを収録したフォルダ
header.php HTMLドキュメントの先頭部分
footer.php HTMLドキュメントの末尾部分
logo.png Webページに表示するロゴの画像
style.css Webページの外観を設定するためのスタイルシート
product.sql Chapter6で使用するSQLスクリプト
shop.sql Chapter7で使用するSQLスクリプト

正
chapter2 Chapter2のスクリプトを収録したフォルダ
chapter3 Chapter3のスクリプトを収録したフォルダ
chapter4 Chapter4のスクリプトを収録したフォルダ
chapter5 Chapter5のスクリプトを収録したフォルダ
chapter6 Chapter6のスクリプトを収録したフォルダ
chapter7 Chapter7のスクリプトを収録したフォルダ
chapter8 Chapter8のスクリプトを収録したフォルダ
header.php HTMLドキュメントの先頭部分
footer.php HTMLドキュメントの末尾部分
logo.png Webページに表示するロゴの画像
style.css Webページの外観を設定するためのスタイルシート
※「product.sql」は「chapter6」フォルダ、「shop.sql」は「chapter7」フォルダにそれぞれ移動して収録されています。

73ページ
Fig 変数に値を代入して利用する
誤
$price=5;
echo 10 * $tanka, ‘円’;

正
$price=5;
echo 10 * $price, ‘円’;

196ページ all2.php
誤:<?php require ‘../footer.php’:?>
正:<?php require ‘../footer.php’;?>

256ページ Fig テーブル間の関係 右側1つめのテーブル
誤:customer(顧客)テーブル
正:purchase(購入)テーブル

271ページ customer-input.php  上から11行目
誤:<input type=test”
正:<input type=text”

Mac OS Xにおけるファイルの書き込み許可5-7(p.158)と5-8(p.165)のサンプルが動作しない場合には、以下の操作を行った後に、サンプルを実行してみてください。XAMPP/htdocs/phpフォルダに対する、everyoneによるファイルの書き込みを許可します。①Finderで、アプリケーション/XAMPP/htdocsフォルダを開きます。②phpフォルダを右クリックして、[情報を見る]を選択します。③[phpの情報」ダイアログの[共有とアクセス権]で、everyoneのアクセス権を[読み/書き]にします。④ダイアログの右下にあるロックのアイコンをクリックして、ロックを外します。パスワードを求められたら入力して、[OK]を選択してください。⑤ダイアログの左下にあるギアのアイコンをクリックして、[内包している項目に適用]を選択します。確認ダイアログが表示されたら、[OK]を選択してください。

○Mac OS Xにおけるファイルの書き込み許可
5-7(p.158)と5-8(p.165)のサンプルが動作しない場合には、以下の操作を行った後に、サンプルを実行してみてください。XAMPP/htdocs/phpフォルダに対する、everyoneによるファイルの書き込みを許可します。

①Finderで、アプリケーション/XAMPP/htdocsフォルダを開きます。
②phpフォルダを右クリックして、[情報を見る]を選択します。
③[phpの情報」ダイアログの[共有とアクセス権]で、everyoneのアクセス権を[読み/書き]にします。
④ダイアログの右下にあるロックのアイコンをクリックして、ロックを外します。パスワードを求められたら入力して、[OK]を選択してください。
⑤ダイアログの左下にあるギアのアイコンをクリックして、[内包している項目に適用]を選択します。確認ダイアログが表示されたら、[OK]を選択してください。

○208ページ search-output.php
PHP5.3以前を使用する場合には、array関数(p.116)を使ってスクリプトの一部を変更してください。
変更前:$sql->execute([$_REQUEST[‘keyword’]]);
変更後:$sql->execute(array($_REQUEST[‘keyword’]));

○以下のスクリプトにおいて、内容を一部修正しております。
p.261, login-output.php
p.268, logout-output.php
p.270, customer-input.php
p.273, customer-output.php
p.283, cart-insert.php
p.291, cart-delete.php
p.293, favorite-insert.php
p.299, favorite-delete.php
p.300, favorite-show.php
※PHPでセッションを使用する場合には、session_start関数を呼び出します。この関数はHTMLなどを出力する前に実行する必要があるので、スクリプトの先頭で呼び出しています。

修正前
<?php require ‘../header.php’;?>
<?php require ‘menu.php’;?>
<?php
session_start();

修正後
<?php session_start();?>
<?php require ‘../header.php’;?>
<?php require ‘menu.php’;?>
<?php

■訂正と補足
fetchAll(Chapter6, Chapter7)

セキュリティ
session_start(Chapter7)
この記事をシェアする