将 PHP 表单提交到 XAMPP MySQL 数据库

Posted

技术标签:

【中文标题】将 PHP 表单提交到 XAMPP MySQL 数据库【英文标题】:Submission of PHP Form to XAMPP MySQL database 【发布时间】:2018-03-11 03:16:39 【问题描述】:

我为餐饮服务创建了一个 php 表单,我打算将其插入 mysql 数据库:该 php 表单名为 index.php:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/font-awesome.min.css">
    <link rel="stylesheet" href="css/style.css">
    <title>BOOTSTRAP</title>
</head>
<div class="container-fluid">
<div class="row">
<div class="inquiry col-md-6">
        <h1>Inquire Now</h1>
            <form method="post" action="inquire.php" name="inquireform" id="inquireForm">
                <div class="form-group">
                    <label for="InputName">Name*</label>
                    <input class="form-control" type="text" id="inputName" placeholder="Name" name="Cust`Name">
                </div>
                <div class="form-group">    
                    <label for="InputLocation">Location*</label>
                    <input class="form-control" type="text" id="inputLocation" placeholder="Location" name="Location">
                </div>
            </form>
            <form class="form-inline">
                <div class="form-group">
                    <label for="SelectDate">Date of Event*</label>
                    <select class="form-control" id="SelectMonth" name="Month">
                        <option>Jan</option>
                        <option>Feb</option>
                        <option>Mar</option>
                        <option>Apr</option>
                        <option>May</option>
                        <option>Jun</option>
                        <option>Jul</option>
                        <option>Aug</option>
                        <option>Sept</option>
                        <option>Oct</option>
                        <option>Nov</option>
                        <option>Dec</option>
                    </select>
                    <select class="form-control" id="SelectDay" name="Day">
                        <option>1</option>
                        <option>2</option>
                        <option>3</option>
                        <option>4</option>
                        <option>5</option>
                        <option>6</option>
                        <option>7</option>
                        <option>8</option>
                        <option>9</option>
                        <option>10</option>
                        <option>11</option>
                        <option>12</option>
                        <option>13</option>
                        <option>14</option>
                        <option>15</option>
                        <option>16</option>
                        <option>17</option>
                        <option>18</option>
                        <option>19</option>
                        <option>20</option>
                        <option>21</option>
                        <option>22</option>
                        <option>23</option>
                        <option>24</option>
                        <option>25</option>
                        <option>26</option>
                        <option>27</option>
                        <option>28</option>
                        <option>29</option>
                        <option>30</option>
                        <option>31</option>
                    </select>
                    <select class="form-control" id="selectYear" placeholder="Year" name="Year">
                        <option>2017</option>
                        <option>2018</option>
                        <option>2019</option>
                        <option>2020</option>
                        <option>2021</option>
                        <option>2022</option>
                    </select>
                </div>
                </form>
                <form>
                <div class="form-group">    
                    <label for="InputNumber">Number of Guests*</label>
                    <input class="form-control" type="Number" id="inputNumber" placeholder="Number" name="Guests">
                </div>
                <div class="form-group">    
                    <label for="InputContact">Contact Number*</label>
                    <input class="form-control" type="text" id="inputContact" placeholder="Contact Number" name="ContNum">
                </div>
                <input class="btn btn-default" type="submit" value="submit">
            </form>
        </div>
    </div>
    </div>
</body>
</html>

inquire.php 是:

<?php
$mysql_host     = "localhost";
$mysql_username = "root";
$mysql_password = "password";
$mysql_database = "catering";

$mysqli  = new Mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database);
$prepare = $mysqli->prepare("INSERT INTO `inquiry`(`CustName`,`Location`,`Month`,`Day`,`Year`,`Guests`,`ContNum`) VALUES (?,?,?,?,?,?,?)");
$prepare->bind_param("sssssss", print_r($POST)['CustName'], print_r($POST)['Location'], print_r($POST)['Month'], print_r($POST)['Day'], print_r($POST)['Year'], print_r($POST)['Guests'], print_r($POST)['ContNum']);
$prepare->execute();
$mysqli->close();
?>

我从另一个问题中得到的:How to write information from html form to MySQL Database

但是,我的不起作用。 php url 只是更改,没有数据插入到我的数据库中。我在想我的设置或安装可能有问题,可能是以下问题之一?

    我的 PC 中没有安装 PHP,只有 XAMPP。 我把index.php和inquire.php放在xampp>htdocs的一个文件夹里 我在管理员模式下运行 XAMPP。 print_r($_POST) 可能不正确。

伙计们,我真的需要帮助。我确保数据库名、表名和列名匹配。我在这里做错了什么?

数据库图片: enter image description here

更新;

仍然没有插入数据,url 只是从 file://index.php 变为 file://index.php?Guests=2&ContNum=123

【问题讨论】:

更新:将列更改为数据库上的正确数据类型。仍然没有插入数据。 你知道print_r是做什么的吗? 是的,为什么是 print_r($_POST)['...'] 而不是 $_POST['...'] ?并尝试在每一步之后检查错误,这样你就知道你的代码的哪些部分正在工作,哪些没有。链接:php.net/manual/ro/mysqli.quickstart.prepared-statements.php @BadeaMihaiFlorin 我以前用过 $_POST['...'] 但它没有向数据库添加信息,在链接中,我看到一个用户说请使用 print_r($_POST) 然后那个家伙问这个问题的人说它有效。我再试一次。 在添加到db之前尝试print_r($_POST),看看是否收到所有参数。而且,现在我仔细看看,为什么你有嵌套表单?你应该只有一个。 【参考方案1】:

使用 localhost/your_project_name.html 在 URL 栏中访问您的项目。基本上你不使用“xampp localhost”,你只需双击我得到的 html 文件。

好的,我发现的代码存在更多问题。

首先在查询中的print_r($POST['something']) 内将其更改为$_POST['something']。展望未来,您在帖子中的值有误,例如您的表单中的 $_POST['Cust Name'] 设置为 name="Cust`Name"。那么你的表格太多了,你必须缩小范围。对于 1 个 html 文件,您不能拥有这么多的表单。 php 不能“读取元素”它是服务器端,所以如果你保持这种结构,也许你应该考虑对 php 进行 ajax 调用。

<form method="post" action="inquire.php" name="inquireform" id="inquireForm">
    <div class="form-group">
        <label for="InputName">Name*</label>
        <input class="form-control" type="text" id="inputName" placeholder="Name" name="Cust`Name">
    </div>
    <div class="form-group">    
        <label for="InputLocation">Location*</label>
        <input class="form-control" type="text" id="inputLocation" placeholder="Location" name="Location">
    </div>
</form>

这里的这部分将向php文件发出请求,但仅此而已,其余部分将不会通过请求发送,因为它们包含在另一种形式中,没有动作并且php文件不包含在那里。

【讨论】:

是的,我已经将其更改为 localhost/form/index.html,它删除了我的 inage 滑块、徽标、菜单图像,但仍然没有将数据提交到数据库。【参考方案2】:

您的绑定很可能不正确,您可以删除print_r,它应该是$_POST 而不是$POST。我假设 POST 名称是正确的,并且已提供。为了安全起见,请将Mysqli 更改为mysqli

<?php
$mysql_host     = "localhost";
$mysql_username = "root";
$mysql_password = "password";
$mysql_database = "catering";

$mysqli  = new mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database);
$prepare = $mysqli->prepare("INSERT INTO `inquiry`(`CustName`,`Location`,`Month`,`Day`,`Year`,`Guests`,`ContNum`) VALUES (?,?,?,?,?,?,?)");
$prepare->bind_param("sssssss", $_POST['CustName'], $_POST['Location'], $_POST['Month'], $_POST['Day'], $_POST['Year'], $_POST['Guests'], $_POST['ContNum']);
$prepare->execute();
$mysqli->close();
?>

如果你先把数据放在一个变量中会更好

<?php
$mysql_host     = "localhost";
$mysql_username = "root";
$mysql_password = "password";
$mysql_database = "catering";

$custName = $_POST['CustName'];
$location= $_POST['Location'];
$month= $_POST['Month'];
$day= $_POST['Day'];
$year= $_POST['Year'];
$guests= $_POST['Guests'];
$contNum= $_POST['ContNum'];

$mysqli  = new mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database);
$prepare = $mysqli->prepare("INSERT INTO `inquiry`(`CustName`,`Location`,`Month`,`Day`,`Year`,`Guests`,`ContNum`) VALUES (?,?,?,?,?,?,?)");
$prepare->bind_param("sssssss",
                    $custName,
                    $location,
                    $month,
                    $day,
                    $year,
                    $guests,
                    $contNum);
$prepare->execute();
$mysqli->close();
?>

【讨论】:

删除了打印仍然没有。网址仅从 file://index.php 更改为 file://index.php?Guests=2&ContNum=123 当我在客人中输入“2”并在联系号码中输入“123”时。 我刚刚注意到您有多个&lt;form&gt;,整个表单只使用一个 @Swellar 查看 url,这意味着他没有使用 Web 服务器来运行脚本 @MasivuyeCokile 我真的不知道它在没有服务器的情况下运行时会是什么样子,所以我认为 OP 使用 GET 而不是 POST。既然你说了,那就是file:// 而不是localhost @Swellar 现在是file:// 这意味着它不在网络服务器下运行【参考方案3】:

改变这个:

$prepare->bind_param("sssssss", print_r($POST)['CustName'], print_r($POST)['Location'], print_r($POST)['Month'], print_r($POST)['Day'], print_r($POST)['Year'], print_r($POST)['Guests'], print_r($POST)['ContNum']);

对此:

$prepare->bind_param("sssssss", $_POST['CustName'], $_POST['Location'], $_POST['Month'], $_POST['Day'], $_POST['Year'], $_POST['Guests'], $_POST['ContNum']);

注意:在存储之前验证用户输入也很重要

【讨论】:

没有插入数据,url只从file://index.php变为file://index.php?Guests=2&ContNum=123 你没有从服务器上运行 php,这就是为什么@GorilyaWarfare 见:***.com/questions/8580273/… 我在 localhost bruh 上运行它仍然无法正常工作 您的页面是 .html 还是 .php? @GoriyaWarfare【参考方案4】:

您的 html 中有多个表单,您只需要一个即可。我将多余的注释掉了,以便您更好地理解。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/font-awesome.min.css">
    <link rel="stylesheet" href="css/style.css">
    <title>BOOTSTRAP</title>
</head>
<div class="container-fluid">
<div class="row">
<div class="inquiry col-md-6">
        <h1>Inquire Now</h1>
            <form method="post" action="inquire.php" name="inquireform" id="inquireForm">
                <div class="form-group">
                    <label for="InputName">Name*</label>
                    <input class="form-control" type="text" id="inputName" placeholder="Name" name="Cust`Name">
                </div>
                <div class="form-group">    
                    <label for="InputLocation">Location*</label>
                    <input class="form-control" type="text" id="inputLocation" placeholder="Location" name="Location">
                </div>
            <!-- </form> -->
            <!-- <form class="form-inline"> -->
                <div class="form-group">
                    <label for="SelectDate">Date of Event*</label>
                    <select class="form-control" id="SelectMonth" name="Month">
                        <option>Jan</option>
                        <option>Feb</option>
                        <option>Mar</option>
                        <option>Apr</option>
                        <option>May</option>
                        <option>Jun</option>
                        <option>Jul</option>
                        <option>Aug</option>
                        <option>Sept</option>
                        <option>Oct</option>
                        <option>Nov</option>
                        <option>Dec</option>
                    </select>
                    <select class="form-control" id="SelectDay" name="Day">
                        <option>1</option>
                        <option>2</option>
                        <option>3</option>
                        <option>4</option>
                        <option>5</option>
                        <option>6</option>
                        <option>7</option>
                        <option>8</option>
                        <option>9</option>
                        <option>10</option>
                        <option>11</option>
                        <option>12</option>
                        <option>13</option>
                        <option>14</option>
                        <option>15</option>
                        <option>16</option>
                        <option>17</option>
                        <option>18</option>
                        <option>19</option>
                        <option>20</option>
                        <option>21</option>
                        <option>22</option>
                        <option>23</option>
                        <option>24</option>
                        <option>25</option>
                        <option>26</option>
                        <option>27</option>
                        <option>28</option>
                        <option>29</option>
                        <option>30</option>
                        <option>31</option>
                    </select>
                    <select class="form-control" id="selectYear" placeholder="Year" name="Year">
                        <option>2017</option>
                        <option>2018</option>
                        <option>2019</option>
                        <option>2020</option>
                        <option>2021</option>
                        <option>2022</option>
                    </select>
                </div>
                <!-- </form> -->
                <!-- <form> -->
                <div class="form-group">    
                    <label for="InputNumber">Number of Guests*</label>
                    <input class="form-control" type="Number" id="inputNumber" placeholder="Number" name="Guests">
                </div>
                <div class="form-group">    
                    <label for="InputContact">Contact Number*</label>
                    <input class="form-control" type="text" id="inputContact" placeholder="Contact Number" name="ContNum">
                </div>
                <input class="btn btn-default" type="submit" value="submit">
            </form>
        </div>
    </div>
    </div>
</body>
</html>

【讨论】:

以上是关于将 PHP 表单提交到 XAMPP MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

表单提交导致 PHP 和 XAMPP 中出现错误 404

使用 Ajax、PHP、MYSQL 更新表单

连接 PHP 源代码并提交表单到 MySQL 数据库

apache/xampp表单提交数据

来自 php 表单的问题/错误,用于使用 php-mailer 库通过本地主机 Xampp 发送电子邮件

PHP将语句插入XAMPP MySQL数据库不会导致表更新[重复]