Thứ nhất, nếu đó là mã được sử dụng trong sản xuất, hãy đảm bảo rằng bạn đang thoát các tham số SQL của mình trước khi cắm chúng vào câu lệnh của bạn. Không ai thích một cuộc tấn công SQL injection. Thay vào đó, tôi khuyên bạn nên sử dụng PDO vì nó hỗ trợ các câu lệnh đã chuẩn bị sẵn và liên kết tham số an toàn hơn nhiều.
Làm cách nào để ngăn chặn việc đưa SQL vào PHP?
Vì vậy, bạn có một biểu mẫu ...
[title]
[details]
[submit]
Và điều đó được chèn vào cơ sở dữ liệu của bạn ...
INSERT INTO questions (title, details) VALUES (?, ?)
Bạn có thể lấy id chèn cuối cùng bằng cách sử dụng mysql_insert_id
, http://php.net/manual/en/ Chức năng. mysql-insert-id.php
.
$id = mysql_insert_id();
Sau đó, bạn có thể lấy bản ghi ...
SELECT title, details FROM questions WHERE id = ?
Và xuất nó trong một trang xem trước.
Tôi đã viết một ví dụ bằng cách sử dụng PDO thay vì các hàm mysql cơ bản.
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>
Không có 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>