如何更新所选产品的数据?

时间:2015-02-09 04:25:22

标签: php mysql

我的在线订购系统中有我的产品清单,我想更新所选产品的数据。当我单击编辑链接时,它会将数据库中的值发布到其他页面(编辑页面),即使我已经更改了数据,数据库也不会更新。

ADMIN.PHP(列出所有产品的页面)

<a href=addprod.php?id='.$row['ID'].'>EDIT</a>

ADDPROD.PHP(管理员可以添加/更新产品的页面)

echo'<form method="post" action="saveprod.php" class="product" style="margin-top:500px;" enctype="multipart/form-data">';
if (isset($_GET['id'])) {
include('db.php');
$id=$_GET['id'];
$result = mysql_query("SELECT * FROM products WHERE ID = $id");
echo'<input type="hidden" name="hiddenId" value="'.$id.'">
<table border="1" cellpadding="8px" width="100%">';

while($row3 = mysql_fetch_array($result)) {
$ID = $row3['ID'];
$Image = $row3['Image'];
$Product = $row3['Product'];
$Description = $row3['Description'];
$PricePack = $row3['PricePack'];
$PriceBox = $row3['PriceBox'];
$Discount = $row3['Discount'];
$Category = $row3['Category'];
}
echo'
<tr><td align="right">Image</td><td><input type="text" id="img" name="img" value="'.$Image.'"/> </td></tr>
<tr><td align="right"></td><td><input type="file" id="img" name="img" /></td </tr>
<tr><td align="right">Product</td><td><input type="text" id="prod" name="prod" value="'.$Product.'"/></td></tr>
<tr><td align="right">Description</td><td><textarea  id="desc" name="desc" style="resize:none; height:100px; width:200px; ">'.$Description.'</textarea></td></tr>
<tr><td align="right">Price Pack</td><td><input type="text"  id="pck" name="pck" value="'.$PricePack.'"/></td></tr>
<tr><td align="right">Price Box</td><td><input type="text"  id="box" name="box" value="'.$PriceBox.'"/></td></tr>
<tr><td align="right">Discount</td><td><input type="text" id="disc" name="disc" value="'.$Discount.'"/></td></tr>
<tr><td align="right">Category</td><td><input type="text" id="cat" name="cat" value="'.$Category.'"/></td></tr>
<tr><td align="right"></td><td><input type="submit" value="Save"/></a> <input type="reset" value="Clear"/></td></tr>';
}
echo' </table> </form>';

SAVEPROD.PHP

<?php
include('db.php');
$id = $_POST['ID'];
$Image = $_POST['Image'];
$Product = $_POST['Product'];
$Description = $_POST['Description'];
$PricePack = $_POST['PricePack'];
$PriceBox = $_POST['PriceBox'];
$Discount = $_POST['Discount'];
$Category = $_POST['Category'];
mysql_query("UPDATE products SET Image='$Image', Product='$Product',    Description='$Description', PricePack='$PricePack', PriceBox='$PriceBox',  Discount='$Discount', Category='$Category' WHERE ID='$id'");

header("location: admin.php");
    exit(); 
?>

2 个答案:

答案 0 :(得分:1)

在saveprod.php上,您试图获取不存在的元素的值,检查addprod.php上每个输入字段的名称,它应该与您在saveprod.php上的请求相对应< / p>

以下是您正在做的事情的示例:

ADDPROD.PHP

    <input type="text" id="img" name="img" value="'.$Image.'"/>

SAVEPROD.PHP

    $Image = $_POST['Image'];

应该是这样的:

ADDPROD.PHP

   <input type="text" id="img" name="img" value="'.$Image.'"/>

SAVEPROD.PHP

   $Image = $_POST['img'];

答案 1 :(得分:1)

注意:

  • 您的帖子数据名称不正确。
  • 确保您提供的列名,表名正确无误。对此情有独钟。
  • 您应该至少考虑mysqli_* prepared statement来阻止SQL injections

您的savepro.php应如下所示:

<?php
include('db.php');
/* CHANGED THE WAY YOU CALL THE POST DATA BASED FROM YOUR HTML FORM */
$id = $_POST['hiddenId'];
$Image = $_POST['img'];
$Product = $_POST['prod'];
$Description = $_POST['desc'];
$PricePack = $_POST['pck'];
$PriceBox = $_POST['box'];
$Discount = $_POST['disc'];
$Category = $_POST['cat'];
mysql_query("UPDATE products SET Image='$Image', Product='$Product', Description='$Description', PricePack='$PricePack', PriceBox='$PriceBox',  Discount='$Discount', Category='$Category' WHERE ID='$id'");

header("location: admin.php");
exit(); 
?>

如果你在准备好的声明中这样做,它将如下所示。因此,您不必担心SQL注入。只是一个简单的样本:

$stmt = $YourConnection->prepare("UPDATE products SET Image=?, Product=?, Description=?, PricePack=?, PriceBox=?, Discount=?, Category=? WHERE ID=?"); 

$stmt->bind_param('sssssssi', $_POST["img"], $_POST["prod"], $_POST["desc"], $_POST["pck"], $_POST["box"], $_POST["disc"], $_POST["cat"], $_POST["hiddenId"]);

$stmt->execute();