PDA

View Full Version : سوال: چه طور تعداد فیلدهای یه تیبل رو به ابجکت بفهمونم؟؟



kafshduzak
یک شنبه 04 دی 1390, 10:43 صبح
سلام دوستان
یه سوال داشتم در مورد شی گرایی و آبجکت نویسی
من میخوام یه ابجکت تعریف کنم که اطلاعات رو در قالب یه آرایه دریافت کنه و ببره بریزه تو جدول مورد نظری که بهش معرفی میشه.حالا تنها مشکل من اینه که تعداد فیلد های دو تا جدول ممکن متفاوت باشه.
کدی رو هم خودم نوشتم میزارم اینجا ممنون میشم راهنماییم کنید




$form = array(0=>null,1=> $_POST['name'],2=>$_POST['email'],3=>$_POST['password'],4=>time());
mysql_connect("localhost","root","");
mysql_select_db("elebas");
mysql_set_charset("UTF8");
function insert($form){
mysql_query("INSERT INTO users
VALUES('".$form[0]."',
'".$form[1]."',
'".$form[2]."',
'".$form[3]."',
'".$form[4]."'
)");








من اول ورمیدارم اطلاعات دریافتی از فرم رو میریزم تو یه آرایه و بعد میام تو تابع اینزرت اون ارایه رو وارد میکنم.
اما مشکل اینجاست که دستورات اینزرت ثابت هستن واسه همین نمیتونم بهش بفهمونم که این تیبل دو تا فیل داره اون یکی سه تا فیل داره ؟؟
امیدوارم منظورم رو درست رسونده باشم
ممنون میشم راهنماییم کنید.

kafshduzak
یک شنبه 04 دی 1390, 18:37 عصر
واقعا ممنونم ا این همه توجه و جواب و کمک به آدم واقعا ممنونم.

امیـرحسین
یک شنبه 04 دی 1390, 19:43 عصر
اون مدل آرایه به درد نمیخوره باید Associative بدی یعنی مثلا:

$form = array(
'name' => $_POST['name'],
'email' => $_POST['email'],
'password' => $_POST['password'],
'time' => time()
);
اونجوری تابع هم ساده میشه:

function insert($table, $data){
if(empty($table) || empty($data))
return false;
$fields = array();
foreach($data as $field => $value){
$value = is_null($value) ? 'NULL' : "'".mysql_real_escape_string($value)."'";
$fields[] = "$field=$value";
}
return mysql_query('INSERT INTO `$table` SET '. join(',',$fields));
}

$result = insert('users', $form);

irGeek
یک شنبه 04 دی 1390, 22:58 عصر
این تابع رو ببین
public function insertRecords( $table, $data )
{
// setup some variables for fields and values
$fields = "";
$values = "";

// populate them
foreach ($data as $f => $v)
{

$fields .= "`$f`,";
$values .= ( is_numeric( $v ) && ( intval( $v ) == $v ) ) ? $v."," : "'$v',";

}

// remove our trailing ,
$fields = substr($fields, 0, -1);
// remove our trailing ,
$values = substr($values, 0, -1);

$insert = "INSERT INTO $table ({$fields}) VALUES({$values})";
//echo $insert;
$this->executeQuery( $insert );
return true;
}
پارامتر اول اسم جدوله و پرامتر دوم یک آرایه از فیلد ها که روش عملیلت درج انجام میده.
میشه با سر و کولش ور رفت و همه کارهای دیگه مثل update و... ایجاد کرد.

irGeek
یک شنبه 04 دی 1390, 23:00 عصر
البته برای اجراش اینم لازمه:

public function executeQuery( $queryStr )
{
if( !$result = $this->connections[$this->activeConnection]->query( $queryStr ) )
{
trigger_error('Error executing query: ' . $queryStr .' - '.$this->connections[$this->activeConnection]->error, E_USER_ERROR);
}
else
{
$this->last = $result;
}

}