プロが教える店舗&オフィスのセキュリティ対策術

PHPによるWebアプリケーションスーパーサンプル第2版のP.99のサンプルファイルにどうしても分からない箇所があります。

<html>
<head>
<title>絞込み検索キーワードをSQLに反映する</title>
</head>
<body>
<?php
// データを受け取る
$text1 = @$_POST["text1"];

// SQL(ProductsテーブルからProductNameを抽出する)
$sql = "SELECT ProductName FROM Products ";

// キーワードが入力されているときはWHERE以下を組み立てる
if (strlen($text1) > 0) {
// 全角スペースを半角スペースに変換する
$text2 = str_replace(" ", " ", $text1);

// キーワードを空白で分割する
$array = explode(" ", $text2);

// 分割された個々のキーワードをSQLに反映する
$where = "WHERE ";
for ($i = 0; $i < count($array); $i++) {
$where .= "(ProductName LIKE '%$array[$i]%')";
if ($i < count($array) - 1) {
$where .= " AND ";
}
}

}

// 受け取った値を表示する
echo "<p>検索キーワード:".$text1;

// 組み立てたSQLを表示する
echo "<p>組み立てたSQL:".$sql.@$where;

?>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
<table>
<tr>
<td><input type="text" name="text1" value="<?php echo $text1?>"></td>
<td><input type="submit" value="送信" name="sub1"></td>
</tr>
</table>
</form>
</body>
</html>

上記の
for ($i = 0; $i < count($array); $i++) {
$where .= "(ProductName LIKE '%$array[$i]%')";
if ($i < count($array) - 1) {
$where .= " AND ";
}
}
の箇所なんですが、そこに複数ある「.(ドット)」は何を表しているのでしょうか?
また、
if ($i < count($array) - 1) {
$where .= " AND ";
が行っている処理を教えて下さい。

初歩的な質問かもしれませんが、よろしくお願いします。

A 回答 (3件)

ANo.1ですが訂正です。



「参考書のプログラムと、参考書のプログラムからその2行を消したプログラムの2つを用意して、」
と書きましたが、消すのは次の3行です。

if ($i < count($array) - 1) {
$where .= " AND ";
}

失礼しました。

それから、もしif文の条件判定が何で必要なのかが分からないのであれば、
元のプログラムの

for ($i = 0; $i < count($array); $i++) {
$where .= "(ProductName LIKE '%$array[$i]%')";
if ($i < count($array) - 1) {
$where .= " AND ";
}
}

の部分を

for ($i = 0; $i < count($array); $i++) {
$where .= "(ProductName LIKE '%$array[$i]%')";
$where .= " AND ";
}

に書き換えた(if文による条件判定を無くした)プログラムを用意して実行し、
元のプログラムと挙動を比較してみて下さい。
    • good
    • 0
この回答へのお礼

わざわざ2回も回答してくださってありがとうございます。とても参考になりました。

お礼日時:2011/09/08 17:49

リファレンスマニュアルや参考書で「文字列演算子」「代入演算子」という項目を読んでください。



http://www.php.net/manual/ja/language.operators. …
    • good
    • 0
この回答へのお礼

教えてくださったサイトを見させていただきました。どうもありがとうございました。

お礼日時:2011/09/08 17:49

ドットは文字列の連結の記号ですよね。



変数$varの値を1加算する時、
$var = $var + 1;
と書きますが、これは
$var += 1;
と略記できる事はご存知ですか?

これと同じで、
$where .= " AND ";

$where = $where."AND";
の略記表現です。
$whereに、「$whereと"AND"を連結した文字列」を格納するんです。

> また、
> if ($i < count($array) - 1) {
> $where .= " AND ";
> が行っている処理を教えて下さい。

参考書のプログラムと、参考書のプログラムからその2行を消したプログラムの2つを用意して、
両方実行させてみて下さい。
両者の挙動を見比べれば、何をしているのかが分かると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!