PHPでデータを送信するためのフォーム(POST、GET)。 HTML フォームを処理するための PHP スクリプト PHP でのフォームの作成

08.10.2023

実際に最も一般的なタスクの 1 つは、フィードバック フォームの実装です。 つまり、HTML コードを記述し、CSS でデザインし、 PHP作成ユーザーから受け取ったデータを処理して電子メールに送信するスクリプト。入力されたデータが適切かどうかフォームをチェックする JS スクリプトを作成し、スパムから私たちの発案を保護します。 メールボックスボットの攻撃によって崩壊することはありませんでした。

上記のすべての点については、レビューで詳しく説明し、コメントします。

それでは、フィードバック フォームの作成を始めましょう。

HTML

まず、ユーザーが入力するフィールドを指定する HTML コードを作成します。 将来的には正式化される予定です。 フォームのコードは次のようになります。

< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >名前:< input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >電話:< input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >電子メール:< input maxlength= "30" type= "text" name= "mail" /> < div class = "right" > < label for = "message" >メッセージ:< textarea rows= "7" cols= "50" name= "message" > < input type= "submit" value= "送信" />

そして視覚的には次のようになります。

私も同意します。これまでのところ、すべてが醜く、何も明らかではありませんが、まだ始まったばかりです。

上記のコードを詳しく見てみましょう。

  • < form method= "post" action= "mail.php" > …


    フォームを作成するには、form タグを使用する必要があります。 コードインタープリタのフォームの始まりと終わりを決定するのは彼です。 他のタグと同様に、これには一連の属性がありますが、フォームが機能するために必要な属性は 2 つだけです。メソッド (サーバーにリクエストを送信するメソッド。投稿はフォームの標準として使用されます) とアクション (フォーム ハンドラー ファイルへのパスを示します。つまり、このファイルには PHP スクリプトが含まれ、ユーザーが入力した値が電子メールで送信されます。このファイルの名前は mail.php です。これは検討中のページと同じサイト ディレクトリにあります)。
  • < input maxlength= "30" type= "text" name= "name" />


    次に入力があります。 これらは実際には、ユーザーが必要な情報を入力するフォーム フィールドそのものです (type="text" は、これがテキストであることを示します)。 maxlength 属性は、ユーザーが特定のフォーム フィールドに入力できる文字数を指定します。 最も重要な属性は名前です。これは特定のフィールドの名前を指定します。 PHP スクリプトは、これらの名前を使用して、入力される情報を処理します。 必要に応じて、フィールド内にカーソルを置くと消えるテキストをフィールド内に表示するプレースホルダー属性を設定することもできます。 プレースホルダーの問題の 1 つは、一部の古いブラウザーではサポートされていないことです。
  • < label for = "name" >名前:


    プレースホルダーを放棄した場合に使用されます。 通常のフィールド署名。for 属性は、この署名がどの特定のフィールドを参照しているかを示します。 値は、関心のあるフィールドの名前を示します。
  • < textarea rows= "7" cols= "50" name= "message" >


    input と同様に、ユーザーが情報を入力することを目的としていますが、今回のみフィールドは長いメッセージ用に調整されています。 Rows はフィールド サイズを行数、列数を文字数で指定します。 一般に、フィールドの高さと幅を設定します。
  • < input type= "submit" value= "送信" />


    Type="submit" は、これがフォームを送信するためのボタンであることを示し、value はこのボタン内に表示されるテキストを指定します。
  • < div class = "right" >


    フォームの視覚的なデザインをさらに進める目的でのみ使用されます。
CSS

フィードバック フォームを見栄え良くするには、フォーマットする必要があります。 次の結果を取得するには:

次のコードを使用しました。

フォーム (背景: #f4f5f7; パディング: 20px; ) フォーム 。 左、フォーム。 right (表示: インラインブロック; 垂直位置: トップ; 幅: 458px; ) フォーム。 右 ( パディング - 左: 20px; ) ラベル ( 表示: ブロック; フォント - サイズ: 18px; テキスト - 配置: センター; マージン: 10px 0px 0px 0px; ) 入力、テキストエリア ( ボーダー: 1px ソリッド #82858D; パディング: 10px;フォントサイズ: 16px; 幅: 436px; ) textarea (高さ: 98px; margin-bottom: 32px; ) input[type= "submit" ] (幅: 200px; float: right; border: none; 背景: #595B5F;色: #fff; テキスト変換: 大文字;

CSS について詳しく説明することに意味はないと思います。重要な点だけを説明します。

  • フォームにタグごとにデザインを記述する必要はありません。 必要なすべての要素を数行のコードで設計できるようにセレクターを構築してみてください。
  • 改行やインデントを作成するために不必要な type タグを使用しないでください。< br>, < p>など。display: block と margin プロパティを備えた CSS は、これらのタスクにうまく対処します。 使用すべきではない理由の詳細< br>レイアウト全般については、タグ br の記事を参照してください。しかし、それは本当に必要ですか? 。
  • フォームには表形式のレイアウトを使用しないでください。 これはこのタグのセマンティクスと矛盾しており、検索エンジンはセマンティクス コードを好みます。 ドキュメントの視覚的な構造を形成するには、div タグと、で指定されたタグのみが必要です。 CSS プロパティ display: inline-block (ブロックを一列に配置) とvertical-align: top (ブロックが画面全体に散らばるのを防ぎます) を必要な高さに設定すると、余計なものは何もなく、すべてが必要な場所に配置されます。
  • Web サイトのデザインにかかる時間を節約したい人には、Web サイト、特に自作の Web サイトを作成するときに CSS フレームワークを使用することをお勧めします。 この点で私が選んだのは Twitter Bootstrap です。 これを使用してフォームをデザインする方法のレッスンを視聴できます。

    PHP

    さて、フォームを機能させる時が来ました。

    サイトのルート ディレクトリに移動し、そこに mail.php ファイルを作成します。このファイルへのパスは、以前に form タグの action 属性で指定しました。

    最終的に彼のコードは次のようになります。

    メッセージは正常に送信されました

    このドキュメントの HTML および CSS 部分の説明は省略できます。 これは基本的に、希望やニーズに応じてデザインできる通常の Web サイトのページです。 最も重要な部分であるフォームを処理する PHP スクリプトを見てみましょう。

    $back = "

    戻る

    " ;

    この行で、前のページに戻るリンクを作成します。 ユーザーがどのページからこのページにアクセスするかは事前にはわからないため、これは小さな JS 関数を使用して行われます。 将来的には、この変数にアクセスするだけで、必要な場所に表示できるようになります。

    if (! empty ($_POST [ "name" ] ) および ! empty ($_POST [ "phone" ] ) および ! empty ($_POST [ "mail" ] ) および ! empty ($_POST [ "message" ] ) ) ( // ハンドラーの内部部分 ) else ( echo "メッセージを送信するには、すべてのフィールドに入力してください! $back " ; exit ; )

    ここでは、フィールドがいっぱいであることを確認するフォーム チェックを追加します。 ご想像のとおり、$_POST["name"] の部分では、入力の name 属性の値を引用符で囲んで記述します。

    すべてのフィールドが入力されている場合、スクリプトは内部部分でデータの処理を開始しますが、少なくとも 1 つのフィールドが入力されていない場合は、すべてのフィールドに入力するように求めるメッセージがユーザーの画面に表示されます。フォームのフィールドには「メッセージを送信するには、すべてのフィールドに記入してください! $back」というエコーと、最初の行で作成した前のページに戻るためのリンクが含まれています。

    次に、フォーム ハンドラーの内部部分に貼り付けます。

    $name = トリム(strip_tags($_POST["name"]));

    $phone = trim(strip_tags($_POST["phone"])); $mail = trim(strip_tags($_POST["mail"]));$message = トリム(strip_tags($_POST["メッセージ"]));

    このようにして、ユーザー入力をクリアしました

    サーバー側でフォーム保護を完全に放棄して JS を使用することはお勧めしません。非常にまれではありますが、ブラウザーで JS が無効になっている独自のフォームが存在するためです。

    タグを削除した後、メッセージの送信を追加します。

    mail ("メッセージ受信用のメール@gmail.com" , "あなたのサイトのアドレスからの手紙" , "私はあなたに書きました: " . $name . "
    彼の番号: " . $phone . "
    彼の電子メール: " . $mail . "
    彼のメッセージ: " . $message, "Content-type:text/html;charset=windows-1251" ) ;

    メッセージの生成と送信を担当するのはこの行です。 次のように記入されます。

  • [email protected]」 – ここで引用符の間に電子メールを挿入します。
  • 「あなたのサイトアドレスからの手紙」は、あなたの電子メールに送信されるメッセージの件名です。 ここには何でも書き込めます。
  • 「私はあなたに書きました:「.$name」。< br />彼の番号: 「.$phone」< br />彼の電子メール: 「.$mail」< br />彼のメッセージ: 「.$message – メッセージ テキスト自体を作成します。 $name – 前のステップのフィールドにアクセスして、ユーザーが入力した情報を挿入します。引用符で囲んで、このフィールドの意味をタグで説明します。< br />メッセージ全体が読みやすいように改行します。
  • Content-type:text/html;charset=windows-1251 - 最後に、メッセージで送信されるデータ型とそのエンコーディングが明示的に示されています。
  • 重要!

    ドキュメントの「ヘッド」で指定されたエンコーディング (< meta http- equiv= "Content-Type" content= "text/html; charset=windows-1251" />)、メッセージ Content-type:text/html;charset=windows-1251 からのエンコードと一般的なエンコード PHPファイル一致する必要があります。一致しない場合、電子メールで受信したメッセージには、ロシア語または英語の文字の代わりに「krakozyabry」が表示されます。

    多くは、送信されるメッセージのエンコーディングを明示的に示していませんが、一部のものでは、 メールクライアントこのため、将来的に問題が発生する可能性があります(読めない文字がメールに送信される)ので、それでも指定することをお勧めします。

    入力されたデータがフォームに適切であるかどうかを確認する

    ユーザーがうっかりフィールドを見逃さず、すべてを正しく入力できるように、入力されたデータを確認することは価値があります。

    これは、サーバー側の PHP とクライアント側の JS の両方で実行できます。 私が 2 番目のオプションを使用するのは、この方法により、人は自分の間違いをすぐに見つけて、間違いを犯すことなく修正できるからです。 追加のトランジションページごとに。

    フォームの HTML 部分と同じファイルにスクリプト コードを貼り付けます。 私たちの場合、次のようになります。

    < script>function checkForm(form) ( var name = form.name.value; var n = name.match(/ ^[ A- Za- zA- Jaa- z ] * [ A- Za- zA- Ja- z ] + $/ ) ; if (! n) (alert("名前が間違って入力されました。エラーを修正してください" ) ; return false ; ) var Phone = フォームの値。/ ^[ 0 - 9 + ] [ 0 - 9 - ] * [ 0 - 9 - ] + $/ ) ; if (! p) (alert("電話番号が間違って入力されました") ; return false ; ) var mail = match(/ ^[ A- Za- z0- 9 ] [ A- Za- z0- 9 \. _- ] * [ A- Za- z0- 9 _] *@ ([ A- Za- z0- 9 ] + ([ A- Za - z0- 9 - ] * [ A- Za- z0- 9 ] + ) * \. ) + [ A- Za- z] + $/ ) ; if (! m) (alert("メールが正しく入力されていません)エラーを修正してください。" ) ; false を返します ; ) true を返します ; )

    さて、ここからはいつもの分析です。

    送信ボタンをクリックしたときにフォームをチェックできるように、スクリプトの起動を form タグに添付します。

    < form method= "post" action= "mail.php" onSubmit= "return checkForm(this)" >

    それでは、チェックリストをポイントごとに見てみましょう。


    ご覧のとおり、このようなミニチェックはフィールドごとに書かれています。 スクリーンショットでは 1 つのフィールドのチェックを赤い四角で強調表示しました。他のフィールドも同様の構造になっており、フィールドを追加または削除する必要がある場合は、これを簡単に行うことができます。

    前のトピックの 1 つで、フォームからのデータの取得についてすでに説明しました。 このトピックでは、フォームをサーバーに正しく送信する方法と、PHP でフォームを処理する方法を詳しく説明します。

    フォームの送信

    入力フィールド。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    最も一般的なフォーム要素は、さまざまな入力フィールドです。 これらは、さまざまな種類のタグと タグを使用して作成されます。 これらの要素からのデータの送信は簡単です。 タグには、パラメータの名前を指定する name 属性があります。 パラメーター値は、ユーザーが入力フィールドに書き込むテキストです。 さらに、タグにはデフォルト値を指定する value 属性を含めることができます。 ユーザーが何も入力しない場合、この値はサーバーに送信されます。 たとえば、フォームを作成して入力フィールドを追加してみましょう。

    ページ

    12
    13
    14
    15
    16
    17
    18

    選択します。

    データは次のようにタグから送信されます。 このタグ自体には name 属性があります。 また、value 属性はタグ上ではなく、リスト項目、つまりタグ上にあります。 通常、各項目には独自の value 属性値があります。 ユーザーがどの項目を選択しても、パラメータ値はその項目から取得されます。 この場合、タグ内のテキストは重要ではなく、属性のみが使用されます。 フォームにタグを追加します。

    ラジオボタン。

    同じグループのすべてのラジオ ボタンには、同じ name 属性が必要です。 この値はパラメータ名を設定するだけでなく、ラジオ ボタンを 1 つのグループにグループ化し、そこからラジオ ボタンを 1 つだけ選択できます。 value 属性は別の方法で設定されます。 フォームにラジオ ボタンを追加しましょう。 チェックボックス。ラジオボタンとは異なり、各チェックボックスは

    別の要素

    フォーム。 すべてのチェックボックスは互いに独立しており、それぞれのチェックボックスがそのデータをサーバーに送信します。 name 属性はすべてのチェックボックスで異なる必要があり、value 属性は同じでも異なっていてもかまいません。 ただし、チェックボックスには特定のデータがありません。 選択することも選択しないこともできます。 したがって、長い値に設定しても意味がありません。 1 文字の値 (1 など) を指定できます。サーバー上でのこの値の意味は次のようになります。値がある場合はチェックボックスが選択されており、値がない場合はチェックボックスが選択されています。選択されていません。 フォームにチェックボックスを追加し、送信ボタンを作成しましょう。

    フォームからのデータの処理

    提案された例では、takeform.php というスクリプトにデータを送信するフォームが作成されています。 したがって、このスクリプトを作成する必要があります。 これは単なるプログラムではなく、フォームから受け取ったデータに応じて生成されるページです。 フォームはPOSTメソッドを使用して送信されます。 スクリプトは、$_POST スーパーグローバル配列からこのデータを取得します。 配列要素はスクリプト内で簡単に使用できますが、頻繁に操作する必要がある場合、要素の名前を毎回記述するのは不便です。 値を変数に書き込んでアクセスする方が簡単です。 ファイル takeform.php を作成し、最初の 2 つのフォーム要素の値を変数に書き込みましょう。

    13
    14
    15
    16
    17

    takeform.php:

    タグに value 属性を追加しませんでした。 何も入力しない場合、値は空になります。 多くの場合、ユーザーが入力フィールドに何かを書き込んだかどうかを確認する必要があります。 これには empty() と呼ばれる関数があり、変数に空の値が含まれている場合は true を返し、それ以外の場合は false を返します。 フォームからデータを受け取るページで、 に何か入力されているかどうかを確認します。 その値を $self 変数に書き込み、それを確認します。 値が含まれている場合は、ページにブロックを追加し、その中に変数のテキストを配置します。 変数が空の場合、ブロックは作成されません。

    if (!empty($self)) ( echo "

    選択します。

    入力フィールドのテキストは通常​​、単独で使用されます。 これはデータベースに書き込まれるか、ページに出力されます。 ただし、他のフォーム要素のデータは少し異なる方法で使用されます。 フォームからデータを受け取ったスクリプトは、それを表示しませんが、それに基づいて実行する必要があるアクションを決定します。 ユーザーによるリスト項目の選択に応じてページの一部を形成しましょう。

    開始タグにご注意ください

    19 行目はデータ処理の前にあり、28 行目は最後の処理です。このように、HTML コードだけでなく、特定のタグもパーツに分割されます。 これは一般的な慣行です。

    ラジオボタン。

    同じグループ内のすべてのラジオ ボタンは同じ value 属性を持ちます。 したがって、$_POST 配列の 1 つの要素がグループ全体に対して作成されます。 ユーザーが選択したラジオ ボタンの値が書き込まれます。 ラジオ ボタンの選択結果をページに追加してみましょう。

    チェックボックス。 各チェックボックスは個別に処理されます。 通常、チェックボックスには特定のデータが含まれていないため、単に値が含まれているかどうかがチェックされます。 値がある場合、ユーザーがそれを選択し、フォーム データを処理するときにこれが考慮されます。 ユーザーが選択した内容に関する情報をページに追加してみましょう。これは、フォームからのデータがサーバーに送信され、PHP スクリプトで処理される方法です。 さまざまなタスクに応じて、フォームの操作方法は異なりますが、示されている例に基づいて、必要な方法でフォームのデータを簡単に使用できます。 Web サイトでは、HTML フォームが配置されたページをよく見かけます。 ウェブフォーム –便利な方法

    サイトの訪問者から情報を取得する。 この例としては、訪問者やサイト開発者にフィードバックを提供するゲスト ブックがあります。 フォームは、サイト開発者が CMS を開発する際にも便利で、サイトの主要なプロパティである関連性を維持できます。

    この記事 HTML フォームの作成、その処理の基本、および画面フォームから PHP スクリプトにデータを転送する方法について説明します。 1) 簡単なフォームを作成する タグ そして HTML フォームの作成、その処理の基本、および画面フォームから PHP スクリプトにデータを転送する方法について説明します。 フォームの始まりと終わりを定義します。 開始フォームタグ 2 つの属性が含まれます。 フォームの始まりと終わりを定義します。 開始フォームタグアクション 方法 HTML フォームの作成、その処理の基本、および画面フォームから PHP スクリプトにデータを転送する方法について説明します。 。 action 属性には、スクリプトを処理するために呼び出す必要があるスクリプト URL が含まれます。 属性.

    フォームを送信するために使用する HTTP リクエストのタイプをブラウザに指示します。 可能な値

    POST メソッドと GET メソッドの主な違いは、情報の転送方法です。 GET メソッドでは、パラメータはアドレス バーを通じて渡されます。 基本的には HTTP リクエスト ヘッダー内にありますが、POST メソッドではパラメータは HTTP リクエストの本文を通じて送信され、アドレス バーにはまったく反映されません。

    タスク: 2000 年から 2050 年までの年を含むドロップダウン リストを作成する必要があるとします。
    解決策: を作成する必要があります。 HTMLフォーム SELECT 要素と PHP – フォームを処理するスクリプトを使用します。

    議論:

    まず、form.html と action.php の 2 つのファイルを作成しましょう。 form.html ファイルには、ドロップダウン リストを備えた HTML フォームが含まれます。 さらに、リスト内の値は 2 つの方法で指定できます。

    I. 手動データ入力:


    2000
    2001
    2002
    ……………………………………………
    2050

    II. ループを通じてデータを入力する:



    ご覧のとおり、ループを含む 2 番目の例はよりコンパクトです。 このフォームはテキストフィールドとまったく同じように処理されるため、このフォームにハンドラースクリプトを提供する必要はないと思います。 リスト値はスーパーグローバル配列から取得できます.

    $_POST

    説明:




    ファイルをサーバーに送信するための HTML フォームを作成しましょう。 この HTML フォームには要素が含まれていますブラウズ をクリックすると、サーバーにアップロードするファイルを選択するためのダイアログ ボックスが開きます。ボタンを押すと

    「ファイル転送」

    フォームを送信するために使用する HTTP リクエストのタイプをブラウザに指示します。 可能な値

    、ファイルはハンドラー スクリプトに渡されます。

    次に、ハンドラー action.php のスクリプトを作成する必要があります。 ハンドラーを作成する前に、ファイルをどのディレクトリにコピーするかを決定する必要があります。

    ユーザーがサーバーにファイルをアップロードすることを信頼する場合は、細心の注意を払う必要があります。 攻撃者は「不正な」コードを画像やファイルに埋め込み、サーバーに送信する可能性があります。 このような場合、ファイルのダウンロードを厳密に制御する必要があります。 この例では、ディレクトリを作成し、そのディレクトリにファイルをサーバーにコピーする方法を示します。要素を使用した例も示したいと思います この例では、ディレクトリを作成し、そのディレクトリにファイルをサーバーにコピーする方法を示します。チェックボックス このフォームはテキストフィールドとまったく同じように処理されるため、このフォームにハンドラースクリプトを提供する必要はないと思います。 リスト値はスーパーグローバル配列から取得できます。 この要素は、要素の 1 つではないにしても、他の要素とは少し異なります。


    'a が選択されていない場合、スーパーグローバル変数
    空の値を返します:





    他にご質問がある場合、または不明な点がある場合は、こちらへようこそ。

    インタラクティブなサイトはユーザーからの入力を受け入れます。 入力を受け取る一般的な方法の 1 つは、フォームを使用することです。

    このレッスンでは、フォームを作成してサーバー上で入力を処理する方法を見ていきます。 フォームを作成するときは、アクションとメソッドという 2 つの重要な属性が関係します。データ転送。 これらのメソッドの違いについてはまだ説明する必要はありません。 「get」メソッドは URL 経由でデータを送信し、「post」メソッドは標準入力サービス (STDIN) 経由でデータのブロックとして送信します。

    前回のレッスンでは、$_GET を使用して URL からデータを取得する方法について説明しました。

    このチュートリアルでは、「post」メソッドを使用してフォームから送信されたデータがどのように取得されるかを見ていきます。 フォームのある HTML ページフォームを含むページは PHP ファイルである必要はありません (ただし、PHP ファイルであってもかまいません)。 データを受信するファイルと同じサイトにある必要さえありません。

    最初の例では、非常に多くのことを見ていきます。

    シンプルな形

    テキストフィールドが 1 つある場合: フォーム お名前を入力してください.

    ブラウザには次のフォームが表示されます。

    ここから楽しい作業が始まります。からのデータを受信して​​処理します。 PHPを使用して PHPを使用してフォームデータをリクエストする

    フォーム経由で送信されたデータをリクエストする必要がある場合 (

    役職

    )、 $_POST を使用します。 そして$_POST["フィールド名"];

    これはフォームフィールドの値を返します。 例でこれを試してみましょう。

    まずは先ほどと同様にフォームのあるページを作成しましょう。 次に、PHPページ(ハンドラー)「handler.php」を作成しましょう(これは属性に記述したページ名であることに注意してください)

    私たちの中で)。

    「handler.php」ファイルには次の内容が含まれます。

    形状

    ユーザー入力と条件

    次の例では、ユーザー入力を使用して条件を作成してみます。 まずフォームが必要です。

    形状

    あなたの名前は何ですか:

    好きな色:赤、緑、青