php foreach循环编辑数据库中的错误记录

时间:2018-07-03 08:47:31

标签: php

美好的一天,

我的网站遇到了一些问题。

我有一个从数据库中提取完整表的表格。在每条记录旁边,我都有一个“编辑”和“删除”按钮(见图1)。

image 1

图片1

如果单击记录“删除我”旁边的编辑按钮,则会出现一个模式,并使用当前可用数据填充每个可编辑字段的值,然后可以编辑每个值并更新数据库。这很好。

我遇到的问题;当我选择其中一个“名称”字段与另一个“填充/大小”重复的记录之一(例如,如果我选择“填充/大小” 5)时,它总是更新并用来自以下位置的数据预先填充模式共享相同“名称”的表中的第一条记录。图2显示我单击“编辑”按钮以记录1-5。

image 2

图片2

我尝试在我的foreach循环中创建一个foreach循环,但这只是多次重复每条记录。我的代码如下。任何意见或建议将不胜感激。

<div class="card mb-3">
        <div class="card-header">
            <i class="fa fa-table"></i>Items</div>
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-bordered" id="dataTable" name="dataTable" width="100%" cellspacing="0">
                    <thead>
                    <tr>
                        <th>Name</th>
                        <th>Filling/Size</th>
                        <th>Category</th>
                        <th>Description</th>
                        <th>Price</th>
                        <th>Edit/Remove</th>
                    </tr>
                    </thead>
                    <tfoot>
                    <tr>
                        <th>Name</th>
                        <th>Filling/Size</th>
                        <th>Category</th>
                        <th>Description</th>
                        <th>Price</th>
                        <th>Edit/Remove</th>
                    </tr>
                    </tfoot>
                    <tbody>
                    <?php foreach ($result as $i => $row) { ?>
                            <tr>
                                <td><?php echo $row->name; ?></td>
                                <td><?php echo $row->filling; ?></td>
                                <td><?php echo $row->category; ?></td>
                                <td><?php echo $row->description; ?></td>
                                <td><?php echo $row->price; ?></td>
                                <td id="editRemoveButtonsCell">
                                    <button id="editButton" type="button" class="btn btn-outline-success" data-toggle="modal" data-target="#editItemModal<?php echo $row->name;?>">Edit</button>
                                    <button id="removeButton" type="button" class="btn btn-outline-danger" data-toggle="modal" data-target="#removeItemModal<?php echo $row->name;?>">Remove</button></td>
                            </tr>

                            <!-- Delete Modal -->
                            <div class="modal" id="removeItemModal<?php echo $row->name;?>">
                                <div class="modal-dialog">
                                    <form>
                                        <div class="modal-content">

                                            <!-- Modal Header -->
                                            <div class="modal-header">
                                                <h4 class="modal-title">Delete Item <?php echo $row->name?></h4>
                                                <button type="button" class="close" data-dismiss="modal">&times;</button>
                                            </div>

                                            <!-- Modal body -->
                                            <div class="modal-body">
                                                Are you sure you want to delete item <?php echo $row->name?> <?php echo $row->filling;?>? <b>This cannot be undone!</b>
                                            </div>

                                            <!-- Modal footer -->
                                            <div class="modal-footer">
                                                <input type="hidden" value="<?php echo $row->name;?>" name="deleteItemName" id="deleteItemName">
                                                <input type="hidden" value="<?php echo $row->filling;?>" name="deleteItemFilling" id="deleteItemFilling">
                                                <button type="button" class="btn btn-cancel" data-dismiss="modal">Close</button>
                                                <input type="submit" name="deleteItem" id="deleteItem" value="Delete" class="btn btn-danger" />
                                            </div>
                                        </div>
                                    </form>
                                </div>
                            </div>

                            <!-- Edit Modal -->
                            <div class="modal" id="editItemModal<?php echo $row->name;?>" name="editItemModal<?php echo $row->name;?>">
                                <div class="modal-dialog">
                                    <form>
                                        <div class="modal-content">

                                            <!-- Modal Header -->
                                            <div class="modal-header">
                                                <h4 class="modal-title">Edit Item <?php echo $row->name;?></h4>
                                                <button type="button" class="close" data-dismiss="modal">&times;</button>
                                            </div>

                                            <!-- Modal body -->
                                            <div class="modal-body">
                                                    <div class="form-group">
                                                        <label for="itemNameUpdate">Name</label>
                                                        <input type="text" class="form-control" id="itemNameUpdate" name="itemNameUpdate" placeholder="Enter Item Name" value="<?php echo $row->name;?>">
                                                        <input type="hidden" value="<?php echo $row->name;?>" name="itemNameOriginal" id="itemNameOriginal">
                                                        <input type="hidden" value="<?php echo $row->filling;?>" name="itemFillingOriginal" id="itemFillingOriginal">
                                                    </div>
                                                    <div class="form-group">
                                                        <label for="itemFillingUpdate">Filling/Size</label>
                                                        <input type="text" class="form-control" id="itemFillingUpdate" name="itemFillingUpdate" placeholder="Enter Filling/Size" value="<?php echo $row->filling;?>">
                                                    </div>
                                                    <div class="form-group">
                                                        <label for="itemCategoryUpdate">Category</label>
                                                        <select class="form-control" id="itemCategoryUpdate" name="itemCategoryUpdate">
                                                            <?php echo '<option>'.$row->category.'</option>';?>
                                                            <?php foreach($categories as $category) {echo '<option>'.$category->name.'</option>';}?>
                                                        </select>
                                                    </div>
                                                    <div class="form-group">
                                                        <label for="itemDescriptionUpdate">Description</label>
                                                        <textarea class="form-control" id="itemDescriptionUpdate" name="itemDescriptionUpdate" rows="3" placeholder="Item description (optional)"><?php echo $row->description;?></textarea>
                                                    </div>
                                                    <div class="form-group">
                                                        <label for="itemPriceUpdate">Price</label>
                                                        <input type="text" class="form-control" id="itemPriceUpdate" name="itemPriceUpdate" placeholder="Enter Price" value="<?php echo $row->price;?>">
                                                    </div>
                                            </div>

                                            <!-- Modal footer -->
                                            <div class="modal-footer">
                                                <button type="button" class="btn btn-cancel" data-dismiss="modal">Close</button>
                                                <input type="submit" name="editItem" id="editItem" value="Edit" class="btn btn-success" />
                                            </div>
                                        </div>
                                    </form>
                                </div>
                            </div>
                    <?php } ?>
                    </tbody>
                </table>
            </div>
        </div>
        <div class="card-footer small text-muted">Use the navigation bar to the left to edit the menu.</div>
    </div>
</div>

1 个答案:

答案 0 :(得分:1)

您所有的代码引用都是对$row->name的引用,我认为按名称引用代码中的任何内容都是错误的做法。您想通过每种情况的唯一标识符(通常是数字)来识别。因此,您不会产生这种歧义。

  

图2显示我单击记录1-5的“编辑”按钮。

在此问题中,您不能事件明确地标识自己的行,而无需引入恰好不同的外部数据。

您想要的是数据库表每一行的唯一标识符。

这是绝对的基本标准,可以在MySQL Dev Tutorial Here中阅读。

This SO question可能对您也有帮助。

因此您可以更新MySQL(假设这是您的数据库):

ALTER TABLE users ADD uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    ADD INDEX (uid);

(还有please see here关于哪种int类型最适合您的情况)

一旦每行都有一个唯一的标识符,则需要在代码中使用该标识符,例如:

 <input type="hidden" value="<?php echo $row->uid;?>" 
                      name="deleteItemUniqueId" id="deleteItemUniqueId">

<div class="modal" id="editItemModal<?php echo $row->uid;?>" 
                   name="editItemModal<?php echo $row->uid;?>">

并且类似地将其始终应用于您的代码库。

这将停止HTML id的任何重复,并停止在给定标识数据方面存在任何歧义的代码逻辑。