PDA

View Full Version : راهنمایی در مورد کامل کردن کلاس mysqli



majid1605
دوشنبه 04 شهریور 1392, 19:08 عصر
سلام

دوستان لطف می کنند یه نگاهی به کد زیر بندازن ایرادش چیه نمیشه با پایگاه داده ارتباط برقرار کرد.




<?php

require("config.php");
class gdg_DB {

private $DB_HostName ;
private $DB_Name ;
private $DB_UserName ;
private $DB_Pass ;
private $ConnectionResult ;



public function __construct()
{
if($DB_SERVER = null || $DB_USER = null || $DB_DATABASE = null)
die ('Cannot select database');

else
{
$this->DB_HostName = $DB_SERVER;
$this->DB_Name = $DB_DATABASE ;
$this->DB_UserName = $DB_USER ;
$this->DB_Pass = $DB_PASSW ;

$this->Connect();

}



}

private function Connect()
{
$this->ConnectionResult = new mysqli($this->DB_HostName , $this->DB_UserName , $this->DB_Pass , $this->DB_Name);
if(!$this->ConnectionResult)
{
echo"Unable to connect to the database. Error number: ".mysqli_connect_error();


}
else
{
//echo 'Connected Successfully';
// mysqli_select_db($this->ConnectionResult ,"gdg");
return $this->ConnectionResult ;
}

}

/* private function Select_DB()
{
mysqli_select_db($this->ConnectionResult ,$this->DB_Name);
}*/


/* public function __destruct()
{
$this->disconnect();

}*/

public function Select()
{


}

public function Update()
{

}

public function Insert()

{




$sql = "INSERT INTO post (post_id,post_author,post_date,post_edit_date,
post_title,post_content,post_name,post_url,post_ch ange,post_visits,post_attach )
VALUES ( 14, '3', '4', 'H','5',1, '3', '4', 'H','5','88')";

$this->SqlQuery($sql);

// return $result;
}

public function Delete()
{

}

public function Disconnect()
{
mysqli_close($this->ConnectionResult);
$this->ConnectionResult = null;
}

private function SqlQuery($sql)
{
$return_result=$this->ConnectionResult->query($sql);

if ($return_result)
{
return $return_result;
}
else
{
$this->Error($sql);
}
}

private function Error($sql)
{
echo($this->ConnectionResult->error) . '<br>';
die('error: ' . $sql);
}
}
?>


مشکل اینه تابع کانکت به متغیر پسورد ایراد می گیره .
رشته خالی که میزارم به تابع mysqli_select_db ایراد می گیره
ولی مشخصات دیتابیس رو مستقیم تووی تابع کانکت وارد می کنم مشکل حل میشه به شرطی که اسم پایگاه داده رو هم همونجا وارد کنم .
تابع insert رو واسه چک کردن اونجوری نوشتم .

یه سوال دیگه
یکی از دوستان میشه بگید چطور میشه تابع insert رو جوری نوشت که برای همه جداول قابل استفاده باشه

ظاهراً این تابع اینکار رو انجام میده ولی من چیزی متوجه نشدم اگه توضیح بدید ممنون میشم .
کلا اولین برنامه ایی که با php می خوام نویسم .



public function insert_data($table, $insert_values)
{
foreach ($insert_values as $key => $value)
{
$keys[] = $key;
$insertvalues[]='\'' . $value . '\'';
}

$keys =implode(',', $keys);

// Sanitizing the data...
$insertvalues=(implode(',', $insertvalues));

$sql ="INSERT INTO $table ($keys) VALUES ($insertvalues)";

$result=$this->mySql->query($sql);
}

AliRezaPro
دوشنبه 04 شهریور 1392, 22:17 عصر
مشکل اینه تابع کانکت به متغیر پسورد ایراد می گیره .
رشته خالی که میزارم به تابع mysqli_select_db ایراد می گیره
ولی مشخصات دیتابیس رو مستقیم تووی تابع کانکت وارد می کنم مشکل حل میشه به شرطی که اسم پایگاه داده رو هم همونجا وارد کنم .
تابع insert رو واسه چک کردن اونجوری نوشتم
متن ارور رو بفرمایید ؟
---
کد ها بسیار واضح هستند , کدام قسمت ها رو متوجه نمیشید ؟

majid1605
دوشنبه 04 شهریور 1392, 23:57 عصر
No database selectederror: INSERT INTO post (post_id,post_author,post_date,post_edit_date, post_title,post_content,post_name,post_url,post_ch ange,post_visits,post_attach ) VALUES ( 14, '3', '4', 'H','5',1, '3', '4', 'H','5','88')

خطای متغیر پسورد
Notice: Undefined variable: DB_PASSW in C:\wamp\www\manage\database.php on line 25
در صورتی که متغیر تعریف شده

اینم محتویات فایل کانفیگ



//database server
$DB_SERVER = "localhost" ;

//database login name
$DB_USER = "root" ;
//database login password
$DB_PASSW = "" ;

//database name
$DB_DATABASE = "gdg" ;




حتی وقتی آدرس سرور و یا نام دیتابیس رو اشتباه تووی کانفیگ میزارم همین پیغام ها رو میده:متعجب:

در مورد یه تیکه کد برای من گیج کننده است یعنی از وقتی شروع کردم به یادگیری php وقتی کدهای php رو می بینم برام گیج کننده است شاید دلیلش کار کردن با ++C باشه چون اونجا با یه نگاه به تعریف اولیه میفهمیم تووی یه متغیر چه چیزی ریخته میشه ولی php نه حتی بعضی موقع ها نمیدونیم کجا یه متغیر اولین بار تعریف شده .به هر حال زحمت توضیح اون یه تیکه کد رو بکشید ممنون میشم


public function insert_data($table, $insert_values)
{
foreach ($insert_values as $key => $value)
{
$keys[] = $key;
$insertvalues[]='\'' . $value . '\'';
}

AliRezaPro
سه شنبه 05 شهریور 1392, 07:50 صبح
public function __construct()
{
require_once("config.php");
فایل را داخل کانستراکتور ضمیمه کنید تست کنید
ببینید ورودی اون تاع بصورت آرایه است با ایندکس . مقداری که تو پارامتر پاس میده بصورت اسم است , $insert_values رو به این صورت استفاده میکنه

insert_data("tblname",array('fieldName'=>'value1','fieldName'=>'value2'));
بعد با تابع implode کل فیلدها را به این صورت در میاره تا بتونه دستو insert خودش رو کامل کنه

fieldName1,fieldName2
و مقادیر رو هم همینطور

majid1605
سه شنبه 05 شهریور 1392, 09:35 صبح
خطای پسورد حذف شد ولی خطای دیتابیس هنوز باقی

یعنی ورودی دوم رو من باید یه آرایه بدم و باتوجه به جدول post میشه این


$mypost = array('post_id'=> '1','post_author' => 'majid',...);

یه سوال تابعی تووی mysqli هستش که بشه با دادن اسم جدول نام فیلدها رو بهمون بده یا باید از دستورات sql برای اینکار استفاده کنیم ؟

majid1605
سه شنبه 05 شهریور 1392, 19:43 عصر
دوستان نظری در این مورد ندارن

majid1605
پنج شنبه 07 شهریور 1392, 00:51 صبح
دوستان من این کلاس رو تقریبا کامل کردم به جزء تابع select ولی یه مشکل اساسی همون خطایی که بالا گفتم رو میده
مثلا برای insert
No database selectederror: INSERT INTO

یه چیز دیگه که می خوام بدونم از لحاظ امنیتی چه ایراداتی داره.قطعا زیاد هستند .




<?php

//require("config.php");
class gdg_DB {

private $DB_HostName ;
private $DB_Name ;
private $DB_UserName ;
private $DB_Pass ;
private $ConnectionResult ;



public function __construct()
{
require_once("config.php");
if($DB_SERVER = null || $DB_USER = null || $DB_DATABASE = null)
die ('Cannot select database');

else
{
$this->DB_HostName = $DB_SERVER;
$this->DB_Name = $DB_DATABASE ;
$this->DB_UserName = $DB_USER ;
$this->DB_Pass = $DB_PASSW ;

$this->Connect();

}

}

private function Connect()
{
$this->ConnectionResult = new mysqli($this->DB_HostName , $this->DB_UserName , $this->DB_Pass );
if(!$this->ConnectionResult)
{
echo"Unable to connect to the database. Error number: ".mysqli_connect_error();


}
else
{
//echo 'Connected Successfully';
// mysqli_select_db($this->ConnectionResult ,"gdg");
$this->Select_DB();
return $this->ConnectionResult ;
}

}

private function Select_DB()
{
mysqli_select_db($this->ConnectionResult ,$this->DB_Name);
}


/* public function __destruct()
{
$this->disconnect();

}*/

public function Select($Table_Name )
{


}

public function Update($Table_Name , $Field_Name , $Key_ID)
{
$Sql_Query_Update ="UPDATE $Table_Name SET $sets WHERE $Field_Name = '$Key_ID'";
$this->SqlQuery($Sql_Query_Update);
}
//Insert data
// $Data_Insert is array include field name and value
/*************************************************/
public function Insert($Table_Name ,$Data_Insert)

{
foreach($Data_Insert as $Fields_Name => $Field_Value )
{
$Array_Fields[] = $Fields_Name ;
$Array_Value[] = '\''.$Field_Value.'\'' ;
}
$Array_Fields = implode(',',$Array_Fields);
$Array_Value = implode(',' , $Array_Value);
$Sql_Query_Insert = "INSERT INTO $Table_Name ($Array_Fields) VALUES ($Array_Value)" ;
$this->SqlQuery($Sql_Query_Insert);
}

public function Delete($Table_Name ,$Field_Name , $Key_ID )
{
$Sql_Query_Delete = "DELETE FROM $Table_Name WHERE $Field_Name = '$Key_ID' " ;
$this->SqlQuery($Sql_Query_Delete);
}

public function Disconnect()
{
mysqli_close($this->ConnectionResult);
$this->ConnectionResult = null;
}
//Query insert
private function SqlQuery($sql)
{
$return_result=$this->ConnectionResult->query($sql);

if ($return_result)
{
return $return_result;
}
else
{
$this->Error($sql);
}
}
//Function Error
private function Error($sql)
{
echo($this->ConnectionResult->error) . '<br>';
die('error: ' . $sql);
}
}
?>