LoginSignup
3
6

More than 5 years have passed since last update.

PHPとSQLを使用したデータ送信フォーム

Posted at

作成の流れ

名前、年齢、番号、備考欄を送信するフォームを作成した。
1.保存されたデータ表示するindex.php
2.データを挿入するinput.php
3.挿入されたデータを確認するconfirm.php
4.完了画面complete.php

以上の四つの構成で作成した。

作成に用いた構文や知識

index.php

・SQLに接続するための構文

 //接続設定
 $user ="ユーザー名";
 $pass="パスワード";
 //データベースに接続
 $dsn ="mysql:host=サーバー名;dbname=データベース名;charset=utf8";
 try {
    $dbh =new PDO($dsn, $user, $pass);
 }catch(PDOException $e){
    echo 'データベースにアクセスできません'. $e -> getMessage();
    exit();
 }

・SQLのテーブルを表示するための文

 $sql= "select * from user_id order by name ASC";
 $stmt = $dbh->query($sql);
 foreach ($stmt as $row) {
     echo $rowを用いたカラム名;
     echo '<br>';
 }

input.php

フォームはPOSTで送信した。
・POSTで送信する場合

<form action="confirm.php" method="POST">
</form>

comfirm.php

POSTで送られたデータはセッションで保存した。
また、XSS対策やバリテーション対策があり今回作成した中で一番難しかった。

・セッション・・・一時保存する

session_start();
$_SESSION["変数名"]=$変数名;

・XSS対策・・・入力フォームにおいて悪意のあるコードを送信されることを防ぐ対策のこと

$変数名= htmlentities($_POST[変数名], ENT_QUOTES, "UTF-8");

・バリテーション対策・・・空欄や全角数字などのエラーを防ぐ

//定義(formValidationの中身にスーパーグローバル変数はつかえないため)
$postData = $_POST;
//エラー変数
$error = array();

//バリデーション
        function formValidation($postData) {
            if (empty($postData['変数名'])) {
                $error[] = "メッセージ";
            } else if (!preg_match('それぞれ適した正規表現', $postData['変数名'])) {
                 $error[] = "メッセージ";
                }
            return $error;
        }

バリテーション対策の後は、エラーのある時とエラーのない時で場合分けをして、if文を用いてエラーのない時は登録ボタンがあるように、エラーのある時は登録ボタンを表示しないようにした。

complete.php

先ほどと同様にSQLと接続し、データベースに送信されたデータを保存した。
・データを保存

try {
    $dbh =new PDO($dsn, $user, $pass);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //データ追加
    $sql="INSERT INTO テーブル名 (カラム名) VALUES(登録するデータ)";
    $stmt=$dbh ->prepare($sql);
    //SQLインジェクション
    $stmt->bindValue('登録するデータ', 変数名, PDO::PARAM_INT);
    $stmt->execute();
}catch(PDOException $e){
    echo $e -> getMessage();
    exit();
}

最後に

progate以外で初めて、自分で作ったプログラムなので色々調べたり、それでもわからないものは質問したりし、想像以上に苦労したができたときの達成感は気持ちいいものであった。

3
6
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
3
6