sql >> Database teknologi >  >> RDS >> Mysql

Tilslutning af html-formular til php-side i henhold til primærnøgle

For det første, hvis det er kode, der skal bruges i produktionen, skal du sørge for, at du undslipper dine SQL-parametre, før du tilslutter dem til din sætning. Ingen nyder et SQL-injektionsangreb. Jeg vil anbefale at bruge PDO i stedet, da det understøtter forberedte udsagn og parameterbinding, hvilket er meget meget sikrere.

Hvordan kan jeg forhindre SQL-injektion i PHP?

Så du har en formular...

[title]

[details]

[submit]

Og det bliver indsat i din database...

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

Du kan få det sidste indsættelses-id ved at bruge mysql_insert_id , http://php.net/manual/en/function. mysql-insert-id.php .

$id = mysql_insert_id();

Så kan du få posten...

SELECT title, details FROM questions WHERE id = ?

Og output det på en forhåndsvisningsside.

Jeg har skrevet et eksempel ved at bruge PDO i stedet for de grundlæggende mysql-funktioner.

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>

Uden BOB...

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. PHP, MYSQL Autofuldførelse virker ikke

  2. Sådan versionskontrolleres data gemt i mysql

  3. Hvordan pinger jeg MySQL db og genopretter forbindelse ved hjælp af PDO

  4. MySQL hente variabel fra Stored Procedure i PHP PDO