自动切换案例触发

时间:2018-08-03 05:56:49

标签: php oop

我正在尝试使用OOP和AJAX进行CRUD操作,并且遇到了一个特殊的问题。 switch case statements会自动触发。我有一个main_class,其中包含CRUD的所有代码。由于我想在单独的页面中显示所有类别的列表,因此我遇到了问题。数据库的自动空白条目已进入类别表。

main_class.php

class Main_class
{

     function __construct() 
     {
        include("db_connect.php");
        $this->db=new Db_Connect;
        $this->conn=$this->db->connect();

        $this->category_name=$_POST['cat_name'];
        $this->image_name=$_POST['image'];
     }

     public function category_add()
     {
         $x=$this->conn->query('Insert into categories (name) values '."('$this->category_name')");
         echo $x;
     }

     public function upload_image()
     {
        $this->image_name=$_FILES["image"]["name"];
        $this->image_tmp=$_FILES["image"]["tmp_name"];
        $this->image_upload=time()."_".$this->image_name;
        move_uploaded_file($this->image_tmp,"product_images/".$this->image_upload);

         $x=$this->conn->query('Insert into images (name) values '."('$this->image_upload')");
         echo $x;
     }

     public function showData()
     {
       $this->result=$this->conn->query('select * from categories');
       return $this->result;
    }

     public function oop()
     {
         $this->conn->query('Insert into categories (name) values '."('oop')");
     }

}


$obj=new Main_class();
switch($_POST['submit'])
{
case isset($_POST['cat_name']):
    $obj->category_add();
    break;

case isset($_POST['img']): //File upload code with OOPS

    $obj->upload_image();
    break;

default:
     $obj->oop();//just to check

}

category_add.php

<h1>Category Add</h1>
 <form method="POST">
  <input type="text" name="cat_name" placeholder="Add Category"><br><br>
  <input type="submit" name="submit" value="category_add" id="sub">
 </form>
    <script>
    $(document).ready(function(){

        $('#sub').click(function(event){
            event.preventDefault();

            $.ajax({
                method:"POST",
                url:"main_class.php",
                data:$('form').serialize() + "&submit=submit&par2=2&par3=232"

            });

        });
    });  
    </script>

现在,当我添加另一个页面以尝试显示所有类别的列表时,问题开始出现。触发此页面时,我会收到很多错误,并且category被添加到数据库中。我发现发生这种情况是因为开关盒被自动触发,但是我不明白,如果未设置这些值,开关盒如何触发。而且,当我尝试一个类别和一个图像地添加图像时,它工作得很好。此时没有干扰发生。

category_show_all.php

<?php
include('main_class.php');

$this->obj=new Main_class;
$this->result=$this->obj->showData();

while($this->row=$this->result->fetch_assoc())
{
    $this->row['name'];
}

1 个答案:

答案 0 :(得分:1)

如果未设置$_POST['submit'],或者已设置== 0,并且您的交换机将尝试匹配与false等效的值,并且如果$_POST['cat_name']也未匹配设置后,isset调用将返回false,然后它将与switch表达式的值匹配。这样,添加类别的代码就会被调用。

要解决此问题,请在switch语句周围添加if (isset($_POST['submit']) && $_POST['submit'] == 1)