本書内の記載のうち、以下の項目で誤りがありました。
修正内容を提示させていただきます。
ご迷惑をおかけいたしました事、深くお詫び申し上げます。
※初版第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)