query("SELECT * FROM categories O-6ren">
gpt4 book ai didi

php - 每次刷新表单时都会添加额外记录

转载 作者:行者123 更新时间:2023-11-29 12:44:03 24 4
gpt4 key购买 nike

我用来通过php将产品信息插入mysql的代码是这样的。

<?php include 'dbconnect.php'; ?>

<head>
</head>

<body>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>">
<input type="text" name="product_name"/>
<input type="text" name="product_price" />

<select name="product_cat">
<?php
$results = $connect->query("SELECT * FROM categories ORDER BY cat_name");
while($row = $results->fetch_array()) {
extract($row);
echo "<option value='"."{$cat_id}"."'>"."{$cat_name}"."</option>";
}
$results->free();
?>
</select>

<input type="submit" name="submit" value="Submit">
</form>

<?php
if($_POST){
$sql = "INSERT INTO products (prd_name, prd_price) VALUES(?,?)";
if($stmt = $connect->prepare($sql) )
{
$productname = $_POST['product_name'];
$productprice = $_POST['product_price'];
$categoryid = $_POST['product_cat'];
$stmt->bind_param("si", $productname, $productprice);
if($stmt->execute())
{
$lastid = $stmt->insert_id;
$productsku = "PR".$productlastid;

$insert_row = $connect->query("INSERT INTO categoryproducts (CategoryId, productId) VALUES ($categoryid, $lastid)");
$insert_row = $connect->query("UPDATE products SET productSku = '".$productsku."' WHERE productId =".$productlastid."");

echo "Created";
$stmt->close();
}else{
die("Unable to create category.");
}
}else{
die("Unable to prepare statement.");
}
$connect->close();
}
?>

</body>
</html>

代码工作正常,正如我所希望的那样,但每次保存记录并刷新表单后,都会在表类别产品中创建一条附加记录。我最好的猜测是,问题出在语句执行后的某个地方

if($stmt->execute())
{
$lastid = $stmt->insert_id;
$productsku = "PR".$productlastid;

$insert_row = $connect->query("INSERT INTO categoryproducts (CategoryId, productId) VALUES ($categoryid, $lastid)");
$insert_row = $connect->query("UPDATE products SET productSku = '".$productsku."' WHERE productId =".$productlastid."");

echo "Created";
$stmt->close();
}else{
die("Unable to create category.");
}
}else{
die("Unable to prepare statement.");
}
$connect->close();
}

我想我需要在提交表单后关闭某个地方的连接。有人可以帮忙吗?

最佳答案

不要使用 if($_POST){,而是使用 if(isset($_POST['submit'])){ 并将 header 重定向到同一页面或您选择的另一页。

即:并使用 ob_start();这将阻止
无法修改 header 信息 - header 已由...发送

<?php 
ob_start();
?>

<?php include 'dbconnect.php'; ?>

// ...

<?php

if(isset($_POST['submit'])){
$sql = "INSERT INTO products (prd_name, prd_price) VALUES(?,?)";
if($stmt = $connect->prepare($sql) )
{
$productname = $_POST['product_name'];
$productprice = $_POST['product_price'];
$categoryid = $_POST['product_cat'];
$stmt->bind_param("si", $productname, $productprice);
if($stmt->execute())
{
$lastid = $stmt->insert_id;
$productsku = "PR".$productlastid;

$insert_row = $connect->query("INSERT INTO categoryproducts (CategoryId, productId) VALUES ($categoryid, $lastid)");
$insert_row = $connect->query("UPDATE products SET productSku = '".$productsku."' WHERE productId =".$productlastid."");

// echo "Created";

$stmt->close();

header("Location: this_page.php");
exit;

}else{
die("Unable to create category.");
}
}else{
die("Unable to prepare statement.");
}
$connect->close();
} // brace for if(isset($_POST['submit']))
?>

您还可以考虑使用 Ajax ,或使用两个不同的文件,一个用于您的表单,另一个用于带有 header 重定向的 PHP/SQL。

关于php - 每次刷新表单时都会添加额外记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com