PHPでフォームに入力された文字をテキストファイルに書き込む

<h2>初めに</h2>
おはようございます、こんにちは、こんばんは、お疲れ様です。ねじ回しです。

今回は私が「**web×IoTメイカーズチャレンジ**」というハッカソンでのチーム開発で必要となった、
HTML,PHPでフォームを作りフォームに書き込まれた住所(メールアドレス、文字)などをテキストファイルを生成して、
そのテキストファイルに書き込むというコードについて紹介します。

今回書こうと思ったきっかけは自分で探していてなかなかこのような記事を見つけることができなかったことと、
自分のしたことのメモです。

<h2>HTMLコード</h2>
まずはHTMLでフォームを作成していきます。

```html:index.html
<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>PHP</title>
    <link rel="stylesheet" type="text/css" href="example.css"> <!-- CSSはご自分でどうぞ -->
</head>
<body>
<form  method="post" action="check.php">
    <h3>識別番号(半角英数)</h3><br />
    <input type="text" name="name" style="width:100px" /><br /> <!-- 識別番号の入力フォーム -->
    <br />
    <h3>住所を入力して下さい。</h3><br />
    <input type="text" name="mail" style="width:100px" /><br /> <!-- 住所の入力フォーム -->
    <h3>住所を再入力して下さい。</h3><br />
    <input type="text" name="mail2" style="width:100px" /><br /> <!-- 住所の再入力フォーム -->
    <br />
    <input type="submit" value="OK"> <!-- check.phpへ -->
</form>
</body>
</html>
```

これで識別番号に書いた番号、住所、住所の再入力の情報が `post` で `check.php` へ送られます。

次に `check.php` を書いていきます。

<h2>PHPコード(1)</h2>

```php:check.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>確認</title>
    <link rel="stylesheet" type="text/css" href="example.css">  <!-- CSSはご自分でどうぞ -->
</head>
<body>

<?php
$text_name = $_POST['name'];  /* $text_neme へ HTML から識別番号の値を入れる  */
$mail_address = $_POST['mail'];   /* $mail_address へ HTML から住所の値を入れる */
$mail_address2 = $_POST['mail2'];  /* $mail_address2 へ HTML から再入力住所の値を入れる */

/* それぞれを htmlspecialchars , utf-8にする */
$text_name = htmlspecialchars($text_name,ENT_QUOTES,'utf-8');
$mail_address = htmlspecialchars($mail_address,ENT_QUOTES,'utf-8');     
$mail_address2 = htmlspecialchars($mail_address2,ENT_QUOTES,'utf-8');

if ($text_name == ''){  /* $text_name に何も入っていない時 */
    print'<h3>識別番号が入力されていません。</h3><br />';
}
else {  /* $text_name に何か入っている時 */
    print'<h3>識別番号:';
    print $text_name;
    print'</h3>';
    print'<br />';
}

if ($mail_address==''){  /* $mail_addressに何も入っていない時  */
    print'<h3>住所が入力されていません。</h3><br />';
}

if ($mail_address != $mail_address2){  /* 住所と再入力住所の値が一致しない時 */

    print'<h3>住所が一致しません。</h3><br />';
}
else { 
    print "";
}
?>

/* 二重でendif文を使う */
<?php if($mail_address == $mail_address2): ?>   /* 住所と再入力住所の値が一致する時  */
<?php if($mail_address != ''):  ?> /* 住所に値が入っている時 */
/* 二つの条件をクリアすると下の処理が実行され、OKを押すと次のページに飛べる */
<br />
<h3>この情報でよろしいですか？</h3>
<br />

<?php <h3>住所:$mail_address</h3> ?>

<form method="post" action="hoge.php">
       /* valueの値に変数名を入れることで次のページにも値を渡せる /*
       /* 再入力住所の値はもう使わないので書かない */
    <input type="hidden" name="name" value="<?php print $text_name; ?>"><br/> 
    <input type="hidden" name="mail" value="<?php print $mail_address; ?>"><br/>

    <a href ="hoge.php"><input type="submit" id="size" value="OK"></a>  /* hoge.php へ  */
    <?php endif ?>
    <?php endif ?>  /* endif文の終了 */
    <a href ="index.html"><input type="submit" id="inch" value="戻る"></a>  /* index.html へ  */
</form>
</body>
</html>
```

次はこの確認ページで受け渡した値を `hoge.php` でテキストファイルを生成して書き込む

<h2>PHPコード(2)</h2>

```php:hoge.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>完了</title>
    <link rel="stylesheet" type="text/css" href="example.css"> <!-- CSSはご自分でどうぞ -->
</head>
<body>

<?php
/* 前ページから値を受け取る */
$text_name = $_POST['name'];
$mail_address = $_POST['mail'];

/* それぞれを htmlspecialchars , utf-8にする */
$text_name = htmlspecialchars($text_name,ENT_QUOTES,'utf-8');
$mail_address = htmlspecialchars($mail_address,ENT_QUOTES,'utf-8');
/* 識別番号の表示 */
print'<h3>識別番号:';
print $text_name;
print'</h3>';
print'<br />';

$text = '.txt'; /* 拡張子を値に入れる */
$text_addition = $text_name.$text; /* 識別番号と拡張子を結合する */ 

/* file_put_contents() 関数でファイル名の $text_additin に住所の値 $mail_address を書き込む */
file_put_contents("$text_addition", "$mail_address"); 
print'<br/>';
print "<h3>住所：$mail_address<h3>";
print'<br/>';
?>
<br />
<a href ="index.html"><input type="submit" id="inch" value="戻る"></a>  /* index.html へ  */
</body>
</html>

```
これで完成です。
<h2>補足</h2>
自分も古いサイトを見ながら書いたので今後の新環境では使えなくなる可能性もあります。
ほかのやり方で`fopen() fclose()` などのやり方もあるっぽいのでそちらも検索参考にしてみてください。
ちなみに`file_put_contents()`関数で保存場所の指定もできるそうなのでやってみてください。私がやったのはフォルダの中に
どんどんテキストファイルを生成してくものなので。
今回私はテキストファイルをPythonの処理のチームメイトの方に渡すだけだったのでここまでです！
テキストファイルを使ってやる処理は後はご自由にどうぞ！
<h2>今大会の感想</h2>
今回はArduinoを使ったものだったので以外に悩みました。ラズパイをうまく使えていればもっとうまくいったかも..つくづくアイデアが出てから準備をするのまでが遅かったんだなと思っています。
自分の実力を知れるのとチームでの開発というものを経験したのはとても良かったです。
何か大会などは辛いけど面白いですね！
それでは。
まだまだ自分の汚いコードを最後まで読んでくれてありがとうございます！
<br />
@nejimawaso