【发布时间】:2014-01-03 01:48:40
【问题描述】:
我有 form 在提交后将输入数据和文件位置插入 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_* 是已弃用的函数,应替换为MySQLi 或PDO 方法
<?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();
}
}
}
}
?>
如何修复我的代码,使其仅将值插入数据库一次?
【问题讨论】:
-
你从哪里得到的 $_POST['length'] 值?
-
查看您的网络服务器访问日志 - 脚本是否被调用了两次?如果有类似从 http 到 https 的重写,或者带有空的
src=属性的<img>,导致在<img>标记中使用相同的 URI,或者 CSS @987654332 的类似问题,通常会发生这种情况@。都很难发现,但很常见。 -
"除了它将所有内容保存两次" --- 这可能是因为您的查询在
foreach循环内。试着把它拿出来,看看能不能解决问题。你在那个循环中也有很多东西。 -
它没有被调用两次,因为我删除了将 $_FILES 保存到目录的代码部分,并且它保存了所有值一次。 @Rottingham 该值来自
form。 -
我觉得这是你的循环之一。用一条记录转储循环和单元测试,然后以任一顺序缓慢添加循环和/或数据,或者如果仍然无法揭示问题,则同时添加。相信我,这是您的视图(表单)、您的数据模型或您的控制器……我完全怀疑它是数据库。
标签: php mysql sql database forms