Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Podłączanie formularza html do strony php zgodnie z kluczem podstawowym

Po pierwsze, jeśli jest to kod, który ma być używany w środowisku produkcyjnym, upewnij się, że zmieniasz znaczenie parametrów SQL przed podłączeniem ich do instrukcji. Nikt nie lubi ataków typu SQL injection. Polecam zamiast tego używanie PDO, ponieważ obsługuje ono przygotowane instrukcje i wiązanie parametrów, co jest znacznie bezpieczniejsze.

Jak mogę zapobiec wstrzykiwaniu SQL w PHP?

Więc masz formularz...

[title]

[details]

[submit]

A to zostaje wstawione do Twojej bazy danych...

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

Ostatni identyfikator wstawiania można uzyskać za pomocą mysql_insert_id , http://php.net/manual/en/function. mysql-insert-id.php .

$id = mysql_insert_id();

Wtedy możesz zdobyć rekord...

SELECT title, details FROM questions WHERE id = ?

I wyślij go na stronie podglądu.

Napisałem przykład używając PDO zamiast podstawowych funkcji 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>

Bez 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. Architektura wielodostępna Rails, ustalanie zakresu dostępu do wielu najemców

  2. Jak przeliczyć pole na GRUPIE

  3. Przeszukuj bazę danych MySQL i grupuj według zakresu dat, aby utworzyć wykres

  4. Co oznacza pooling=false w ciągu połączenia MySQL?

  5. Spring Boot JPA MySQL:Nie udało się określić odpowiedniej klasy sterownika