gpt4 book ai didi

php - 阻止表单值两次插入 MySQL 数据库

转载 作者:行者123 更新时间:2023-11-29 13:20:42 25 4
gpt4 key购买 nike

我有一个表单,它在提交后将输入数据和文件位置插入到 MySQL 数据库中。该脚本成功保存了数据和文件,只是将所有内容保存了两次。我知道这与 for 语句中的 foreach 语句有关,但我不知道如何重新安排或重写我的代码以具有它完成了我想要的。

我希望它执行现在正在执行的操作,将数据插入数据库,但我希望它将每个值插入一次。

<label>Length</label><input type="text" name="length[]" value="<?php echo   $sav['length']; ?>" size="2">
<label>Width</label><input type="text" name="width[]" value="<?php echo $sav['width']; ?>" size="2">
<label>Color</label><input type="text" name="color[]" value="<?php echo $sav['color']; ?>" size="4">
<label>Quantity</label><input type="text" name="quantity[]" value="<?php echo $sav['quantity']; ?>" size="2">
<label>Invoice Is Hidden</label><input type="hidden" name="invoice[]" value="<?php echo $invoice_no; ?>">
<input type="hidden" name="price[]" value="<?php echo $sav['price']; ?>" />
<input type="hidden" name="PaymentStatus[]" value="PAID">
<input type="hidden" name="MAX_FILE_SIZE[]" value="2000000" />
<input type="file" name="newImage[]">

PHP 脚本

我知道 mysql_* 是已弃用的函数,应替换为 MySQLiPDO 方法

<?php
require("addrow_info.php");

for($i=0;$i<count($_POST['length']);$i++) {
$newOrder = array(
'length' => $_POST['length'][$i],
'width' => $_POST['width'][$i],
'color' => $_POST['color'][$i],
'quantity' => $_POST['quantity'][$i],
'price' => $_POST['price'][$i],
'invoice' => $_POST['invoice'][$i],
'paymentStatus' => $_POST['PaymentStatus'][$i],
);

// Opens a connection to a MySQL server
$connection=mysql_connect ("localhost", $username, $password);
if (!$connection) {
die('Not connected : ' . mysql_error());
}

// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}

foreach ($_FILES['newImage']['error'] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES['newImage']['tmp_name'][$key];
$imageName = $_FILES['newImage']['name'][$key];
move_uploaded_file($tmp_name, "decalImages/newOrders/$imageName");

$uploadDir = 'decalImages/newOrders/';

// Insert new row with user data
$query = "INSERT INTO orders (PaymentStatus, invoice_no, length, width, color, quantity, price, imagePath, orderStatus ) VALUES ('".$newOrder['paymentStatus']."','".$newOrder['invoice']."','".$newOrder['length']."', '".$newOrder['width']."', '".$newOrder['color']."', '".$newOrder['quantity']."', '".$newOrder['price']."', '".$uploadDir."".$imageName."', 'PENDING')";

$result = mysql_query($query);

if (!$result) {
die('Invalid query: ' . mysql_error());
echo "$query";
mysql_close();
}
}
}
}


?>

如何修复我的代码,使其仅将值插入数据库一次?

最佳答案

一些评论有正确的想法。您正在循环遍历文件数量,文件数量的长度可以与记录数量相同,因此您在查询中为每个文件输入一条记录,最多可达记录数量,这样您就可以最多最终总是放入 x^2 条记录。

尝试转储该内部循环,并使用原始计数器作为位置标记,因为每个记录只有一个文件...您的下一个挑战将是确保中间的记录没有文件,但在它之后的文件中,该文件会附加到正确的记录。不过,这是为了磨砺你的托盘:

$tmp_name = $_FILES['newImage']['tmp_name'][$i];
$imageName = $_FILES['newImage']['name'][$i];
move_uploaded_file($tmp_name, "decalImages/newOrders/$imageName");

$uploadDir = 'decalImages/newOrders/';

// Insert new row with user data
$query = "INSERT INTO orders (PaymentStatus, invoice_no, length, width, color, quantity, price, imagePath, orderStatus ) VALUES ('".$newOrder['paymentStatus']."','".$newOrder['invoice']."','".$newOrder['length']."', '".$newOrder['width']."', '".$newOrder['color']."', '".$newOrder['quantity']."', '".$newOrder['price']."', '".$uploadDir."".$imageName."', 'PENDING')";

$result = mysql_query($query);

if (!$result) {
die('Invalid query: ' . mysql_error());
echo "$query";
mysql_close();
}

关于php - 阻止表单值两次插入 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895180/

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