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

Canonical:Jak zapisać dane formularza HTML w bazie danych MySQL

Przede wszystkim strona PHP lub HTML powinna tworzyć formularz, z którym użytkownik może wchodzić w interakcje. W najprostszej formie byłoby to coś takiego:

<html>
<body>
 <form method="post" action="yourscript.php">
  <input type="text" name="yourfield">
  <input type="submit" name="youraction" value="save">
 </form>
</body>
</html>

Dzięki temu użytkownik otrzyma prosty formularz z jednym polem wprowadzania i przyciskiem „Zapisz”. Po kliknięciu przycisku „Zapisz”, aby zawartość została wysłana do Twojego pliku „yourscript.php” za pomocą POST metoda.

yourscript.php powinien wdrożyć następujące elementy:

  1. Zaakceptuj i przetwórz dane wejściowe z formularza.
  2. Połącz się ze swoją bazą danych MySQL.
  3. Zapisz w bazie danych.

W najprostszej formie byłoby to:

<!doctype html>
<html>
 <head>
  <title>Process and store</title>
 </head>
<body>
<?php

// Check that user sent some data to begin with. 
if (isset($_REQUEST['yourfield'])) {

    /* Sanitize input. Trust *nothing* sent by the client.
     * When possible use whitelisting, only allow characters that you know
     * are needed. If username must contain only alphanumeric characters,
     * without puntation, then you should not accept anything else.
     * For more details, see: https://stackoverflow.com/a/10094315
     */
    $yourfield=preg_replace('/[^a-zA-Z0-9\ ]/','',$_REQUEST['yourfield']);

    /* Escape your input: use htmlspecialchars to avoid most obvious XSS attacks.
     * Note: Your application may still be vulnerable to XSS if you use $yourfield
     *       in an attribute without proper quoting.
     * For more details, see: https://stackoverflow.com/a/130323
     */
    $yourfield=htmlspecialchars($yourfield);


} else {
    die('User did not send any data to be saved!');
}


// Define MySQL connection and credentials
$pdo_dsn='mysql:dbname=yourdatabase;host=databasehost.example.com';
$pdo_user='yourdatabaseuser';     
$pdo_password='yourdatabaspassword';  

try {
    // Establish connection to database
    $conn = new PDO($pdo_dsn, $pdo_user, $pdo_password);

    // Throw exceptions in case of error.
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Use prepared statements to mitigate SQL injection attacks.
    // See https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php for more details
    $qry=$conn->prepare('INSERT INTO yourtable (yourcolumn) VALUES (:yourvalue)');

    // Execute the prepared statement using user supplied data.
    $qry->execute(Array(":yourvalue" => $yourfield));

} catch (PDOException $e) {
    echo 'Error: ' . $e->getMessage() . " file: " . $e->getFile() . " line: " . $e->getLine();
    exit;
}
?>
<form method="post">

 <!-- Please note that the quotes around next <?php ... ?> block are important
      to avoid XSS issues with poorly escaped user input. For more details:
      https://stackoverflow.com/a/2894530
  -->
 <input type="text" name="yourfield" value="<?php print $yourfield; ?>">
 <input type="submit" name="youraction" value="save">
</form>

</body>
</html>

Kluczową kwestią jest tutaj użycie przygotowanych oświadczeń do unikaj ataków iniekcji SQL .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. skrypt do konwersji pliku sql zrzutu mysql do formatu, który można zaimportować do sqlite3 db

  2. Jak utworzyć indeks DESC w MySQL?

  3. Usuwanie z tabeli MySQL z ograniczeniami klucza obcego

  4. Przełączanie awaryjne baz danych dla witryn WordPress

  5. Utwórz kolumnę sumy skumulowanej w MySQL