Evo jedne male, ali korisne funkcije koju sam napisao pre neki dan kad mi je zatrebala, pa reko da je podelim, mozda i vama zatreba:
<?php
/**
* Prepares and execute a sql statement. If id is provided, execute UPDATE,
* if not execute INSERT, if type setted as del execute DELETE.
*
* @usage string sql_magic( string $table, array $data [, string $type] )
* @type options [null, del]
* @example:
* $data = array('id'=>'1','name'=>'Some name');
* $table = 'users';
* if(sql_magic($table,$data)) echo 'data sucessfully updated';
*
* @author "Boban Karišik" <karisikb@gmail.com>
*/
function sql_magic($table, $data, $type = null) {
if($type == 'del') {
foreach($data as $key=>$value) {
$qstr[] = "`".$key."` = '".mysql_real_escape_string($value)."'";
}
$qstr = @implode(" AND ",$qstr);
return (mysql_query("DELETE FROM `".$table."` WHERE ".$qstr)) ? true : false;
} else {
foreach($data as $key=>$value) {
($key == 'id') ? $str = "`".$key."`='".mysql_real_escape_string($value)."'" : $qstr[] = "`".$key."` = '".mysql_real_escape_string($value)."'";
}
$qstr = @implode(",",$qstr);
if(!empty($str)) {
return (mysql_query("UPDATE `".$table."` SET ".$qstr." WHERE ".$str)) ? true : false;
} else {
return (mysql_query("INSERT INTO `".$table."` SET ".$qstr)) ? true : false;
}
}
}
?>
Evo i malog objasnjenja.
Recimo imate tabelu u bazi koja se zove users i ona ima sledeca polja:
id, uname, fname, lname, gender
Napravili ste formu sa kojom neko treba da se registruje i u njoj imate polja fname, uname i lname
znaci imate sada stvoren neki niz u post variabli
$_POST['fname'] = 'First Name';
$_POST['lname'] = 'Last Name';
$_POST['uname'] = 'test';
sta vi radite, pozovete f-ju sql_magic('users',$POST); - ona ce proveriti i ocistiti pokusaje sql injection-a i izvrsiti insert,
INSERT INTO `users` SET `fname`='$_POST['fname']' ...
da ste u kom slucaju imali i setovani $_POST['id'] f-ju bi izvrsila update po datom id-u (WHERE `id`='$_POST['id']')
Da li ce to biti $_POST ili neki drugi niz, to je na vama, $_POST obicno sadrzi i submit dugme, pa ako njega prosledite sigurno ce biti vracen false, jer submit kolonu nemate u tabeli...
recimo da imate niz ovako neki
$data['fname'] = 'First Name';
$data['uname'] = 'test';
sql_magic('users',$data,'del');
izvrsice se sledeci upid:
DELETE FROM `users` WHERE `fname`='First Name' AND `uname`='test';
Nadam se da je sada malo jasnije (ako nije bilo jasno)...
POzdrav.
|