切换脚本后,数据库不会保持更新

时间:2016-03-19 02:30:30

标签: php mysql

我正在尝试更新此数据库,并且我已在此脚本中验证更新已完成,并且$ nw和$ p变量是正确的。

<?php
session_start();
$num = (int) $_SESSION["cart"];
$cart = $num + 1;
$_SESSION["cart"] = (string) $cart;
$nme = $_POST['nameofitem'];
$pst = $_SESSION["user"];
$db = new mysqli('localhost', 'spj916', "cs4501", 'spj916');
$query = "select * from Items where Items.Id = '$nme'";
$result = $db->query($query) or die ($db->error);
$item = $result->fetch_array();
$nw = $item[5] - 1;
$p = (int) $pst;
echo $p;
$query3 = "update Items set Quantity = '$nw' where Id = '$p'";
$db->query($query3) or die ("Invalid insert " . $db->error);
$query2 = "insert into Bought (Name, Cost, BuyerID) values ('$item[1]', '$item[4]', '$pst')";
$db->query($query2) or die ("Invalid insert " . $db->error);
header("Location: store.php");
?>

但是,当它重定向到此脚本时,它会回显信息,就像它没有更新一样。有什么问题?

<?php
session_start();
$db = new mysqli('localhost', 'spj916', "cs4501", 'spj916');
$user = $_SESSION["user"];
$pw = $_SESSION["pw"];
# determines number of items in cart to display
if (!isset($_SESSION["category"]))
   $_SESSION["category"] = "Book";
if (isset($_POST["Ccategory"])) {
   $cat = $_POST["Ccategory"];
   $_SESSION["category"] = $cat;
}
if (!isset($_SESSION["cart"]))
   $_SESSION["cart"] = "0";
$cart = $_SESSION["cart"];
?>
<!DOCTYPE html>
<html>
<?php # setting up table with items to buy ?>
<table border = "1" border-spacing = "5px" >
<caption><h2> UVA Bookstore 2.0</h2>
<p align=right> Items in cart: <?php echo $cart?> </p> <br />
     <b><i>Welcome to the new and improved bookstore with a better selection than ever</i></b>
     <br/><br/>
</caption>
<tr align = "center">
  <th>Item</th>
  <th>Description</th>
  <th>Price</th>
  <th>Number left</th>
  <th>Buy</th>
</tr>
<?php
  $category = $_SESSION["category"];
  $query = "select * from Items where Items.Category = '$category'";
  $result = $db->query($query) or die ($db->error);
  $rows = $result->num_rows;
     for ($i = 0; $i < $rows; $i++)
     {
    $row = $result->fetch_array();
?>
    <form action="addtocart.php"
              method="POST">
         <tr align = "center">
         <td>
<?php 
         echo $row[1];
?>
         </td>
         <td> <?php echo $row[3];?> </td>
     <td> <?php echo $row[4];?> </td>
     <td> <?php echo $row[5];?> </td>
     <?php # sets up add to cart button that adds item to cart ?>
         <td> <input type = "hidden" name ='nameofitem' 
                           value= "<?php echo $row[0]?>"> 

              <input type='submit' value='Add to Cart'> </input> </td>
         </tr>
     </form>
<?php
     }
# form to check out and go to summary page ?>
<form action = "store.php"
      method = "POST">
<tr align = "center"> <td>
<select name = "Ccategory">
  <option value = "Book">Books</option>
  <option value = "Music">Music</option>
  <option value = "Car">Cars</option>
</select>
<input type = "hidden" name = "cat"> </td>
<td> <input type = "submit" value = "Switch Category"> </td>
</form>
<form action="summary.php" 
      method="POST">
     <td> <input type = "submit" value = "Check out"> </td> </tr>
</table><br/>
</form>
</html>

1 个答案:

答案 0 :(得分:0)

您是否尝试过更改

$query3 = "update Items set Quantity = '$nw' where Id = '$p'";

$query3 = "update Items set Quantity = '$nw' where Id = $p";

确定UPDATE是否有效的最佳方法是将其替换为包含相同SELECT子句的WHERE。通过这种方式,您可以查看在运行原始查询时将更改哪些行。

否则,似乎您的当前事务中的更改从未提交。这是唯一一个对数据库更新有问题的脚本吗?有关更多信息,请参阅PHP手册:

//mysqli::commit -- mysqli_commit — Commits the current transaction
bool mysqli::commit ([ int $flags [, string $name ]] )

当您完成所有具有依赖关系的更新(或对于那些具有依赖关系的更新)时,应该发出提交,但是,您并不总是必须提交,具体取决于服务器的配置。此外,您的脚本看起来像其他人提到的SQL注入漏洞。最好使用准备好的陈述或清理你的输入。