PHP OOPs动态插入更新删除数据

时间:2014-07-04 16:09:41

标签: php mysql sql forms oop

我不太熟悉PHP中的OOP。刚从网上得到一些简单的经验教训我试图让一个类动态插入,删除更新,将数据从表单上传到数据库表......

我不确定它是否真的面向对象..任何人都可以帮我找到错误或者让它变得更好......

使用此课程......以下是一些规则或必要性:  1.表单中的字段应与数据库中的字段名称相同。  2.“提交”按钮的名称应与表格将要插入数据的表格相同。  3.表格(表格)中的任何字段都不应与数据库中的任何表格相同。(提交按钮除外)

插入使用函数INSERTDB .. 和 如果有图片上传使用IMAG ...

以下是代码:

  

db.class.php

<?php class database{
var $user,$host,$pass,$db;

public function connect($user,$host,$pass,$db){
$this->user=$user;
$this->host=$host;
$this->pass=$pass;
$this->db=$db;

$this->mysqli=new mysqli($this->user,$this->host,$this->pass,$this->db);

if ($this->mysqli->connect_error) {
    die('Error : ('. $this->mysqli->connect_errno .') '. $this->mysqli->connect_error);
}

}



function imag($path,$tb){
 define ("MAX_SIZE","400");
 $errors=0;
        $imag =$_FILES["image"]["name"];
        $j=date("Y.m.d");
        $image=$j.$imag;
 $uploadedfile = $_FILES['image']['tmp_name'];

  if ($image) 
  {
  $filename = stripslashes($_FILES['image']['name']);
        $extension =substr($image,-3);
        echo "<br>".$extension."<br>".$image;
  $extension = strtolower($extension);
 if (($extension != "jpg") && ($extension != "jpeg") 
&& ($extension != "png") && ($extension != "gif")) 
  {
echo ' Unknown Image extension ';
$errors=1;
  }
 else
{
   $size=filesize($_FILES['image']['tmp_name']);

if ($size > MAX_SIZE*1024)
{
 echo "You have exceeded the size limit";
 $errors=1;
}

if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES['image']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$uploadedfile = $_FILES['image']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else 
{
$src = imagecreatefromgif($uploadedfile);
}

list($width,$height)=getimagesize($uploadedfile);

$newwidth=800;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);

$newwidth1=150;
$newheight1=($height/$width)*$newwidth1;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);

imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,
 $width,$height);

imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1, 
$width,$height);

$filename = "../images/".$path."/". $image;
$filename1 = "../images/".$path."/s/". $image;

imagejpeg($tmp,$filename,100);
imagejpeg($tmp1,$filename1,100);

imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
}
}

//If no errors registred, print the success message

 if(!$errors) 
 {
   // mysql_query("update SQL statement ");
   $this->insertdb($tb);
  echo "Image Uploaded Successfully!";

 }

 }

function insert($tb,$field,$value){
$in= mysqli_query($this->mysqli,"INSERT INTO $tb ($field) values ($value)");
if(!$in){
die("Insert Query Failed" .mysqli_error($this->mysqli) );
}
}

function insertdb($tb){
echo $tb;
$f="";
$v="";
foreach($_POST as $key=>$value){
echo $key . " = " . $value. "<br>";
}
foreach($_POST as $key=>$value){
if(($key!==$tb)&&($key!=="image_y")){
$f=$f.mysqli_real_escape_string($this->mysqli,$key).",";
$v=$v."'".mysqli_real_escape_string($this->mysqli,$value)."',";

echo "<hr> there is no image<hr>";
}
if($key=="image_y"){
$f=$f."image,";
$v=$v."'".$_FILES['image']['name']."',";
echo "<hr> there is an image<hr>";
}
}
$f1=rtrim($f,",");
$v1=rtrim($v,",");
echo $f1 ."<br>".$v1;
$this->insert($tb,$f1,$v1);
}

function del($tb,$field,$value){

$d= mysqli_query($this->mysqli,"DELETE FROM $tb where $field = '$value' ");
if(!$d){
die("Delete Query Failed" );

}
}

function up($tb,$field,$value,$o_field,$o_value){

$u= mysqli_query($this->mysqli,"UPDATE $tb SET $field= '$value' where $o_field= '$o_value'   ");
if(!$u){
die("Update Query Failed".mysqli_error($this->mysqli) );

}
}

function show($tb,$field,$value,$condition,$ans){

$s= mysqli_query($this->mysqli,"Select * from  $tb where  $field $condition '$value'   ");
$s2=mysqli_fetch_assoc($s);
echo $s2[$ans];
if(!$s){
die("Select Query Failed".mysqli_error($this->mysqli) );

}
}


}

?>
  

process.php

<?php
include"../includes/db.class.php";

$o=new database();
$o->connect("localhost","root","","saycheese");


if(isset($_POST['category'])){

$tb="category";
$o->insertdb($tb);
}

if(isset($_POST['magzine'])){

$tb="magzine";
$o->insertdb($tb);
}
if(isset($_POST['writer'])){

$tb="writer";
$folder="wr";
$o->imag($folder,$tb);
}



if(isset($_POST['images'])){

$tb="images";
$folder="mag";
$o->imag($folder,$tb);
}






?>

`

2 个答案:

答案 0 :(得分:0)

<强>前言 你正走在正确的轨道上,但你只有一半在那里。您必须先格式化数据,然后才能向数据库插入任何内容。

这意味着,您必须将$ _POST值映射到数组$field$value,前者是数据库列,后者是您要插入的数据。

insert()方法需要3个输入。 $tb $field$value

$tb很容易成为一个字符串。 $field$value最有可能是数组,具体取决于您的表格结构。即使您的表包含单个列,仍然最好使用数组。使用数组有两种语法。第一个是[](仅在较新的php安装上支持),以及较旧但更受支持的数组()&#39;方法

解决问题 在您的代码中,您错误地使用insertdb方法,该方法仅适用于与post字段具有相同列名的表。否则,此方法将无法正常工作。相反,您应该专注于使用insert()方法,并正确映射值。

说你有一个像这样的表结构

TABLE user_info

user_name (VARCHAR(25)
pass_word VARCHAR(255)
user_id PRIMARY, AI INT(11)

正如您所看到的,要成功插入,您必须为user_namepass_word提供值,而user_id是您的主要索引,并且会自动增量。

现在,说你有这样的帖子

$username = $_POST['user'];

$password = $_POST['pass'];

了解这一点,我们必须以某种方式将此信息映射到我们的数据库。

PRESTO!我们可以像这样映射它们

$tb   = 'user_info';
$field = ['user_name','pass_word'];
$value = [$username,$password];

现在,我们拥有使用db类插入的所有先决条件。

$o->insert($tb,$field,$value);

答案 1 :(得分:0)

此刻此刻非常混乱。你需要抽象更多来真正做出这个OO。我会将连接内容粘贴到另一个文件中,然后将其转换为可调用对象。

这是什么意思?好吧,你可以通过在每个函数中返回$ this来将整个文件作为对象返回。例如,让我们看一下where函数。

//Db would hold your connection details and connect to the DB
class Query_Builder extends Db {

//Declare your instance variables here, we are just doing where for the purposes of this
protected $_where;

public function where($column, $field)
{
        //Encaps in single quotes
        $encapsField = '\'' . $field . '\'';

        $newWhere = str_replace('?', $encapsField, $column);

        $this->_where = 'WHERE ' . $newWhere;

    return $this;
}

注意:您不需要公共函数,因为它无论如何都是隐式声明的,但是总是明确声明函数被认为是一种好习惯。

此函数将返回$ this-&gt; _where设置为'WHERE id ='1';'。使用此方法,您可以通过重复此过程来构建整个查询。这是一个更加面向对象的方式,它将为您提供良好的基础,以扩展您的课程以融入这些设计模式。