Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Canonical:Cách lưu dữ liệu biểu mẫu HTML vào cơ sở dữ liệu MySQL

Trước hết, trang PHP hoặc HTML của bạn phải tạo ra một biểu mẫu mà người dùng có thể tương tác. Ở dạng đơn giản nhất, nó sẽ giống như:

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

Điều này sẽ cung cấp cho người dùng của bạn một biểu mẫu đơn giản với trường nhập duy nhất và nút 'lưu'. Sau khi nhấp vào nút 'lưu', nội dung sẽ được gửi đến 'yourcript.php' của bạn bằng cách sử dụng POST phương pháp.

yourscript.php nên thực hiện những điều sau:

  1. Chấp nhận và xử lý thông tin đầu vào từ biểu mẫu của bạn.
  2. Kết nối với cơ sở dữ liệu MySQL của bạn.
  3. Lưu trữ vào cơ sở dữ liệu.

Ở dạng đơn giản nhất, đây sẽ là:

<!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>

Bài học quan trọng ở đây là sử dụng các câu lệnh đã chuẩn bị sẵn để tránh các cuộc tấn công đưa vào 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. 1130 Máy chủ 'amazon-ec2-ip' không được phép kết nối với máy chủ MySQL này

  2. Khi mysql_query trả về false

  3. Cách sử dụng GROUP BY trong một truy vấn khi sử dụng các biến

  4. Làm cách nào để tính toán đường trung bình bằng MySQL?

  5. Thông tin về cơ sở dữ liệu information_schema trong MySQL