LoginSignup
30
38

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-06-02

基本的なことですが、今までは送ることはやったことがありましたが、
受け取って処理することをしたことがありませんでした。

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

<?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>

おわり

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

30
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
38