sql >> データベース >  >> RDS >> Mysql

Canonical:HTMLフォームデータをMySQLデータベースに保存する方法

    まず、PHPまたはHTMLページは、ユーザーが操作できるフォームを生成する必要があります。最も単純な形式では、次のようになります。

    <html>
    <body>
     <form method="post" action="yourscript.php">
      <input type="text" name="yourfield">
      <input type="submit" name="youraction" value="save">
     </form>
    </body>
    </html>
    

    これにより、単一の入力フィールドと「保存」ボタンを備えたシンプルなフォームがユーザーに提供されます。 「保存」ボタンをクリックすると、コンテンツがPOSTを使用して「yourscript.php」に送信されます。 方法。

    yourscript.php 以下を実装する必要があります:

    1. フォームからの入力を受け入れて処理します。
    2. MySQLデータベースに接続します。
    3. データベースに保存します。

    最も単純な形式では、これは次のようになります。

    <!doctype html>
    <html>
     <head>
      <title>Process and store</title>
     </head>
    <body>
    <?php
    
    // Check that user sent some data to begin with. 
    if (isset($_REQUEST['yourfield'])) {
    
        /* Sanitize input. Trust *nothing* sent by the client.
         * When possible use whitelisting, only allow characters that you know
         * are needed. If username must contain only alphanumeric characters,
         * without puntation, then you should not accept anything else.
         * For more details, see: https://stackoverflow.com/a/10094315
         */
        $yourfield=preg_replace('/[^a-zA-Z0-9\ ]/','',$_REQUEST['yourfield']);
    
        /* Escape your input: use htmlspecialchars to avoid most obvious XSS attacks.
         * Note: Your application may still be vulnerable to XSS if you use $yourfield
         *       in an attribute without proper quoting.
         * For more details, see: https://stackoverflow.com/a/130323
         */
        $yourfield=htmlspecialchars($yourfield);
    
    
    } else {
        die('User did not send any data to be saved!');
    }
    
    
    // Define MySQL connection and credentials
    $pdo_dsn='mysql:dbname=yourdatabase;host=databasehost.example.com';
    $pdo_user='yourdatabaseuser';     
    $pdo_password='yourdatabaspassword';  
    
    try {
        // Establish connection to database
        $conn = new PDO($pdo_dsn, $pdo_user, $pdo_password);
    
        // Throw exceptions in case of error.
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        // Use prepared statements to mitigate SQL injection attacks.
        // See https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php for more details
        $qry=$conn->prepare('INSERT INTO yourtable (yourcolumn) VALUES (:yourvalue)');
    
        // Execute the prepared statement using user supplied data.
        $qry->execute(Array(":yourvalue" => $yourfield));
    
    } catch (PDOException $e) {
        echo 'Error: ' . $e->getMessage() . " file: " . $e->getFile() . " line: " . $e->getLine();
        exit;
    }
    ?>
    <form method="post">
    
     <!-- Please note that the quotes around next <?php ... ?> block are important
          to avoid XSS issues with poorly escaped user input. For more details:
          https://stackoverflow.com/a/2894530
      -->
     <input type="text" name="yourfield" value="<?php print $yourfield; ?>">
     <input type="submit" name="youraction" value="save">
    </form>
    
    </body>
    </html>
    

    ここでの重要なポイントは、準備されたステートメントを使用してを実行することです。 SQLインジェクション攻撃を回避する




    1. 実行計画の機密データを難読化する

    2. MySQLで親と子を選択

    3. INNERJOIN以外の結合を使用した3つのテーブル結合

    4. データベーステーブルに主キーがない場合はありますか?