首页 > 解决方案 > PHP:使用外键更新数据

问题描述

我目前正在更新项目列表,它包含一些外键。我有 4 张桌子,它们是:

项目 ( itemId , itemName)

员工(员工编号、员工姓名、员工密码、员工电子邮件、员工类型ID*)

Item_Staff( itemstaffid ,itemid*,staffid*,itemqtty,expireddate,instockdate,itemstatus)

人员类型(人员类型id, stypeName

我的问题是我可以在表单中编辑项目详细信息,但即使仍重定向到显示页面,项目详细信息也不会更新。它没有任何错误,所以我想知道逻辑错误在哪里。到目前为止,这些是我尝试过的代码。

pedit-item.php

$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
$itemstaffid=$_GET['itemstaffid'];    
$qry=mysqli_query($conn,"SELECT * from item_staff d INNER JOIN item i ON d.itemID=i.itemID INNER JOIN staff s ON d.staffID=s.staffID");
while ($res=mysqli_fetch_array($qry))
  {
    $itemstaffid = $_POST['itemStaffId'];
    $itemid=$res['itemid'];
    $staffid=$res['staffid'];
    $itemqtty=$res['itemqtty'];
    $expireddate=$res['expireddate'];
    $instockdate=$res['instockdate'];
    $itemstatus=$res['itemstatus'];
  }

if (isset($_POST['update']))
  {
    $itemstaffid=$_POST['itemstaffid'];
    $itemid = $_POST['itemid'];
    $staffid = $_POST['staffid'];
    $itemqtty=$_POST['itemqtty'];
    $expireddate=$_POST['expireddate'];
    $instockdate=$_POST['instockdate'];
    $itemstatus=$_POST['itemstatus'];

    $result = mysqli_query($conn,"UPDATE item_staff set itemstaffid='$itemstaffid',itemid='$itemid',staffid='$staffid',itemqtty='$itemqtty',expireddate='$expireddate',instockdate='$instockdate',itemstatus='$itemstatus' where 'itemstaffid'='$itemstaffid'" );
    
    if ($result)
    {
      header("location: update-item.php");
    }
    else
    {
      echo "Failed";
    }
  }

然后,我想在这里显示它。

 $sql="SELECT * from item_staff d INNER JOIN item i ON d.itemID=i.itemID INNER JOIN staff s ON d.staffID=s.staffID";
  $result=mysqli_query($conn, $sql);
  $row=mysqli_num_rows($result);
  if ($row > 0)
   {
     while ($res=mysqli_fetch_array($result))
      {
      echo '<tr>';
      echo '<td>'.$res['itemStaffId'].'</td>';
      echo '<td>'.$res['itemId'].'</td>';
      echo '<td>'.$res['staffId'].'</td>';
      echo '<td>'.$res['itemQtty'].'</td>';
      echo '<td>'.$res['expiredDate'].'</td>';
      echo '<td>'.$res['inStockDate'].'</td>';
      echo '<td>'.$res['itemstatus'].'</td>';
      echo "<td><a href= \"edit-item.php?itemStaffId=$res[itemStaffId]\"><input type='submit' value='EDIT'></a>";
      echo "<td><a href= \"delete.php?itemStaffId=$res[itemStaffId]\"><input type='submit' value='DELETE'></a>";
      echo '</tr>';
                        }
                        } 

标签: phpsql

解决方案


我认为您的变量$itemstaffid已在if块中被覆盖,因此在执行查询时,该where子句将找不到所需的记录。您应该显示更新查询以进行测试。


推荐阅读