PHPでURLパラメーターに入力される値を指定する方法を記してます。
-
PHPの$_REQUESTでMySQLから任意のデータを取得する方法
PHPの$_REQUESTを使って任意のデータを取得する方法を記してます。 補足 PHPで取得データを表示&詳細画面へ ...
続きを見る
PHPでURLパラメータの入力値を制限する理由
URLパラメータの入力値を制限する理由は、
- 入力フォームに入力される値が読めない
- ユーザーによって何を入力するか分からない
といった理由からです。
URLパラメーターの値を指定する上で、意図とはまったく違う値を入力されてしまうことがあるからです。
〜/request.php?id=aaaaaaaaaaaaa
もうちょっと具体的に話します↓
URパラメーターが意図しない値で指定される例
たとえばテーブルに登録された値が、すでに3つあるとします。
任意のレコードを取得・表示するには、詳細画面のURLパラメーターに「?id=1」と入力することで、
〜/request.php?id=1
「id=1のレコードが表示される」といった仕様を前回記事で作成しました。
-
PHPの$_REQUESTでMySQLから任意のデータを取得する方法
PHPの$_REQUESTを使って任意のデータを取得する方法を記してます。 補足 PHPで取得データを表示&詳細画面へ ...
続きを見る
また、テーブルのレコード2つ目を表示するときは、「?id=2」と指定すればOKでした。
〜/request.php?id=2
ユーザーによってURLパラメーターの指定値が変わる
しかしユーザーによっては、
〜/request.php?id=abc
といった想定で、レコードに該当しない値を入力してしまうかもしれません。
はたまた、
〜/request.php?id=-10000
といったように、全く想定外の入力をすることも考えられます。
結果、テーブルのレコードに該当するものがないため、何も表示されない詳細画面面となってしまうんですよね。
対策としてPHPでURLパラメーターを指定・先に制限を設けることで、既定された値以外をエラーとして返す必要があります。
PHPでURLパラメーターを指定するには
今回は入力された値が数値であるかの判断を下すために、画面表示処理の前にif文を入れた
is_numeric
の処理を書いていきます。
$id = $_REQUEST['id'];
if(!is_numeric($id)){
}
is_numeric
is_numeric — 変数が数字または数値形式の文字列であるか、指定した変数が数値であるかどうかを調べます。
is_numeric ( mixed $var ) : bool
【引用】PHP -is_numeric
上記の処理を、詳細画面を表示するPHPファイル側に書きます!
今回は例として「numericフォルダ」の中に
- 入力フォームファイル(input.html)
- データベースと接続するファイル(index.php)
- 詳細画面を表示するファイル(request.php)
以上3つのファイルを作成しました。
PHPでURLパラメーターを指定するサンプル
input.html、index.phpのソースは前回記事と全く同じなので、is_numericの処理を入れたファイルのみ以下に記します。
<main>
<h2>登録した部品名の詳細画面</h2>
<?php
// データーベースtestへ接続
try {
$db = new PDO('mysql:dbname=test;host=localhost;charset=utf8','root','root');
// 入力した値をデータベースへ登録
$count = $db->exec('INSERT INTO 部品登録 SET 部品名="'. $_POST['buhin'] .'",登録日 = NOW()');
// 登録した件数を表示
} catch (PDOException $e) {
// 接続できなかったらエラー表示
echo 'DB接続エラー!: ' . $e->getMessage();
}
//is_numericで入力値が数値以外だったらエラー処理
$id = $_REQUEST['id'];
if(!is_numeric($id) || $id <= 0) {
print('入力する値を数字にしてね!');
exit();
}
//安全に処理するためにprepareとREQUEST変数で処理する
$Data = $db->prepare('SELECT * FROM 部品登録 WHERE id=?');
$Data->execute(array($id));
$hyouji = $Data->fetch();
?>
<article>
<pre><?php print($hyouji['部品名']);?></pre>
<a href="index.php">一覧画面へ戻る</a>
</article>
</main>
これで詳細画面のURLパラメーターに、間違った値が入力されていてもきちんとエラー画面が表示されるはず↓
URLパラメーターに値を入力して動作確認
ちょっとやってみます。
URLパラメーターを「?id=1」と設定すると
http://localhost:8888/numeric/request.php?id=1
id=1のレコード値が表示されます。
もちろんURLパラメーターを「?id=2」と設定することで
http://localhost:8888/numeric/request.php?id=2
id=2のレコード値が表示されます。
では数値以外の値を入力してみるとどうでしょうか?
http://localhost:8888/numeric/request.php?id=abc
エラーの処理が返されてますね!
最後にマイナスの数値を入力してみると...
http://localhost:8888/numeric/request.php?id=-10
こちらもエラーの際の処理が返されてることが確認できました!
まとめ
PHPでURLパラメーターに入力される値を指定する方法でした。
指定というよりは、あらかじめis_numericで入力値が数値か確認する処理でしたね。
次回記事: PHPでrequireの使い方。他ファイルのプログラムを呼び出す方法
-
PHPでrequireの使い方。他ファイルのプログラムを呼び出す方法
PHPで「require」を使って他ファイルからプログラムを呼び出す方法を記してます。 補足 PHPのis_numer ...
続きを見る
関連記事:PHPの$_REQUESTでMySQLから任意のデータを取得する方法
関連記事:【MySQL】PHPでデータベースを表示したHTMLにリンクも埋め込む
関連記事:PHPでデータベースを取得して画面表示する方法