Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menghubungkan formulir html ke halaman php sesuai dengan kunci utama

Pertama, jika itu adalah kode yang akan digunakan dalam produksi, pastikan Anda keluar dari parameter SQL sebelum memasukkannya ke pernyataan Anda. Tidak ada yang menikmati serangan injeksi SQL. Saya akan merekomendasikan menggunakan PDO sebagai gantinya karena mendukung pernyataan yang disiapkan dan pengikatan parameter yang jauh lebih aman.

Bagaimana cara mencegah injeksi SQL di PHP?

Jadi Anda memiliki formulir...

[title]

[details]

[submit]

Dan itu akan dimasukkan ke dalam database Anda...

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

Anda bisa mendapatkan id sisipan terakhir menggunakan mysql_insert_id , http://php.net/manual/en/function. mysql-insert-id.php .

$id = mysql_insert_id();

Maka Anda bisa mendapatkan catatannya...

SELECT title, details FROM questions WHERE id = ?

Dan keluarkan dalam halaman pratinjau.

Saya telah menulis sebuah contoh menggunakan PDO sebagai ganti fungsi dasar mysql.

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>

Tanpa 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan pemicu pembaruan untuk memperbarui tabel lain

  2. Mengonversi database MyISAM yang ada ke InnoDB dengan Django

  3. Pengecualian Pipa Rusak pada Aplikasi Grails

  4. Hibernate - batasan kolom unik diabaikan

  5. Memilih catatan N terbesar dalam grup X