【发布时间】:2019-02-16 17:14:55
【问题描述】:
我正在尝试使用 ajax php 和 mysql、pdo 在我的产品数据库中插入一个新产品。该表单位于不同的 html 文件中,并在我按下添加产品按钮后立即以引导模式加载。
下面是表格
<div class="container">
<form class="form" id="insert-product" method="POST">
<div class="form-group">
<label class="form-label" for="name">Product Title</label>
<input type="text" class="form-control" id="title" name="ptitle" tabindex="1" required>
</div>
<div class="form-group">
<label class="form-label" for="message">Product Description</label>
<input type="text" class="form-control" id="desc" name="description" tabindex="2" required>
</div>
<div class="form-group">
<label class="form-label" for="email"> Price</label>
<input type="text" class="form-control" id="price" name="price" tabindex="2" required>
</div>
<div class="form-group">
<label class="form-label" for="subject">Picture of Product</label>
<input type="text" class="form-control" id="subject" name="picture" tabindex="3">
</div>
<div class="text-center">
<button type="submit" name="submit" class="btn btn-start-order">SAVE</button>
</div>
</form>
</div>
</div>
这是使用 ajax 联系 php 文件的脚本。 readProducts() 是一个从数据库中获取数据的简单函数。
$('#insert-product').on('submit', function(event) {
event.preventDefault();
$.ajax({
url: 'insertPro.php',
type: 'POST',
data: $('#insert-product').serialize(),
success: function(data) {
readProducts();
}
});
})
这是将数据插入数据库的 php 文件。 connect.php 已经过测试并且工作正常。
<?php
require_once('connect.php');
if (!empty($_POST)) {
$response = array();
$query = "insert into products(id,name,description,img_file,price) values(:title, :description, :picture, :price)";
$stmt = $DBcon->prepare( $query );
$stmt->bindParam(':title', $title);
$stmt->bindParam(':description', $description);
$stmt->bindParam(':picture', $picture);
$stmt->bindParam(':price', $price);
$title = $_POST["ptitle"];
$description = $_POST["description"];
$price = $_POST["price"];
$picture = $_POST["picture"];
$stmt->execute();
if ($stmt) {
$response['status'] = 'success';
$response['message'] = 'Product Deleted Successfully ...';
} else {
$response['status'] = 'error';
$response['message'] = 'Unable to delete product ...';
}
}
这是我的连接文件。
<?php
$DBhost = "localhost";
$DBuser = "root";
$DBpass = "";
$DBname = "test";
try{
$DBcon = new PDO("mysql:host=$DBhost;dbname=$DBname",$DBuser,$DBpass);
$DBcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $ex){
die($ex->getMessage());
}
?>
当我按下按钮提交数据时,ajax 会按原样刷新,但记录不会添加到我的数据库表中。
【问题讨论】:
-
将
$title等的设置移动到您的PHP中,在您调用绑定数据之前插入数据。 -
您的“id”字段似乎没有正确填充。如果它是自动递增的,则不应将其包含在查询中,或在 values() 中为其添加值
-
@Dave
bindParam()将 PHP 变量绑定到用于准备语句的 SQL 语句中的相应命名或问号占位符。与 PDOStatement::bindValue() 不同,该变量被绑定为引用,并且只会在调用 PDOStatement::execute() 时进行评估。 -
一旦有答案,请不要修改问题中的错误
-
你是对的@RiggsFolly ...不知道我在想什么。感谢您直截了当。以这种顺序编写代码似乎总是很奇怪,所以在我看来它仍然是“错误的”,即使它不是。
标签: javascript php ajax