logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

PHP レッスン — レッスン 1 — フォームの操作

08/12/2019, by Ivan

日常生活では、私たちはテレビ、ラジオ、インターネット、直接の会話を通じて情報を得ます。サイトもユーザーから情報を得ますが、それは特別な形、すなわちフォームを通じて行います。フォームは、アンケート調査の用紙や、何かの公的機関に申請する際に記入する用紙と比べられます。フォームの要素のセットは限られていますが、フォームは、サイトの動作に必要なすべての情報をユーザーから受け取れるようにします。

レッスンをより実り多いものにするため、フォーム作成に関する HTML のレッスンを読んでおくとよいでしょう。

最初のレッスンを始める前に、私たちのアプリケーションの骨組み、すなわちサイトの動作を管理するクラスを作りましょう。

class フォルダを作り、その中に、サイト管理クラスを含む simpleCMS.php ファイルを置きます。また、この管理を起動する index.php ファイルも作ります。さらに、メッセージ用の空のフォルダと、スタイルファイル style.css も作ります。次のようなファイルとフォルダになります:

class/simpleCMS.php

messages/

index.php

style.css

simpleCMS.php ファイルの内容は次のとおりです:

<?php
class simpleCMS {  // 管理クラス
  public function display_public() { // メッセージ出力のメソッド

  }
  public function display_admin() { // メッセージ入力のメソッド

  }
  public function write($p) { // メッセージ記録のメソッド

  }
}
?>

ひとまずメソッドは空のままにし、後でそこにコードを書き足していきます。

style.css ファイル:

*{
  margin: 0;
  padding: 0;
}

body{
  font: 12px "Lucida Grande",  Sans-Serif;
  background: #ccc;
}

#page-wrap{
  width: 500px;
  margin: 50px auto;
  padding: 20px;
  background: white;
}

h1, h2, h3{
  font: 28px Georgia, Serif;
  border-bottom: 1px dotted #ccc;
  margin: 0 0 10px 0;
}

.clear{
  clear: both;
}

input[type="text"], textarea{
  padding: 3px;
  border: 1px solid #666;
  width: 350px;
  margin: 0 0 15px 0;
}

input[type="text"]{
  font: 28px Georgia, Serif;
}

textarea {
  height: 100px;
  font: 12px "Lucida Grande", Sans-Serif;
}

label 	{
  background: #666;
  color: white;
  padding: 2px 6px;
}

.post{
  margin: 0 0 20px 0;
}

index.php ファイル:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>PHP を学ぶ</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
  	<div id="page-wrap">
    <?php

      include_once('class/simpleCMS.php'); // クラスのファイルを接続する
      $obj = new simpleCMS(); // 管理クラスのオブジェクトを作る
  ?>
   </div>
  </body>
</html>

これがどう動作するか見てみましょう。サイトの読み込みとともに index.php ファイルが読み込まれます。今は空に見えますが、クラスを追加してオブジェクトを作りました。このオブジェクトにはメソッドがあり、必要なときにそれらを呼び出します。この「必要なとき」は、if 演算子で条件を確認して判定します。

ひとまず作ったファイルから離れて、グローバル変数 $_GET と $_POST について見ていきましょう。

グローバル変数 $_GET

HTML フォームには method 属性(method='get' または method='post')があり、選ばれた method に応じて、フォームからのデータはグローバル変数 $_GET または $_POST に記録されます。例を見てみましょう:

<form action="welcome.php" method="get">
名前: <input type="text" name="fname" />
年齢: <input type="text" name="age" />
<input type="submit" />
</form> 

submit ボタンを押すと、次のページに移動します:

http://sitename/welcome.php?fname=Peter&age=37

こうして $_GET 変数が形成されます。つまり、疑問符の後がこの変数の値です:

<?php
print $_GET['fname'];
print $_GET['age'];
?>

$_GET 変数は URL からの値の配列です。こうして、フォームを使わなくても、あるページから別のページへデータを渡せます。例えば、次のページで:

http://sitename/example.php?number=45

次のスクリプトを実行すると:

<?php
  print $_GET['number'];
?>

URL からの数字が出力されます。

グローバル変数 $_POST

$_POST 変数は、$_GET 変数と同じようにフォームで使われます。同様の例を見てみましょう。

では、名前とメッセージのフィールドからなる簡単なフォームを作りましょう。

<form action="welcome.php" method="post">
名前: <input type="text" name="fname" />
年齢: <input type="text" name="age" />
<input type="submit" />
</form> 

submit ボタンを押すと、次のページに移動します:

http://sitename/welcome.php

これで $_POST 変数を参照できます:

<?php
print $_POST['fname'];
print $_POST['age'];
?>

$_GET との違いは、$_POST の変数の配列は URL に記録されず、目に見えず、PHP を通じてのみ取得できることです。

では、メッセージ追加のフォームを作りましょう。メッセージの追加には POST メソッドを使い、サイトの管理には GET メソッドを使います:

public function display_admin() { // メッセージ入力のメソッド
  $content = '';
  $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; // $_SERVER['PHP_SELF'] はクラスが呼び出されたファイルの名前を返す
  $content .= '<label for="title">名前:</label><br />';
  $content .= '<input name="title" id="title" type="text" maxlength="150" />';
  $content .= '<div class="clear"></div>';
  $content .= '<label for="bodytext">メッセージ:</label><br />';
  $content .= '<textarea name="bodytext" id="bodytext"></textarea>';
  $content .= '<div class="clear"></div>';
  $content .= '<input type="submit" value="メッセージを追加" />';
  $content .= '</form>';
  $content .= '<p><a href="/index.php">トップに戻る</a></p>';
  return $content;
}

display_admin() メソッドを上記のコードに変更してください。このコードは、レコードを追加する必要があるときに出力されます。しかしデフォルトでは、レコード自体が出力されるべきです。URL に admin = 1 という変数があるときにフォームが出力される、と約束しましょう。つまり URL は次のようになります:

http://test/index.php?admin=1

そこで、index.php ファイルを変更しましょう:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
  <head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>PHP を学ぶ</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
  	<div id="page-wrap">
    <?php

      include_once('class/simpleCMS.php'); // クラスのファイルを接続する
      $obj = new simpleCMS(); // 管理クラスのオブジェクトを作る


      if( $_GET['admin'] == 1 ){ // URL に admin 変数があれば
	    print $obj->display_admin(); // 変数があれば、フォームを表示する
	  }else{
	    print $obj->display_public(); // 変数がなければ、メッセージを表示する
	  }

    ?>
	</div>
  </body>
</html>

そして、パラメーターなしの index.php ページのメッセージ出力メソッドを変更します:

  public function display_public() { // メッセージ出力のメソッド
    $content = '';
	$content .= '<p><a href="/index.php?admin=1">メッセージを追加</a></p>';
    return $content;
  }

そこへ移動できるよう、パラメーター付きのページへのリンクを追加します。

ページの読み込み時に文字化けが出る場合は、.htaccess ファイルを作り(Windows では作りづらいことがあるので、既存のファイルをコピーして中身を空にしてください)、次の行を追加する必要があります:

AddDefaultCharset utf-8

これで、サーバーが UTF-8 で動作するようになります。

これで、データを別のページへ送るフォームができました。フォームの method を get に変えて、正しく動作するか確認できます:

$content .=	'<form action="' . $_SERVER['PHP_SELF'] . '" method="get">';

これで、フォームからのパラメーターが index.php ページに渡されます。これらのパラメーターの処理は、ファイルの操作を学びデータをファイルに記録する次のレッスンに回します。

Прикрепленные файлы