php - 如何将用户输入从 HTML 文本表单发送到 mySQL 数据库?

标签 php mysql sql

我们第一次开始使用 PHP 和我的 SQL

用户可以访问 2 个页面:

  1. 打开的第一页有一个包含 3 个输入字段的表单:名字、姓氏、您最喜欢的颜色(十六进制代码颜色选择器)
  2. 填写信息后,您将进入第二页,其中显示文字“欢迎[名字][姓氏]。很高兴见到你。看起来您也喜欢[颜色]吧?”并且背景颜色将更改为您选择的颜色。

我对它进行 POST 处理没有任何问题,但我需要将此信息发送到 SQL 数据库,而且我似乎不知道下一步该做什么。

index.php

<?php 


// server settings
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "bezoeker";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    echo 'connection succesfull';
}

$name = $_POST['name'];
$lastName = $_POST['lastname'];
$favColor = $_POST['favcolor'];

//add to database
$sql = "INSERT INTO formulier (naam, achternaam, kleur) VALUES ('$name', '$lastName', $favColor)";


//database addition confirmation
if(mysqli_query($conn, $sql)){
    echo "Records inserted successfully.";
} else{
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
}


// Close connection
$conn->close();



    include 'template-parts/header.php'; 


    include 'template-parts/main.php'; 


    include 'template-parts/footer.php'; 
?>

Main.php

<main>

<center>
  <form action="welcome.php" method="post">
     Naam: <input type="text" name="name"><br>
     Achternaam: <input type="text" name="lastname"><br>
     Je favoriete kleur: <input type="color" name="favcolor" value="#ff0000">
     <input type="submit">
     </form>
 </center> 


 </main>

Welcome.php

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <link href="css/reset.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
    <title>PHP</title>
</head>

<body>

    <div class= "welcome-message">
        <h1>Welcome <?php echo $_POST["name"]; ?> <?php echo $_POST["lastname"]; ?>  !<br> </h1>
        <h2>Leuk dat je er bent!</h2>

        <h3>Wouw, mijn favoriete kleur is ook <?php echo $_POST["favcolor"]; ?> !</h3> 

        <?php echo '<body style="background-color: ' . $_POST['favcolor'] . '">'; ?>
    </div>



</body>
</html>

我的数据库 Bezoeker 有一个名为 Formulier 的表,其结构为: naamachternaamkleur

使用当前代码,我收到错误

connection succesfullERROR: Could not able to execute INSERT INTO formulier (naam, achternaam, kleur) VALUES ('', '', ). You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

我不知道这意味着什么或下一步该做什么。

最佳答案

您的<form action="welcome.php" method="post">告诉表单接下来要转到哪个 URL 并进行处理。用于插入数据库的所有代码都位于 index.php ,不是welcome.php 。如果您直接浏览到index.php所有 $_POST 字段将为空,因为表单尚未发布到其中。您需要将您的 php 代码移至 welcome.php

welcome.php

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <link href="css/reset.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
    <title>PHP</title>
</head>

<body>

    <div class= "welcome-message">

    <?php 
        //check the form was filled out correctly and you have the expected values
        if (isset ($_POST['name']) && ($_POST['lastname']) && ($_POST['favcolor'])) 
        {
            //....
            //Your PHP code to insert into DB
            //....
     ?>

    <h1>Welcome <?php echo $_POST["name"]; ?> <?php echo $_POST["lastname"]; ?>  !<br> </h1>
    <h2>Leuk dat je er bent!</h2>

    <h3>Wouw, mijn favoriete kleur is ook <?php echo $_POST["favcolor"]; ?> !</h3> 

    <?php echo '<body style="background-color: ' . $_POST['favcolor'] . '">'; ?>

    <?php
        }
     else
        { ?>

    <h1>Form was not filled out properly</h1>

  <?php } ?>
    </div>  

</body>
</html>

此外,请注意其他几个人提到的 SQL 注入(inject)漏洞。直接将表单输入中的值用于 SQL 查询是危险的。执行此操作的正确方法是使用 Prepared Statements .

关于php - 如何将用户输入从 HTML 文本表单发送到 mySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58936725/

相关文章:

sql - 如何清除 SQL Server 2005/2008 中的查询执行统计信息

php - 为什么我不能用 PHP 5.2 处理 CakePHP 2.x 中的 fatal error ?

php - MySQL Join 和 Echo 结果

php - PHP 中的 MySQLdump,我需要它转储到特定目录中

mysql - Rails 枚举 : String or Integer column?

Python - Groupby DataFrameGroupBy 对象

php - MySQL 数据库 - 将输入的数据传输到文本文件(PHP、HTML、SQL)

php - mysql 发布来自 SERVER REQUEST_METHOD 的丢失数据

mysql - 简单的 select, where 语句有问题

mysql - 如何创建触发器来连接字段