如何使用自己的管理面板编辑特定的表记录?

时间:2016-05-23 07:26:40

标签: php mysqli sql-update edit self-modifying

我从废话中简化了我的代码,因此我们可以更轻松地找到问题。

我有一个包含db记录的表。我可以插入新的,删除现有的,但不知怎的,我无法修改它们。

当我单击“编辑”按钮时,会出现一个好的按钮,但是当我编辑它并单击“更改”按钮时,总是最后一行会随着我尝试进行修改而改变。

对不起我的英文,我写了一个例子:

犬 猫 汽车 椅

如果我编辑猫,主席会改变......非常令人沮丧:D

这是我的代码:

<table>
<tr>
  <th>ID</th>
  <th>Title</th>
  <th>Edit</th>
  <th>Delete</th>
</tr>

<?php 
include("connect.php");

$get_cats = "SELECT * FROM categories";
$run_cats = mysqli_query($con, $get_cats);

while ($row_cats = mysqli_fetch_array($run_cats)) {
  $cat_id     = $row_cats['cat_id'];
  $cat_title  = $row_cats['cat_title'];
?>
  <tr>
    <td><?php echo $cat_id; ?></td>
    <td><?php echo $cat_title; ?></td>
    <td><a href="index.php?manage_cats&edit_cat=<?php echo $cat_id; ?>">Edit</a></td>
    <td><a href="index.php?manage_cats&delete_cat=<?php echo $cat_id; ?>">Delete</a></td>
  </tr>
<?php } ?> <!-- end while -->

  <tr>
    <td>Insert New Category</td>
    <td colspan="2"><input type="text" name="insert_cat_title" /></td>
    <td><input type="submit" name="insert_cat" value="Insert"></td>
  </tr>

  <?php
  if(isset($_GET['edit_cat'])) {
    $edit_id     = $_GET['edit_cat'];
    $get_cat     = "SELECT * FROM categories WHERE cat_id = '$edit_id'";
    $run_cat_new = mysqli_query($con, $get_cat);

    while ($row_cat = mysqli_fetch_array($run_cat_new)) {
      $cat_id    = $row_cat['cat_id'];
      $cat_title = $row_cat['cat_title'];
  ?>
      <tr>
        <td>Change Category Name</td>
        <td colspan="2"><input type="text" name="update_cat_title" value="<?php echo $cat_title; ?>"/></td>
        <td><input type="submit" name="update_cat" value="Change"></td>
      </tr>
  <?php } } ?>

</table>
</form>

<?php 

// Insert Category
if(isset($_POST['insert_cat'])) {
$cat_title = $_POST['insert_cat_title'];

if($cat_title == '') {
  echo "<script>alert('Please insert Category Name')</script>";
  echo "<script>window.open('index.php?manage_cats', '_self')</script>";
}
else {
$insert_cat = "INSERT INTO categories (cat_title) VALUES ('$cat_title')";
$run_cat    = mysqli_query($con, $insert_cat);
echo "<script>window.open('index.php?manage_cats', '_self')</script>";
}
}

// Delete Category
if(isset($_GET['delete_cat'])) {
$delete_id  = $_GET['delete_cat'];
$delete_cat = "DELETE FROM categories WHERE cat_id = '$delete_id'";
$run_delete = mysqli_query($con, $delete_cat);
echo "<script>window.open('index.php?manage_cats', '_self')</script>";
}

// Edit Category
if(isset($_POST['update_cat'])) {
$cat_title_new  = $_POST['update_cat_title'];

if($cat_title == '') {
  echo "<script>alert('Please insert Category Name')</script>";
  echo "<script>window.open('index.php?manage_cats&edit_cat', '_self')</script>";
}
else {
  $update_cat     = "UPDATE categories SET cat_title = '$cat_title_new' WHERE cat_id = '$cat_id'";
  $run_update     = mysqli_query($con, $update_cat);
  echo "<script>window.open('index.php?manage_cats', '_self')</script>";
}
}
?>

2 个答案:

答案 0 :(得分:0)

使用

添加隐藏字段

<input type="hidden" name="update_cat_id" value="<?php echo $cat_id; ?>"/>

<input type="text" name="update_cat_title" value="<?php echo $cat_title; ?>"/>

并设置条件如下:

$cat_id = $_POST['update_cat_id'];
$update_cat     = "UPDATE categories SET cat_title = '$cat_title_new' WHERE cat_id = '$cat_id'";

答案 1 :(得分:0)

您的问题在于具有同一个名称属性的输入。                                             

将为您提供类似

的查询字符串

http.example.com/index.php?test=1&test=2&test=3&test=4

在您的网址中,但在php var_dump($ _ GET)中只返回此

array(1){[&#34; test&#34;] =&gt;字符串(1)&#34; 4&#34; }

你只需要四次覆盖$ _GET [&#39; test&#39;]的值,然后取最后一个值。

可能的溶解:

time

然后var_dump($ _ GET)给你这个:

<form method="get">
  <input type="text" name="test[]" value="1" />
  <input type="text" name="test[]" value="2" />
  <input type="text" name="test[]" value="3" />
  <input type="text" name="test[]" value="4" />
  <input type="submit" />
</form>

更温和的解决方案是打印像普通表格单元格(没有输入)和jquery的类别,通过点击按钮,链接等将单元格内容转换为输入

&#13;
&#13;
array(1) { 
  ["test"]=> array(4) {
    [0]=> string(1) "1"
    [1]=> string(1) "2"
    [2]=> string(1) "3"
    [3]=> string(1) "4"
} }
&#13;
&#13;
&#13;