当我单击提交按钮时,它不会更新数据库中的数据。我看了 很多时候要弄清楚的问题是什么。我认为问题不在于代码。可能是因为XAMPP。我正在使用phpstorm,并且在两个文件中都给出了数据库连接。如果您需要其他信息,请告诉我。谢谢
“这是供应商列表文件”
<table class="table-bordered table-striped table-highlight text-center">
<tr class="bg-dark text-white">
<th>Sid</th>
<th>Name</th>
<th>Contact</th>
<th>Action</th>
</tr>
<?php
$q = "SELECT * FROM supplier";
$result = mysqli_query($db, $q) or die(mysqli_error($db));
while ($row = mysqli_fetch_array($result))
{
?>
<tr>
<td data-toggle="modal" data-target="#<?php echo $row[0];?>"><?php echo $row[0]; ?></td>
<td data-toggle="modal" data-target="#<?php echo $row[0];?>"><?php echo $row[1]; ?></td>
<td data-toggle="modal" data-target="#<?php echo $row[0];?>"><?php echo $row[3]; ?></td>
<td>
<button id="action" class="btn-primary"><a href="update.php?id=<?php echo $row[0]; ?>"> update </a></button>
<button id="danger" class="btn-danger"><a href="delete.php?id=<?php echo $row[0]; ?>"> delete </a></button>
</td>
</tr>
</table>
“这是更新文件” 在第一个php标签的更新文件中,单击保存按钮将提交数据,并且应更新数据库中未发生的数据,这是主要问题。在第二个php标签中,代码实际上是正在获取数据表单数据库,并显示在texatbox中。
<?php
include ('../../../includes/connection.php');
ob_start();
if (isset($_POST['save'])){
$id = $_POST['id'];
$newName = $_POST['newname'];
$newAddress = $_POST['newaddress'];
$newContact = $_POST['newcontact'];
$q = "UPDATE supplier SET name='$newName', address='$newAddress', contact='$newContact' WHERE sid='$id' ";
$result = mysqli_query($db, $q) or die(mysqli_error($db));
header('location:viewSupplierList.php');
}
ob_end_clean();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Update</title>
<link type="text/css" rel="stylesheet" href="../../../css/menu.css">
<link type="text/css" rel="stylesheet" href="../../../css/hover.css">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" media="all">
</head>
<body>
<form class="form" method="POST" action="update.php">
<h3>Update Supplier Details</h3>
<?php
if (isset($_GET['id'])){
$id = $_GET['id'];
$q = "SELECT * FROM supplier WHERE sid='$id'";
$result1 = mysqli_query($db, $q) or die(mysqli_error($db));
$row = mysqli_fetch_array($result1);
}
?>
<label for="id">ID</label>
<input type="text" id="id" name="id" value="<?php echo $row[0];?>" disabled>
<label for="name">Name</label>
<input type="text" id="name" name="newname" value="<?php echo $row[1];?>" title="Enter at least 5 characters!" required pattern="[a-zA-Z ]{5,20}" oninvalid="this.setCustomValidity('Only alphabets are allowed!')" oninput="this.setCustomValidity('')">
<label for="address">Address</label>
<input type="text" id="address" name="newaddress" value="<?php echo $row[2];?>" title="Enter at least 10 characters!" required pattern="[a-zA-Z0-9- ]{10,100}" oninvalid="this.setCustomValidity('Only alphanumerics are allowed!')" oninput="this.setCustomValidity('')">
<label for="contact">Contact</label>
<input type="text" id="contact" name="newcontact" value="<?php echo $row[3];?>" title="Enter at least 12 number!" required pattern="[0-9-]{11,12}" oninvalid="this.setCustomValidity('Numbers with or without hyphen are allowed!')" oninput="this.setCustomValidity('')">
<input class="hvr-bubble-float-top" type="submit" name="save" value="save">
<input class="hvr-bubble-float-top" type="submit" name="cancel" value="cancel">
</form>
</body>
<script type="text/javascript" src="../../../js/menu.js" ></script>
</html>
供应商表架构
sid| name | address | contact
--------------------------------------------------
1 | Supplier A | street abc blah.. | 038157575714
2 | Supplier B | street abc blah.. | 038157575714
3 | Jhon | street abc blah.. | 038157575714
4 | Smith | street abc blah.. | 038157575714
5 | Michael | street abc blah.. | 038157575714
答案 0 :(得分:0)
所以这里的问题是,你已经禁用了ID输入。禁用字段时,不会将其发布。您更新查询接收空ID和存在不执行保存。您应该做的是使输入隐藏。
<label for="id">ID: <?php echo $row[0];?></label>
<input type="text" id="id" name="id" value="<?php echo $row[0];?>" style="display:none">
在侧没有,你真的应该使用的浏览器developper工具。发送POST / GET请求时,该请求将保存在“网络”标签中。您可以使用它在请求标头中查看提交的值,因此,您会看到id丢失了,这就是查询不起作用的原因;-)