我正在尝试使用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'];
}
答案 0 :(得分:1)
如果未设置$_POST['submit']
,或者已设置== 0
,并且您的交换机将尝试匹配与false
等效的值,并且如果$_POST['cat_name']
也未匹配设置后,isset
调用将返回false
,然后它将与switch表达式的值匹配。这样,添加类别的代码就会被调用。
要解决此问题,请在switch语句周围添加if (isset($_POST['submit']) && $_POST['submit'] == 1)
。