将 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”时。 我刚刚注意到您有多个<form>
,整个表单只使用一个
@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 数据库的主要内容,如果未能解决你的问题,请参考以下文章