Edited at

PHPでフォームからデータ送る

More than 3 years have passed since last update.

基本的なことですが、今までは送ることはやったことがありましたが、

受け取って処理することをしたことがありませんでした。


フォームからデータを送ってみて、取得してみる

<?php

$name = '';

if($_SERVER['REQUEST_METHOD'] === 'POST'){

$name = $_POST['name'];
$isDarvish = false;
if($name === 'ダルビッシュ'){
$isDarvish = true;
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<form action="" method="POST">
<input type="text" name="name" placeholder="ダルビッシュと入力してください" value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>">
<input type="submit" value="submit">
<?php
if ($isDarvish) {
echo "私はダルビッシュです";
} else{
echo "私はダルビッシュではありません";
}
?>
</form>
</body>
</html>

POSTしたデータは、$_POST変数に入ります。

$_POST$_SERVERはスーパーグローバルという、かっこいい名前の変数です。


スーパーグローバル

PHP マニュアル


PHP の定義済み変数の中には "スーパーグローバル" というものがあります。 これは、スクリプト全体を通してすべてのスコープで使用可能な変数のことです。 関数やメソッドの内部からアクセスする際にも global $variable; などとする必要はありません。


変数
意味

$_GLOBALS
グローバルスコープで使用可能なすべての変数への参照

$_SERVER
サーバー情報および実行時の環境情報

$_POST
HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列

$_GET
URL パラメータで現在のスクリプトに渡された変数の連想配列

$_FILES
HTTP POST メソッドで現在のスクリプトにアップロードされた項目の連想配列

$_COOKIE
現在のスクリプトに HTTP クッキーから渡された変数の連想配列

$_SESSION
現在のスクリプトで使用できるセッション変数を含む連想配列

$_REQUEST
$_GET、$_POST、$_COOKIEの内容をまとめた連想配列

$_ENV
環境変数として現在のスクリプトに渡された変数の連想配列


特殊文字をエスケープする

ユーザーから入力されたデータは、エスケープ処理をいれなければいけません。

htmlspecialcharsを使うことで、特殊文字をHTMLエンティティに変換することができます。

htmlspecialchars( string 文字列 [, int 変換スタイル [, string 文字コード ]] ) 


別ファイルにデータを送信

特に違うところは無いのですが、formのaction属性に連携先のファイルを指定します。


index.php

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<form action="view.php" method="POST">
<input type="text" name="name" placeholder="ダルビッシュと入力してください">
<input type="submit" value="submit">
</form>
</body>
</html>


view.php

<?php

$name = '';
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$name = $_POST['name'];
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Check username</title>
</head>
<body>
<?php echo($name) ?>
</body>
</html>



テキストエリアのデータを送信

nl2brを使用して、改行コードを<br>タグに置き換えます。


index.php

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<form action="view.php" method="POST">
<textarea type="text" name="textarea" placeholder="textarea" cols="30" rows="5"></textarea>
<input type="submit" value="submit">
</form>
</body>
</html>


view.php

<?php

$name = '';
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$textarea = nl2br($_POST['textarea']);
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test/title>
</head>
<body>
<?php echo($textarea) ?>
</body>
</html>


押されたボタンのデータを送る


index.php

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<title>Check username</title>
</head>
<body>
<form action="view.php" method="POST">
<input type="submit" value="戻る" name="back">
<input type="submit" value="確認" name="confirm">
</form>
</body>
</html>


view.php

<?php

if(isset($_POST['confirm'])){
$str = '確認ボタンが押されました';
}else{
$str = '戻るボタンが押されました';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div><?php echo($str) ?></div>
</body>
</html>


チェックボックスのデータを取得


index.php

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<title>Check username</title>
</head>
<body>
<form action="view.php" method="POST">
<input type="checkbox" value="0" name="checkbox[]">
<input type="checkbox" value="1" name="checkbox[]">
<input type="checkbox" value="2" name="checkbox[]">

<input type="submit" value="submit" name="submit">
</form>
</body>
</html>



view.php

<?php

$str = implode('_',$_POST['checkbox']);//_で連結
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div><?php echo($str) ?></div> //0_1_2
</body>
</html>


ラジオボタンのデータを取得


index.php

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<title>Check username</title>
</head>
<body>
<form action="view.php" method="POST">
<input type="radio" value="0" name="radio">
<input type="radio" value="1" name="radio">
<input type="radio" value="2" name="radio">

<input type="submit" value="submit" name="submit">
</form>
</body>
</html>



view.php

<?php

$str = $_POST['radio'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div><?php echo($str) ?></div>
</body>
</html>


セレクトボックスのデータ取得


index.php


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Check username</title>
</head>
<body>
<form action="view.php" method="POST">
<select name="number">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<input type="submit" value="submit" name="submit">
</form>
</body>
</html>


view.php

<?php

$str = $_POST['number'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div><?php echo($str) ?></div>
</body>
</html>


おわり

送ったデータの受け取り方がわかりました。