我不太熟悉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);
}
?>
`
答案 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_name
和pass_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';'。使用此方法,您可以通过重复此过程来构建整个查询。这是一个更加面向对象的方式,它将为您提供良好的基础,以扩展您的课程以融入这些设计模式。