PHPで$_GETを使ってフォームから値を取得しよう
19/05/12 22:55:13 19/06/02 13:23:01
$_GETはPHPにおいてフォームやURLのパラメータから値を取得するコードです。フォームから取得することが多いため、結果的にHTMLとの組み合わせで使用することがほとんどです。
なので、このページではHTMLとPHPを連動させて$_GETで値を取得する方法を紹介します。
$_GETを使ってHTMLから値を取得
それではさっそくサンプルコードを紹介します。HTMLから値を取得するので、まずはHTMLからです。HTMLのコードは以下のようになります。
<form action="" method="get">
<p><input type="text" name="first_name"></p>
<p><input type="text" name="last_name"></p>
<p><input type="submit" value="送信"></p>
</form>
以上のようなシンプルなHTMLを用意します。formの中でactionとmethodを指定していますが、これはそれぞれ送信先のファイルとその方法を指定する部分です。HTMLを勉強した方なら見たことがあるかと思います。
このサンプルコードではactionは指定なしで、methodでgetを指定しています。methodにgetを指定すると、PHP側から$_GETを使って受け取ることが可能になります。
次に、PHP側の処理を実装します。サンプルコードは以下のようになります。
<?php
echo $_GET["first_name"];
echo $_GET["last_name"];
?>
こちらもシンプルなPHPコードです。PHP側から$_GETを指定することで、HTMLのinput属性の値を取得できることになります。コードを実行すると、以下のようになります。
「example.php?first_name=値&last_name=値」
仕組みを細かく把握する必要はないのですが、ざっくり言うとまずHTMLのformのmethodでgetを指定すると、URLにパラメータが渡ることになります。そして、それをPHPの$_GETで取得しています。
そのためHTMLからURLにパラメータを送るのではなく、リンクを作成してそれをPHP側から$_GETで取得することも可能です。その際にHTMLで作成するリンクは以下のようになります。
<a href="example.php?first_name=値&last_name=値">リンク</a>
$_GETの使い方は以上のようになります。ちなみに$_GETと同じような使い方ができるコードに$_POSTがあります。せっかくなので、$_GETと合わせて$_POSTの使い方についても把握しておくと良いでしょう。
$_POSTを使ってフォームから値を取得
$_POSTの使い方のサンプルコードは以下です。まずはHTMLのコードになります。
<form action="" method="post">
<p><input type="text" name="first_name"></p>
<p><input type="text" name="last_name"></p>
<p><input type="submit" value="送信"></p>
</form>
さきほど同様簡単なHTMLのコードを用意しました。構造自体は同じですが、methodでgetではなくpostを指定している点が先ほどとの違いです。HTMLでpostを指定すれば、PHPから$_POSTで取得できるようになります。
次に、PHP側のコードは以下です。
<?php
echo $_POST["first_name"];
echo $_POST["last_name"];
?>
このように記述すると、$_GETのときと同様値を取得できます。では$_GETと$_POSTは何が違うのでしょうか。それは、URLにパラメータを表示するかどうかです。
$_GETはURLにパラメータを表示しますが、$_POSTでは表示しません。なぜあえて表示しないのかというと、セキュリティ強化のためです。たとえばパスワードなどは表示するとリスクがあるので、$_POSTを使用するのが一般的になります。
htmlspecialcharsの使い方
$_GETや$_POSTで値を取得できますが、それをブラウザに表示する際にはhtmlspecialcharsを使用するのが一般的です。htmlspecialcharsを使用することで、悪意のあるコードの埋め込みを防ぐことができます。構文は以下のようになります。
htmlspecialchars(エスケープする文字列, エスケープの種類, 文字コード);
エスケープする文字列はそのままの意味で、対象となる文字列を指します。第二引数のエスケープの種類については、どのようにエスケープするのかを指定します。
ただしよくわからない場合、「ENT_QUOTES」を指定しておけば問題なく、特別な理由がなければENT_QUOTESを指定することになるでしょう。他にもENT_COMPATやENT_NOQUOTESを指定することが可能ですが、エスケープできる文字はENT_QUOTESの方が多いです。
一般的に使用されていることを考えてもエスケープできる文字が多いことを考えても、ENT_QUOTESが良いかと思います。
$_GETを使ってページ遷移を行う
以上を踏まえ、$_GETを使ってページ遷移を行う実践的な例を紹介します。実践的と言っても実際に開発で使うコードに比べるとシンプルで、あくまでも土台となるサンプルコードのイメージになります。
<?php
$totalPage = 10;
if (
isset($_GET["page"]) &&
$_GET["page"] > 0 &&
$_GET["page"] <= $totalPage
) {
$page = (int)$_GET["page"];
} else {
$page = 1;
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
</head>
<body>
<p>現在 <?php echo $page; ?> ページ目です。</p>
<p>
<?php if ($page > 1) : ?>
<a href="?page=<?php echo ($page - 1); ?>">前のページへ</a>
<?php endif; ?>
<?php if ($page < $totalPage) : ?>
<a href="?page=<?php echo ($page + 1); ?>">次のページへ</a>
<?php endif; ?>
</p>
</body>
</html>
このコードが何をやっているかというと、10ページまでページ遷移させています。まず最初に$totalPage = 10と宣言し、この数字になるまでif文で条件判定しながら$_GETでページを取得します。
最初から完璧に理解する必要はありませんが、コードの内容的にまったく理解不能ということはないかと思います。上のサンプルコードを少しプラスすればそれで実際の開発で使われるレベルのコードになるので、$_GETも$_POSTも使いこなせるようになります。
人気記事