如何将 HTML 下拉菜单数据写入 MySQL 数据库?

How to write an HTML dropdown menu data to MySQL database?

我正在尝试将 HTML 下拉列表数据写入 MySQL 数据库。

我有以下 HTML 表格:

<body>
 <form method="post" action="test.php">
  <h3>Name:</h3>
  <input type="text" name="Name">

  <h3>Choose an Interest</h3>
  <select name="Interests" style="width: 400px !important; min-width: 400px; max-width: 400px;">
      <option value="">Choose an option</option>
      <option value="kings">Adroring Kings</option>
      <option value="europe">Travelling Across Europe</option>
      <option value="poland">Poland's Work of Art</option>
  </select>

  <input type="submit" name="Submit" id="Submit" value="Submit">
 </form>
</body>

和以下 PHP 文件连接到我的数据库:

<?php

// database connection code
// $con = mysqli_connect('localhost', 'database_user', 'database_password','database');
$con = mysqli_connect('localhost', 'root', '','test');

// get the post records
$name = $_POST['Name'];
$interests= $_POST['Interests'];

// database insert SQL code
$sql = "INSERT INTO `test_data` (`Name`, `Interests`) VALUES ('$name', '$interests')";

// insert in database
$rs = mysqli_query($con, $sql);

if($rs){
    echo "Contact Records Inserted";
}

?>

我的 SQL 已连接并且在我输入名称后工作正常。但是,当我 select 从下拉框中选择一个选项时,我输入的数据不再通过数据库。

我的数据库:

要使用 PHP 将所选值存储在数据库中,您必须执行下述任务。我强烈建议尽可能使用 PDO 而不是 mysqli。我将展示如何使用两者。

1。读取提交的数据

当用户提交表单时,值将填充到超级全局数组中。如果您的 HTML 表单设置为 POST 方法,那么这些值将出现在 $_POST 中。但是,您应该始终确保在脚本运行时实际提交了这些值。您可以使用 isset() 函数进行检查。

// method 1
if(isset($_POST['Name'], $_POST['Interests'])) {
    // your code
}

2。建立与数据库的连接

每次脚本需要在数据库中执行某些操作时,它都必须有一个打开的连接。此步骤对于确保数据可以正确传输很重要。您必须始终确保三件事:启用错误报告、打开连接并设置正确的字符集。

使用 PDO:

$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'pass', [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false
]);

使用 mysqli:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$mysqli->set_charset('utf8mb4');

3。执行准备好的语句

无论何时需要执行操作,都应始终使用准备好的语句。准备好的语句的巨大优势在于它们将数据与命令分开发送,并且两者不能意外混合。

使用 PDO:

$stmt = $pdo->prepare('INSERT INTO `test_data` (`Name`, `Interests`) VALUES (?, ?)');
$stmt->execute([
    $_POST['Name'],
    $_POST['Interests']
]);

使用 mysqli:

$stmt = $mysqli->prepare('INSERT INTO `test_data` (`Name`, `Interests`) VALUES (?, ?)');
$stmt->bind_param('ss', $_POST['Name'], $_POST['Interests']);
$stmt->execute();

这就是将简单数据插入 MySQL table 所需的全部内容。