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 ";
が行っている処理を教えて下さい。
初歩的な質問かもしれませんが、よろしくお願いします。
No.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文による条件判定を無くした)プログラムを用意して実行し、
元のプログラムと挙動を比較してみて下さい。
No.2
- 回答日時:
No.1
- 回答日時:
ドットは文字列の連結の記号ですよね。
変数$varの値を1加算する時、
$var = $var + 1;
と書きますが、これは
$var += 1;
と略記できる事はご存知ですか?
これと同じで、
$where .= " AND ";
は
$where = $where."AND";
の略記表現です。
$whereに、「$whereと"AND"を連結した文字列」を格納するんです。
> また、
> if ($i < count($array) - 1) {
> $where .= " AND ";
> が行っている処理を教えて下さい。
参考書のプログラムと、参考書のプログラムからその2行を消したプログラムの2つを用意して、
両方実行させてみて下さい。
両者の挙動を見比べれば、何をしているのかが分かると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php ログイン 1 2022/11/01 00:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スカラーのベクトル微分
-
php で1から100までの素数の表...
-
PHPのmin関数、「1」以上の数値...
-
pythonのnumpyでの繰り返しでの...
-
C言語 最大値と最小値を求めて...
-
STLのvectorで作った配列をメン...
-
CArrayの要素としてCStringArra...
-
Pager::factory()の使い方がわ...
-
C言語で全角文字の扱いについて
-
数独かを判断するプログラム
-
PDOのバインドをforeachでまと...
-
C言語の配列をPush(追加)する...
-
PHPは何故値渡しより参照渡しの...
-
行列
-
System.String.Splitでエラー
-
連想配列から<th>を含むテーブ...
-
np.stack()とnp.array()の違い
-
am()の使い方
-
cakephpでのトランザクション処...
-
verilogで、配列の一部をタスク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スカラーのベクトル微分
-
STLのvectorで作った配列をメン...
-
特定の文からメールアドレスの...
-
配列の要素(value)に、変数を...
-
読み(あ行~わ行)ごとに分け...
-
ファイルの書き込みについて教...
-
verilogで、配列の一部をタスク...
-
CArrayの要素としてCStringArra...
-
pythonのnumpyでの繰り返しでの...
-
C言語の配列をPush(追加)する...
-
php キーソート キーが重複した...
-
CArrayのソート
-
【PHP】配列のキー名の修正は可...
-
多次元配列をエンコードする関...
-
PHPは何故値渡しより参照渡しの...
-
cakephpでのトランザクション処...
-
pg_copy_fromの使い方について...
-
array_intersectで空欄を比較し...
-
濁点のソート
-
配列中のあるキー、値を取得し...
おすすめ情報