mysql|データ|データベース
すべてがうまくいっているように見えますが、ユーザーと実際に対話するという目標はまだ達成されていません。ユーザーは任意の情報を入力して、それを PHP で処理できるようにする必要があります。パーソナライズされたウェルカム ページの例を続けて、ユーザーが自分の名前を任意に入力してメッセージに表示できるようにしたいと思います。ユーザーがデータを入力できるようにするには、HTML フォームを使用する必要があります。
フォームのコードは次のとおりです:
ここ以外には、お好きな名前を入力できます。このフォームは、上記の 2 番目の接続 (クエリ文字列で firstname=Kevin&lastname=Yank を使用) とまったく同じ効果があります。送信ボタン (「GO」とマークされている) を押すと、ブラウザーは welcome.php をロードし、変数とその値をクエリ文字列に自動的に追加します。変数名は INPUT TYPE=TEXT タグの NAME 属性で、変数値はユーザーが入力した対応する内容です。
INPUT TYPE=TEXT タグの METHOD 属性は、リクエストで変数名と変数値を送信する方法をブラウザーに指示するために使用されます。 GET (上で使用したもの) はクエリ文字列で変数を渡すことを意味しますが、別のオプションもあります。クエリ文字列内の変数の表示は必ずしも満足のいくものであるとは限りません。場合によっては、技術的に実行できない場合もあります。ユーザーが大量のテキストを入力できるようにフォームに TEXTAREA タグを含めると、このテキストは長すぎてクエリ文字列に表示できず、ブラウザーでサポートされている最大 URL 長を超えます。別の方法では、ブラウザーが暗黙的に情報を渡すことができます。このメソッドのコードは、フォーム メソッドを GET から POST に変更したことを除いて、上で見たフォームのコードとほぼ同じです。
このフォームは機能的には前のフォームと同じです。唯一の違いは、ユーザーが「GO」ボタンを押したときにロードされるページの URL にはクエリ文字列が含まれないことです。これにより、クエリ文字列に表示せずに、フォームを通じて大量のデータや機密データ (パスワードなど) を送信できるようになります。一方、ユーザーがフォームの送信によって生成された結果ページをお気に入りに追加した場合、そのお気に入りには送信されたデータが含まれていないため、役に立ちません。さらに、ちなみに、AltaVista のような検索エンジンは常にクエリ文字列を使用してクエリ条件を送信します。その主な理由は、ユーザーが将来同じ検索を実行するためにクエリ結果ページをお気に入りに追加しやすくするためです。 URLに含まれています。
ここでは、フォームを使用して PHP とのユーザー対話を実現するための基本原則について説明します。今後の例では、より高度な問題とテクニックについて説明します。
制御ステートメント
前に見た PHP コードの例では、Web ページにテキストを出力する単一のステートメント、または連続して実行される一連のステートメントがありました。他の言語でプログラムを書いたことがある場合は、実際にこれほど単純なプログラムはほとんどないことをご存知でしょう。
他のプログラミング言語と同様、PHP もスクリプトで「制御フロー」を処理する便利な方法を提供します。つまり、PHP には、実行順序に拘束されない特別なステートメントがいくつか含まれています。このような文を「制御文」といいます。分かりませんか?心配しないでください!うまく役立つ例がいくつかあります。
最も基本的でよく使われる制御文はif-else文です。その構造は次のとおりです:
if (
) {
// が true の場合、ステートメントは実行されます。
} else {
//(オプション) が false の場合、ステートメントが実行されます。
}
この制御言語を使用すると、いくつかの条件の true または false に基づいて、どのステートメントのセットを実行するかを PHP に決定させることができます。これが少し空っぽだと思わない場合は、作成した welcome.php ファイルを次のように変更できます。
if ( $name == "Kevin" ) {
echo( "Welcome, oh glorious leader!" );
} else {
echo( "Welcome, $name!" );
}
さて、このページに渡された name 変数の値が Kevin の場合、特別なメッセージが表示されます。それ以外の場合は、入力した名前を含む単純なメッセージが表示されます。
この構造では、「else 節」 (if-else 構造の条件が false の場合に何を実行するかを示します) はオプションであることに注意してください。上の例では、適切な名前が入力されたときに特別なメッセージを表示することが目的の場合、そうでない場合は何も表示されません。このコードは次のようになります:
if ( $name == "Kevin" ) {
echo( "Welcome, oh glorious leader!" );
}
== 上記の条件で使用される演算子です2 つの値が等しいかどうかを比較するために使用されます。ここで 2 つの等号を入力する必要があることを覚えておいてください。等号を入力すると、実際には前に説明した代入演算子を使用することになり、2 つの変数の値を比較するのではなく、新しい値を変数に代入します (この操作は偶然にも true を返します)。この結果、条件が常に true になるだけでなく、確認したい変数の値も変更され、多くの問題が発生する可能性があります。
このエラーを防ぐ安全な方法は、次のように比較に使用される変数と定数の位置を逆にすることです:
if ( "Kevin" == $name ) {
これの効果は全く同じです、しかし、2 番目の等号を忘れた場合に何が起こるかを見てみましょう。 PHP は変数 ($name) の値を定数 (「Kevin」) に挿入しようとします。定数の値は変更できないため、PHP は中断して、2 番目の等号を忘れたことをすぐに知らせるエラー メッセージを表示します。
条件は、単一の同等性の比較よりも複雑になる場合があります。名と姓を同時に取得できる welcome.php3 を変更したことを思い出してください。特定の人に特別なメッセージを表示したい場合は、両方の変数を同時に比較できます:
if ( "Kevin" == $firstname および "Yank" == $lastname ) {
echo( "Welcome 、ああ、栄光のリーダー!" );
}
この条件は、$firstname の値が Kevin で、$lastname の値が Yank の場合にのみ true を返します。と の意味は、両方の比較が true の場合にのみ、条件全体が true を返すということです。もう 1 つの記号は or です。これは、2 つの比較のうち少なくとも 1 つが true の場合に、条件全体が true を返します。 JavaScript と C の演算子 (&&(and) と ||(or)) に精通している場合は、PHP でも同様に使用できます。
以下では、さらに複雑な比較を見ていきます。ここで必要なのは、if-else ステートメントの基本的な理解だけです。
もう 1 つの一般的に使用される PHP 制御ステートメントは、while ループです。 if-else ステートメントを使用すると、条件に基づいて一連のステートメントを実行するかどうかを選択でき、while ループを使用すると、条件に基づいて一連のステートメントを繰り返す回数を決定できます。 while ループの基本的な形式は次のようになります:
while ( ) {
// が true である限り繰り返し実行されるステートメント
}
これはelse 節のないステートメントと同じ if-else ステートメントは非常に似ています。違いは、条件が true の場合、ステートメントの実行後、ターミネータ (}) の後のステートメントは実行されなくなりますが、条件が再度チェックされることです。この条件がまだ当てはまる場合。ステートメントは、条件が true でなくなるまで繰り返し実行されます。この条件が初めて false を返した場合 (何度チェックしても)、実行はループに続く (ターミネータの後) ステートメントにジャンプします。
このようなループは、長いリスト (データベースに保存されているジョークなど) を処理するために使用できます。以下に、10 まで数える簡単な例を示します。
$count = 1;
while ($count echo( "$count " );
$count++;
}
このステートメントは怖く見えるかもしれませんが、見てみましょうそれを一行ずつ。最初の行では、$count という変数を定義し、値 1 を割り当てます。 2 行目は while ループの始まりで、条件は $count が (<=) 10 以下であることです。 3 行目と 4 行目は while ループの本体で、条件が true の場合に繰り返し実行します。 3 行目は、$count の値とその後にスペースを出力するだけです。 4 行目は、$count の値を 1 ずつ増やします ($count++ は $count = $count + 1 の短縮形です。この 2 つはまったく同じ意味です)。
これで、このプログラムがどのように実行されるかを見てみましょう。条件が初めてチェックされるとき、$count の値は 1 であるため、条件は true です。 $count の値 (1) が出力され、$count には新しい値 2 が割り当てられます。条件が 2 回目にチェックされると、条件は依然として true であるため、2 が出力され、新しい値 3 が割り当てられます。このプロセスは 3、4、5、6、7、8、9 を 10 まで出力し続けます。最後に、$count に値 11 が割り当てられ、条件が false になり、ループが終了します。最終結果は、「1 2 3 4 5 6 7 8 9 10」のような文字列を出力します。
この条件例では、新しい演算子 <= (以下) を使用します。数値比較に使用される他の演算子は、>= (以上)、< (より小さい)、> (より大きい)、および != (等しくない) です。最後のものは文字列比較にも使用できます。
多目的ページ
構築するウェブサイトの各ページの上部に訪問者の名前を表示したい場合。ウェルカム メッセージを自動的に表示する前述の例を使用すると、基本的には半分まで到達しました。ここで、この例のこれらの問題を解決する必要があります:
1 つのページだけでなく、サイトのすべてのページに表示する必要があります。
サイト内のどのページが最初に表示されるかは、私たちには制御できません。
最初の問題の解決策はそれほど難しくありません。ページ上にユーザー名変数を取得したら、それをクエリ文字列に追加することで、任意のリクエストに渡すことができます:
リンク
HTML 識別子の途中に PHP コードを埋め込んでいることに注意してください。実際、これは非常に一般的に使用されています。 echo 関数についてはすでによく知っていますが、urlencode 関数についてはまだよくわかっていません。この関数の機能は、文字列内の一部の特殊文字 (スペースなど) を特定のエンコーディングに変換して、クエリ文字列に表示できるようにすることです。たとえば、$name 変数の値が「Kevin Yank」で、クエリ文字列にスペースが許可されていない場合、newpage.php で $name が作成されると、urlencode の出力は Kevin+Yank になります。自動的に元に戻します。
それでは、サイトへの最初の接続にユーザー名を渡します。ここで必要なのは、最初に表示されたときにその値を取得することだけです。上記の例では、ユーザー名を取得するフォームを処理する HTML ページを作成しました。問題は、ユーザーがサイトにアクセスするたびにこのページから開始することを強制できないことです。
解決策は、サイトのすべてのページでユーザー名が指定されているかどうかを確認し、必要に応じてユーザーにユーザー名の入力を求めることです。これは、サイト上のすべてのページでユーザー名を表示でき、ユーザー名が指定されていない場合は入力を求めるプロンプトを表示できる必要があることを意味します。今、if-else ステートメントを使おうと考えているなら、それはあなたの学習能力が非常に優れていることを証明しています。
「多機能ページ」は、さまざまな条件に応じてまったく異なるコンテンツを表示する必要があります。このページのソース プログラムは次のようになります。ページ概要
) { ?>
< BODY>
このプログラムは最初は混乱しているように見えますが、実際には通常の if-else ステートメントに変わりはありませんが、PHP ステートメントの前に使用したものの代わりに HTML コードが挿入されています。この例は、PHP の大きな利点の 1 つを示しています。それは、「PHP モード」に入るときと終了するときを自由に選択できることです。 は「通常の HTML モード」に戻るコマンドと考えることができます。これにより、上記の例が理解しやすくなります。
if-else ステートメントには別の形式があります。この形式を使用すると、プログラムが読みやすくなります。この形式を使用すると、「多目的ページ」のソース プログラムは次のようになります:
多目的ページの概要
< ;/HEAD>
): ?>
< ? php else: ?>
必要なツールがすべて揃ったので、サイトのサンプル ページを見てみましょう:
TITLE>
あなたの名前:
この段落には
リンク
name 変数を次のドキュメントに渡します。
<--名前が指定されていないため、ユーザーに名前の入力を求めます。 -->
< /HTML>
上記のプログラムには 2 つの新しい点がありますが、それらを理解するのはそれほど難しいことではありません。まず、条件で新しい関数を使用します。この場合、これは次のことを意味します。ユーザー名が指定されている場合、関数は論理値 true を返します (出力)。変数に値が割り当てられていない場合 (この場合、ユーザー名が指定されていないことを意味します)、関数は論理値を返します (出力)。 2 番目の新しい点は、指定された FORM フラグの ACTION 属性での $PHP_SELF 変数の使用です。具体的には、フォームが送信時に同じページを指す場合、$PHP_SELF は常に現在のページの URL に設定されます。 , これは簡単な方法ですが、$name 変数はすでに割り当てられています
この段落を Web サイト上のすべての Web ページに追加すると、訪問者がどの Web ページに初めてアクセスするかに関係なく、プロンプトが表示されます。ユーザー名を入力し、「GO」を押した後でのみ、実際にアクセスしたい Web ページにアクセスできます。入力されたユーザー名は、各接続のクエリ文字列が後続の各ページに渡されます。
結論
この章では、ステートメント、変数、演算子、制御ステートメントなどのすべての基本的な構文を紹介しました。 PHP の威力は、何百もの組み込み関数にあり、これらの関数を使用して MySQL データベース内のデータにアクセスし、動的に生成された画像から PDF ファイルを作成したり、その他多くのことを実行したりできます。
第 4 章では、MySQL を使用して、前の章で確立したジョーク データベースを Web 上で公開する方法を検討します。