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

主キーに従ってhtmlフォームをphpページに接続する

    まず、それが本番環境で使用されるコードである場合は、ステートメントにプラグインする前に、SQLパラメーターをエスケープしていることを確認してください。 SQLインジェクション攻撃を楽しむ人は誰もいません。プリペアドステートメントとパラメータバインディングをサポートしているため、代わりにPDOを使用することをお勧めします。これははるかに安全です。

    PHPでSQLインジェクションを防ぐにはどうすればよいですか?

    だからあなたはフォームを持っています...

    [title]
    
    [details]
    
    [submit]
    

    そして、それはデータベースに挿入されます...

    INSERT INTO questions (title, details) VALUES (?, ?)
    

    mysql_insert_idを使用して最後の挿入IDを取得できます 、 http://php.net/manual/en/function mysql-insert-id.php

    $id = mysql_insert_id();
    

    その後、レコードを取得できます...

    SELECT title, details FROM questions WHERE id = ?
    

    そして、プレビューページに出力します。

    基本的なmysql関数の代わりにPDOを使用して例を作成しました。

    form.php

    <form action="process.php" method="post">
        <label for="question_title">Title</label>
        <input id="question_title" name="title"/>
        <label for="question_detail">Detail</label>
        <input id="question_detail" name="detail"/>
        <button type="submit">Submit</button>
    </form>
    

    process.php

    <?php
    
    // Create a database connection
    $pdo = new PDO("mysql:dbname=test");
    // Prepare the insert statement and bind parameters
    $stmt = $pdo->prepare("INSERT INTO questions (title, detail) VALUES (?, ?)");
    $stmt->bindValue(1, $_POST["title"], PDO::PARAM_STR);
    $stmt->bindValue(2, $_POST["detail"], PDO::PARAM_STR);
    // Execute the insert statement
    $stmt->execute();
    // Retrieve the id
    $id = $stmt->lastInsertId();
    
    // Prepare a select statement and bind the id parameter
    $stmt = $pdo->prepare("SELECT title, detail FROM questions WHERE id = ?");
    $stmt->bindValue(1, $id, PDO::PARAM_INT);
    // Execute the select statement
    $stmt->execute();
    // Retrieve the record as an associative array
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
    ?>
    
    <h1><?php echo htmlspecialchars($row["title"]);?></h1>
    <p><?php echo htmlspecialchars($row["detail"]);?></p>
    

    PDOなし...

    form.php

    <form action="process.php" method="post">
        <label for="question_title">Title</label>
        <input id="question_title" name="title"/>
        <label for="question_detail">Detail</label>
        <input id="question_detail" name="detail"/>
        <button type="submit">Submit</button>
    </form>
    

    process.php

    <?php
    
    // Create a database connection
    $conn = mysql_connect();
    // Execute the insert statement safely
    mysql_query("INSERT INTO questions (title, detail) VALUES ('" . 
        mysql_real_escape_string($_POST["title"]) . "','" .
        mysql_real_escape_string($_POST["detail"]) . "')", $conn);
    // Retrieve the id
    $id = mysql_insert_id($conn);
    // Close the connection
    mysql_close($conn);
    
    header("Location: question_preview.php?id=$id");
    

    question_preview.php

    <?php
    
    // Create a database connection
    $conn = mysql_connect();
    // Execute a select statement safely
    $result = mysql_query("SELECT title, detail FROM questions WHERE id = " .
        mysql_real_escape_string($_GET["id"]), $conn);
    // Retrieve the record as an associative array
    $row = mysql_fetch_assoc($result);
    // Close the connection
    mysql_close($conn);
    
    ?>
    
    <h1><?php echo htmlspecialchars($row["title"]);?></h1>
    <p><?php echo htmlspecialchars($row["detail"]);?></p>
    


    1. アレイをデータベースに挿入できません

    2. MySQLクエリで、なぜwhereの代わりにjoinを使用するのですか?

    3. Dateはmysqlのキーワードですか?

    4. 重複する日付間隔をマージする