PHPで$_GETを使ってフォームから値を取得しよう

19/05/12 22:55:13     19/06/02 13:23:01

PHPで$_GETを使ってフォームから値を取得しよう

$_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も使いこなせるようになります。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する