gpt4 book ai didi

php - 如何更新表中显示的数据库记录

转载 作者:行者123 更新时间:2023-11-29 11:31:11 24 4
gpt4 key购买 nike

我在product.php中有这样的代码:

class Product {
private $conn;
private $id;
private $name;
private $description;
private $price;
private $category_id;
private $category_name;
private $created;


public function __construct($db) {
$this->conn = $db;
}

public function readAll()
{
$stmt = $this->conn->prepare('SELECT id, name, description, price, CategoryID, created FROM products');
$stmt->execute();
echo "<form action=\"./objects/product.php\" method=\"post\"> <table class=\"highlight responsive-table\">
<thead>
<tr>
<th data-field=\"empty\"> </th>
<th data-field=\"name\">Name</th>
<th data-field=\"description\">Description</th>
<th data-field=\"price\">Price</th>
<th data-field=\"category\">Category</th>
<th data-field=\"action\">Action</th>
</tr>
</thead>";

while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $result['id'];
$n = $result['name'];
$d = $result['description'];
$p = $result['price'];
$ca = $result['CategoryID'];
$c = $result['created'];

echo "<tbody>
<tr>
<td style=\"width:10%;\">

<input type=\"checkbox\" id=\"checkbox_".$id."\" name=\"checkbox[]\" value=".$id." />
<label for=\"checkbox_".$id."\"></label>

</td>



<td style=\"width:15%;\">" .$n. "</td>
<td style=\"width:30%;\">" . $d. "</td>
<td style=\"width:10%;\">" ."$".$p. "</td>
<td style=\"width:15%;\">" . $ca. "</td>
<td style=\"width:20%;\">
<a class=\"waves-effect waves-light btn modal-trigger\" href=\"#modal2\" id=\"edit_".$id."\" name=\"edit[]\"><i class=\"material-icons\">mode_edit</i></a>
<a class=\"waves-effect waves-light btn\"><i class=\"material-icons\">delete</i></a>
</td>";
}
echo "<input type=\"submit\" value=\"Delete\" name=\"delete\" id=\"delete\"/>
<input type=\"submit\" value=\"update\" name=\"update\" id=\"update\"/>
</form>";
echo "</tbody> </table>";


}

public function deleteSelected($ids) {
$query = 'DELETE FROM products WHERE id=?';

$stmt = $this->conn->prepare($query);

if (is_array($ids)) {
foreach ($ids as $id)
$stmt->execute([$id]);
}
else {
$stmt->execute([$ids]);
}
}

public function update() {
$sql2= "UPDATE `products` SET `Name` = :name, `Description` = :description, `Price` = :price, `CategoryID` = :catid WHERE `products`.`ID` = :id";
$stmt = $this->conn->prepare($sql2);
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->bindParam(':description', $_POST['description'], PDO::PARAM_STR);
$stmt->bindParam(':price', $_POST['price'], PDO::PARAM_STR);
$stmt->bindParam(':catid', $_POST['catid'], PDO::PARAM_INT);

$stmt->bindParam(':id', $_POST['id'], PDO::PARAM_INT);
$stmt->execute();
}

}
if($_SERVER['REQUEST_METHOD'] == 'POST'){

if ( isset( $_POST['delete']) && !empty( $_POST['checkbox']) ) {
$checkboxArr = $_POST['checkbox'];
foreach($checkboxArr as $id)
{
$cat = new Product($conn);

$cat->deleteSelected($id);
}
}

if ( isset( $_POST['update']) && !empty( $_POST['edit']) ) {
$editArr = $_POST['edit'];

$cat = new Product($conn);

$cat->update();

}

}

index.php 中的更新按钮:

<button class="btn waves-effect waves-light" type="submit" name="update" style="float:left; margin: 5px;">
<i class="material-icons left">mode_edit</i>Update
</button>

我使用 readAll 函数在 index.php 的表中显示数据库内容。在第一列中我有复选框。页面上还有几个按钮,其中一个按钮应该打开对话框窗口,以便使用“更新”功能编辑记录。我尝试以与从数据库中删除记录相同的方式进行操作,但它不起作用。该代码有什么问题?

最佳答案

代码中唯一错误的是逻辑。从最后一个 foreach 中,我可以推断用户有一个产品列表,选中一些复选框,然后在出现弹出窗口以更新产品时单击 update 按钮。我倾向于认为弹出窗口一次只包含一种产品的字段,而不是用户检查的所有产品的字段。

您可能应该为每个产品放置一个更新按钮,这样当用户单击它时,他们就会知道哪些产品将被更新。此外,当单击该按钮时,弹出窗口可以填充要更新的现有数据。

在我建议的场景中,您不需要最后一个 foreach,因为您只会更新一个产品。

结论错误出现在 HTML 以及发送要更新的产品的数据的方式中,而不是出现在显示的 PHP 代码中。

关于php - 如何更新表中显示的数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com