【发布时间】:2021-07-22 17:31:25
【问题描述】:
我正在向我的索引页面添加一个 HTML 表单,它将用户输入添加到 MariaDB/MySQL 数据库表:mailList。 我正在使用 PHP 将数据写入表中,并使用 JQuery 来确保用户在提交后不会被重定向。
我的问题是数据库没有更新。 如果用户使用的是 Google Chrome/Safari - JQuery 会说它已成功提交,但数据库没有更新。
Firefox 给出正确的错误并指出存在问题。
我的 HTML 和 JQuery 运行良好,但我认为我的问题出在我的 PHP 代码中:
<?php
$servername = "servername";
$username = "username";
$password = "password";
$database = "database";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['submit'])){
$name=$_POST['name'];
$email=$_POST['email'];
$query = "INSERT INTO mailList (name, email) VALUES ('$name', '$email')";
if (!mysqli_query($conn,$query)) {
die('An error occured. Your details were not added to out Mailing List.');
}
}
?>
注意: 我的 $servername / $username / $password / $database 填充了正确的信息,我刚刚把这些信息拿出来发布在这里。
这也是我的表格
<form name="mailList" id="mailList" method="post" action="/php/mailList_add_record.php" novalidate>
<div class="control-group form-group">
<div class="controls">
<label >Name:</label>
<input
type="text"
class="form-control"
id="name"
required
data-validation-required-message="Please enter your name."
placeholder="Example: John Doe...">
<p class="help-block"></p>
</div>
</div>
<div class="control-group form-group">
<div class="controls">
<label >Email Address:</label>
<input
type="email"
class="form-control"
id="email"
required
data-validation-required-message="Please enter your email address."
placeholder="Example: jane.doe@email.com">
</div>
</div>
<div id="success"></div>
<button type="submit"
class="btn btn-primary"
id="submit"
name="submit">
Send Message</button>
</form>
在我的 JQuery 中,我将每个步骤都写入控制台以确保它正常工作 - 确实如此。我有一个单独的 ser_con.php 文件来建立与我的数据库的连接,并在连接成功时回显 - 这是有的。
我是这方面的新手,所以请温柔一点。谁能发现我的错误?
我正在使用 PHP v7.3 / phpMyAdmin v4.9.1
【问题讨论】:
-
你提到jQuery,表单是通过jQuery提交的吗?
-
您的
<input>字段似乎缺少name属性,这就是未设置$_POST['name']和$_POST['email']的原因。试试How do I get PHP errors to display? 和How to get the error message in MySQLi? -
@brombeer 谢谢你,我完全忘记了 name 属性。不幸的是,它确实奏效了。单击表单的按钮时,我正在触发 jQuery 的 AJAX 功能。即使完全删除了我的 jQuery 代码,仍然没有更新我的数据库
-
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
那你需要根据brombeer提供的链接检查错误。
标签: php forms mysqli mariadb jquery-ajax