使用mysqli在PHP中编辑数据库

时间:2017-01-30 23:54:12

标签: php mysqli updates crud

通过创作,阅读,更新和工作方式努力从我已完成C,R& C的数据库中删除(CRUD)信息。 D但由于某种原因我无法更新。 我想做什么: 编辑分类标题 我的结果: 当我想要更改猫标题表中的编辑时,我可以让猫标题回显到一个表单,在那里可以更改然后当我尝试更改猫标题时,单击更新表单就像我想要的那样消失但猫的头衔保持不变。 我也没有收到任何查询错误 调试没有错误的代码时我应该注意什么? 有人能看到我的问题吗?

 if (isset($_GET['edit'])) {

  $cat_id = $_GET['edit'];

include "includes/update.php";

}    
     ?>

       <form action="categories.php" method="post">
        <div class="form-group">
         <label for="cat_title">Edit Category</label>

<?php 
if (isset($_GET['edit'])) {
    $cat_id = $_GET['edit'];

    $query = "SELECT * FROM categories WHERE cat_id = $cat_id ";
    $select_categories_id = mysqli_query($connection,$query);

while ($row = mysqli_fetch_assoc($select_categories_id)) {
    $cat_id = $row['cat_id'];
    $cat_title = $row['cat_title'];
    ?>
    <input value="<?php if(isset($cat_title)){echo $cat_title;} ?>" class="form-control" type="text" name="cat_title">

<?php
    }
}

if(isset($_POST['edit_category'])){
    $edit_cat_title = $_POST['cat_title'];

    $query = "UPDATE FROM categories SET cat_title = '{$edit_cat_title}' WHERE cat_id = {$cat_id} ";
    $edit_query = mysqli_query($connection,$query);
    if (!$edit_query) {
        die(mysqli_error($edit_query));
    }

}

 ?>
   </div>
 <input class="btn btn-primary" type="submit" name="edit_category" value="Edit Category">     
   </form>      

3 个答案:

答案 0 :(得分:1)

在以下行中,您遇到一个小错误:

$query = "UPDATE FROM categories SET cat_title = '{$edit_cat_title}' WHERE cat_id = {$cat_id} ";

您需要删除&#34; FROM&#34;在那里,看起来像这样:

$query = "UPDATE categories SET cat_title = '{$edit_cat_title}' WHERE cat_id = {$cat_id} ";

它应该按预期工作。

答案 1 :(得分:0)

您正在使用

调用更新查询
$query = "UPDATE FROM categories SET cat_title = '{$edit_cat_title}' WHERE cat_id = {$cat_id} ";

其中$ cat_id可能未设置, 一旦获得此值,您将使用if条件

if (isset($_GET['edit'])) {
    $cat_id = $_GET['edit'];

$ _GET [&#39;编辑&#39; ]可以为空,下一个错误是在循环中覆盖$ cat_id变量:$ cat_id = $ row [&#39; cat_id&#39;];

答案 2 :(得分:0)

 if (isset($_GET['edit'])) {
       $cat_id = $_GET['edit'];
       include "includes/update.php";
      }    
     ?>

       <form action="categories.php" method="post">
        <div class="form-group">
         <label for="cat_title">Edit Category</label>

<?php 
if (isset($_GET['edit'])) {
    $cat_id = $_GET['edit'];

}

if(isset($_POST['edit_category'])){
    $edit_cat_title = $_POST['cat_title'];

    $query = "UPDATE FROM categories SET cat_title = '{$edit_cat_title}' WHERE cat_id = {$cat_id} ";
    $edit_query = mysqli_query($connection,$query);
    if (!$edit_query) {
        die(mysqli_error($edit_query));
    }

}
  • 删除FROM,它应为UPDATE categories SET ...
  • 您发现$edit_cat_title来自POST值,但$cat_id来自GET值,但您的表单(据我所见)的action值为action = "categories.php" {1}}将包含 NO GET VARIABLES
  • 将属性enctype添加到<form>,例如:

     <form ... enctype='multipart/form-data' ... >
    

说实话,最后一点是很好的做法,但如果这就是你的POST数据没有被填充的原因我会感到惊讶。

可能的解决方案:

1)使用$_REQUEST['cat_id']并在表单中插入cat_id作为POSTed字段,因此它可以使用$_POST$_GET [或{{1}给出的变量}}]

2)将您的操作更改为goto:$_COOKIE,以便根据需要将表单提交给具有有效GET值的地址。

3)使用会话保存以前页面中的数据(例如action ="categories.php?edit=XXX")。这是我的首选方案。

附加

从问题评论中可以清楚地看到,cat_id部分永远不会是if isset($_POST['edit_category']),因此这意味着您的表单不正确 - 要么您没有名为true的表单字段,要么您的表单字段永远不会填写,或者从不与表单一起发送(也许输入位于name='edit_cateogry'表单结束标记之后?

无论如何,您的问题是您正在寻找的$ _POST值永远不会被设置。