Mysql
 sql >> Base de données >  >> RDS >> Mysql

Connexion du formulaire html à la page php en fonction de la clé primaire

Tout d'abord, s'il s'agit de code à utiliser en production, assurez-vous d'échapper vos paramètres SQL avant de les intégrer à votre instruction. Personne ne bénéficie d'une attaque par injection SQL. Je recommanderais plutôt d'utiliser PDO car il prend en charge les instructions préparées et la liaison de paramètres, ce qui est beaucoup plus sûr.

Comment puis-je empêcher l'injection SQL dans PHP ?

Vous avez donc un formulaire...

[title]

[details]

[submit]

Et cela est inséré dans votre base de données...

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

Vous pouvez obtenir le dernier identifiant d'insertion en utilisant mysql_insert_id , http://php.net/manual/en/function. mysql-insert-id.php .

$id = mysql_insert_id();

Ensuite, vous pouvez obtenir l'enregistrement...

SELECT title, details FROM questions WHERE id = ?

Et affichez-le dans une page d'aperçu.

J'ai écrit un exemple utilisant PDO au lieu des fonctions mysql de base.

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>

Sans AOP...

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>