Php 如何创建一个表单更新页面来更新数据库表记录,但同时使用多个记录?

Php 如何创建一个表单更新页面来更新数据库表记录,但同时使用多个记录?,php,mysql,sql,Php,Mysql,Sql,我有一张这样的桌子: id product_category product_name product_range discount_amt --------------------------------------------------------------------------- 1 Post Card 4x6 5M to 9,999 0.007 2 Post Card

我有一张这样的桌子:

id     product_category     product_name     product_range     discount_amt
---------------------------------------------------------------------------
1      Post Card            4x6              5M to 9,999       0.007
2      Post Card            4x6              10M to 14,999     0.01
3      Post Card            4x6              15M to 19,999     0.013
4      Post Card            4x6              20M to 24,999     0.015
5      Post Card            4x6              Over 25M          0.019
$pricediscountquery = mysql_query("SELECT * FROM pricing_discount") or die(mysql_error());
$i=0;
while($pricingdiscountrow = mysql_fetch_array( $pricediscountquery )) {
$pricingdiscountarray[$i++]=$pricingdiscountrow['discount_amt'];
}
<p>5M to 9,999: <input type="text" name="pc_4x6_5m_to_9999" value="<?php echo $pricingdiscountarray[0]; ?>" /></p>
<p>10M to 14,999: <input type="text" name="pc_4x6_10m_to_14999" value="<?php echo $pricingdiscountarray[1]; ?>" /></p>
<p>15M to 19,999: <input type="text" name="pc_4x6_15m_to_19999" value="<?php echo $pricingdiscountarray[2]; ?>" /></p>
<p>20M to 24,999: <input type="text" name="pc_4x6_20m_to_24999" value="<?php echo $pricingdiscountarray[3]; ?>" /></p>
<p>Over 25M: <input type="text" name="pc_4x6_over_25m" value="<?php echo $pricingdiscountarray[4]; ?>" /></p>
$pc_4x6_5m_to_9999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_5m_to_9999']));
$pc_4x6_10m_to_14999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_10m_to_14999']));
$pc_4x6_15m_to_19999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_15m_to_19999']));
$pc_4x6_20m_to_24999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_20m_to_24999']));
$pc_4x6_over_25m = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_over_25m']));
mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,$pc_4x6_5m_to_9999),(2,$pc_4x6_10m_to_14999),(3,$pc_4x6_15m_to_19999),(4,$pc_4x6_20m_to_24999),(5,$pc_4x6_over_25m) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
我只是在页面中调用“折扣金额”列,如下所示:

id     product_category     product_name     product_range     discount_amt
---------------------------------------------------------------------------
1      Post Card            4x6              5M to 9,999       0.007
2      Post Card            4x6              10M to 14,999     0.01
3      Post Card            4x6              15M to 19,999     0.013
4      Post Card            4x6              20M to 24,999     0.015
5      Post Card            4x6              Over 25M          0.019
$pricediscountquery = mysql_query("SELECT * FROM pricing_discount") or die(mysql_error());
$i=0;
while($pricingdiscountrow = mysql_fetch_array( $pricediscountquery )) {
$pricingdiscountarray[$i++]=$pricingdiscountrow['discount_amt'];
}
<p>5M to 9,999: <input type="text" name="pc_4x6_5m_to_9999" value="<?php echo $pricingdiscountarray[0]; ?>" /></p>
<p>10M to 14,999: <input type="text" name="pc_4x6_10m_to_14999" value="<?php echo $pricingdiscountarray[1]; ?>" /></p>
<p>15M to 19,999: <input type="text" name="pc_4x6_15m_to_19999" value="<?php echo $pricingdiscountarray[2]; ?>" /></p>
<p>20M to 24,999: <input type="text" name="pc_4x6_20m_to_24999" value="<?php echo $pricingdiscountarray[3]; ?>" /></p>
<p>Over 25M: <input type="text" name="pc_4x6_over_25m" value="<?php echo $pricingdiscountarray[4]; ?>" /></p>
$pc_4x6_5m_to_9999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_5m_to_9999']));
$pc_4x6_10m_to_14999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_10m_to_14999']));
$pc_4x6_15m_to_19999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_15m_to_19999']));
$pc_4x6_20m_to_24999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_20m_to_24999']));
$pc_4x6_over_25m = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_over_25m']));
mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,$pc_4x6_5m_to_9999),(2,$pc_4x6_10m_to_14999),(3,$pc_4x6_15m_to_19999),(4,$pc_4x6_20m_to_24999),(5,$pc_4x6_over_25m) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
我正在显示表单字段和表单字段值中预先填充的折扣金额,如下所示:

id     product_category     product_name     product_range     discount_amt
---------------------------------------------------------------------------
1      Post Card            4x6              5M to 9,999       0.007
2      Post Card            4x6              10M to 14,999     0.01
3      Post Card            4x6              15M to 19,999     0.013
4      Post Card            4x6              20M to 24,999     0.015
5      Post Card            4x6              Over 25M          0.019
$pricediscountquery = mysql_query("SELECT * FROM pricing_discount") or die(mysql_error());
$i=0;
while($pricingdiscountrow = mysql_fetch_array( $pricediscountquery )) {
$pricingdiscountarray[$i++]=$pricingdiscountrow['discount_amt'];
}
<p>5M to 9,999: <input type="text" name="pc_4x6_5m_to_9999" value="<?php echo $pricingdiscountarray[0]; ?>" /></p>
<p>10M to 14,999: <input type="text" name="pc_4x6_10m_to_14999" value="<?php echo $pricingdiscountarray[1]; ?>" /></p>
<p>15M to 19,999: <input type="text" name="pc_4x6_15m_to_19999" value="<?php echo $pricingdiscountarray[2]; ?>" /></p>
<p>20M to 24,999: <input type="text" name="pc_4x6_20m_to_24999" value="<?php echo $pricingdiscountarray[3]; ?>" /></p>
<p>Over 25M: <input type="text" name="pc_4x6_over_25m" value="<?php echo $pricingdiscountarray[4]; ?>" /></p>
$pc_4x6_5m_to_9999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_5m_to_9999']));
$pc_4x6_10m_to_14999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_10m_to_14999']));
$pc_4x6_15m_to_19999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_15m_to_19999']));
$pc_4x6_20m_to_24999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_20m_to_24999']));
$pc_4x6_over_25m = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_over_25m']));
mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,$pc_4x6_5m_to_9999),(2,$pc_4x6_10m_to_14999),(3,$pc_4x6_15m_to_19999),(4,$pc_4x6_20m_to_24999),(5,$pc_4x6_over_25m) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
我试图同时更新多行/记录,就在折扣金额列中,如下所示:

id     product_category     product_name     product_range     discount_amt
---------------------------------------------------------------------------
1      Post Card            4x6              5M to 9,999       0.007
2      Post Card            4x6              10M to 14,999     0.01
3      Post Card            4x6              15M to 19,999     0.013
4      Post Card            4x6              20M to 24,999     0.015
5      Post Card            4x6              Over 25M          0.019
$pricediscountquery = mysql_query("SELECT * FROM pricing_discount") or die(mysql_error());
$i=0;
while($pricingdiscountrow = mysql_fetch_array( $pricediscountquery )) {
$pricingdiscountarray[$i++]=$pricingdiscountrow['discount_amt'];
}
<p>5M to 9,999: <input type="text" name="pc_4x6_5m_to_9999" value="<?php echo $pricingdiscountarray[0]; ?>" /></p>
<p>10M to 14,999: <input type="text" name="pc_4x6_10m_to_14999" value="<?php echo $pricingdiscountarray[1]; ?>" /></p>
<p>15M to 19,999: <input type="text" name="pc_4x6_15m_to_19999" value="<?php echo $pricingdiscountarray[2]; ?>" /></p>
<p>20M to 24,999: <input type="text" name="pc_4x6_20m_to_24999" value="<?php echo $pricingdiscountarray[3]; ?>" /></p>
<p>Over 25M: <input type="text" name="pc_4x6_over_25m" value="<?php echo $pricingdiscountarray[4]; ?>" /></p>
$pc_4x6_5m_to_9999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_5m_to_9999']));
$pc_4x6_10m_to_14999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_10m_to_14999']));
$pc_4x6_15m_to_19999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_15m_to_19999']));
$pc_4x6_20m_to_24999 = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_20m_to_24999']));
$pc_4x6_over_25m = mysql_real_escape_string(htmlspecialchars($_POST['pc_4x6_over_25m']));
mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,$pc_4x6_5m_to_9999),(2,$pc_4x6_10m_to_14999),(3,$pc_4x6_15m_to_19999),(4,$pc_4x6_20m_to_24999),(5,$pc_4x6_over_25m) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
上面的一个不会在代码中产生错误,但会在网页上产生错误:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行重复键更新折扣金额=值(折扣金额)时使用的正确语法

我也试过:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,'$pc_4x6_5m_to_9999'),(2,'$pc_4x6_10m_to_14999'),(3,'$pc_4x6_15m_to_19999'),(4,'$pc_4x6_20m_to_24999'),(5,'$pc_4x6_over_25m') ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
这在代码中给出了一个错误,因此我甚至没有保存它并尝试运行它:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,"$pc_4x6_5m_to_9999"),(2,"$pc_4x6_10m_to_14999"),(3,"$pc_4x6_15m_to_19999"),(4,"$pc_4x6_20m_to_24999"),(5,"$pc_4x6_over_25m") ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
这也导致了代码错误:

mysql_query("INSERT INTO pricing_discount (id,"discount_amt") VALUES (1,"$pc_4x6_5m_to_9999"),(2,"$pc_4x6_10m_to_14999"),(3,"$pc_4x6_15m_to_19999"),(4,"$pc_4x6_20m_to_24999"),(5,"$pc_4x6_over_25m") ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
如果你像这样硬编码值,它会工作,但我在做变量:

mysql_query("INSERT INTO pricing_discount (id,discount_amt) VALUES (1,1),(2,3),(3,3),(4,12),(5,12) ON DUPLICATE KEY UPDATE discount_amt=VALUES(discount_amt); ") or die(mysql_error());
正确的方法是什么

如果您想知道为什么我在尝试更新记录时没有执行更新而不是插入,那是因为我遵循了以下stackoverflow:


简单回顾一下,这有什么不对

 $query = "
 INSERT INTO pricing_discount 
 (id
 ,discount_amt
 ) VALUES 
 (1,'$pc_4x6_5m_to_9999'),
 (2,'$pc_4x6_10m_to_14999'),
 (3,'$pc_4x6_15m_to_19999'),
 (4,'$pc_4x6_20m_to_24999'),
 (5,'$pc_4x6_over_25m') 
 ON DUPLICATE KEY UPDATE discount_amt = VALUES(discount_amt);
 ";


  mysql_query($query) or die(mysql_error());

我假设,在您的表中,
折扣金额
将是浮动或双数据类型。然后下面是sql查询qill的工作。对于int、float、decimal或double数据类型,无需在单引号
之间添加值

$query = "
 INSERT INTO pricing_discount 
 (id
 ,discount_amt
 ) VALUES 
 (1,".$pc_4x6_5m_to_9999."),
 (2,".$pc_4x6_10m_to_14999."),
 (3,".$pc_4x6_15m_to_19999."),
 (4,".$pc_4x6_20m_to_24999."),
 (5,".$pc_4x6_over_25m.") 
 ON DUPLICATE KEY UPDATE discount_amt = VALUES(discount_amt);
 ";

mysql_query($query) or die(mysql_error());

现在是切换到mysqli_uu或(更好的是)PDO.echo查询的好时机,这样您就可以看到传递给MySQL的内容。你会发现你所有的变量都是空的。这看起来也很有效。也许使用浮动会更好,但是,在提交表单和数据库保存新值后,如何重定向到另一个页面?我把它放在查询之后,但它只是使相同的页面出现,这是可以的,但是当页面刷新时,表单字段中的值是以前的值,而不是更新后的值。标题(“位置:pricing-discount-details.php”);您可以共享页面名称或流。如列出页面名称、表单页面名称和插入/更新页面名称。将尝试解决此问题。我尚未创建查看页面。我现在正在编辑页面。编辑这个表只需要2页。将没有页面可在表中创建条目。因此,当我创建查看页面时,人们可以先查看然后再编辑,但如果他们愿意,他们可以直接进行编辑。在编辑页面中修改字段并保存后,用户应转到查看页面。查看页面将是:pricing-discount-details.php。编辑页面是:edit-pricing-discount.phpIf
header(“位置:pricing-discount details.php”)不工作,然后尝试javascript重定向
echo'window.location.href(“pricing-discount-details.php”)
after
mysql\u query($query)或die(mysql\u error())行。