formda tutmakla ugrasmak yerine sessiona yazmayi tercih ederim sahsen. bu sekilde kendini forma yazan bir mantik standart degil. ama sessiona yazmak standart bir yontem. hem kullanicinin mudahele sansi olmadigi icin yada formdaki herhangi bir bilesenden etkilenmeyecegi icin daha saglikli
Nesneyi formda yazmamin sebebi nesne gercekten olusturulup base64_encode ve serialize islemleri basariyla gerceklesmismi görmek icindi hocam. Büyük ihtimal artik sessiona atarak gerceklestirecegim yapacagim islemleri.
<kd> sizin tam olarak ne yapmak istediginizi anlamadim ama nesne tabanli calisiyorsaniz illaki nesneleri formdan forma tasimak zorunda degilsiniz. nesneyi ifade eden bir degisken (id gibi) form araciligi ile tasinip. diger sayfada nesneyi tekrar olusturup nesne ozelliklerini okumasini saglamalisiniz. belirli ozellikleri yine formdan alabilir</kd>
Eger nesneyi formdan forma(sayfadan[index.php] sayfaya[nesneduzenle.php]) tasimazsak performans kaybi olmaz mi hocam?
Mesela asagidaki siniftan örnek vereyim.
// veritabanimizda tablomuzu olusturuyoruz.
$query = "CREATE TABLE IF NOT EXISTS stadt(
id INTEGER PRIMARY KEY auto_increment,
name varchar(100) NOT NULL,
slug varchar(100) NOT NULL,
ecount bigint(20),
b_fk bigint(20)
);";
Db::execute($query);
// Stadt sinifindan $stadt diye bir nesne olusturuyoruz.
// Stadt sinifinin yapisini asagida verdim.
$stadt = Stadt::create(array('id'=>'','name'=>'Stuttgart','slug'=>'stuttgart','ecount'=> 0,'b_fk'=> 1));
// ayni sayfada isek
$stadt->setName('Karlsruhe');
$stadt->update();
// dedigimiz zaman veritabaninda gerekli islemler gerceklesmis oluyor.Eger ayni sayfada isek bu islemi rahatlikla yapabiliriz. Ama islemi baska sayfada yapacaksak, ya daha önce yaptigim gibi base64_encode(serialize($stadt)) seklinde nesneyi serialize edip tasimamiz gerekiyor, yada sizin dediginiz gibi session'a atip tasimam gerekiyor. session Server Side oldugu icin serveri
daha fazla sisirmez mi? Kafama takilan noktalardan birisi bu,
Yada diger türlü yapmayi denersem, yani nesnenin id'sini gönderip, gönderdigim sayfada nesneyi güncellemek istersem, bu sefer
$yeni_nesne = Stadt::getById($_REQUEST['id']);
$yeni_nesne->setName('Karlsruhe');
$yeni_nesne->update();Eger nesneyi göndermis olsaydim getById(); fonksiyonunu kullanmam gerekmeyecekti. Direk $nesne->setName('deger'); $nesne->update() diyecektim. getById() kullanmam, sayfa basi bir sorgu daha demek oluyor. Veritabani dogru bisekilde olusturulmussa bir sorgudan cok fazla bir performans kaybi olmaz heleki joinsiz sade bir sorgudan hic olmaz..
Soruyu sormamin nedeni nesnelerin sayfadan sayfaya en mantikli sekilde nasil tasinacagini ögrenmek idi. Eger bir sayfada 100 tane nesne olusturursam ve bu nesneleri session'a atarsam sunucuyu sisirmis olmaz miyim? eger sunucu session'a cok fazla deger atilmasi yüzünden sisirilmis olursa artik sayfada nesne olusturmak yerine direk id'ler üzerinden islem yapacagim.
umarim ne demek istedigimi anlatabilmisimdir, cok karisik yazmamisimdir.
<?php
class CRUD_Stadt{
protected $id;
protected $name;
protected $slug;
protected $ecount;
protected $b_fk;
//GETTER
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function getslug() {
return $this->slug;
}
public function getEcount() {
return $this->ecount;
}
public function getB_fk() {
return $this->b_fk;
}
//SETTER
public function setName($x) {
$this->name = $x;
}
public function setslug($x) {
$this->slug = $x;
}
public function setEcount($x) {
$this->ecount = $x;
}
public function setB_fk($x) {
if(is_object($x)){
$this->b_fk = $x->getId();
} else {
$this->b_fk = $x;
}
}
//CONSTRUCT
function __construct($dic) {
$this->id = $dic['id'];
$this->name = $dic['name'];
$this->slug = $dic['slug'];
$this->ecount = $dic['ecount'];
$this->b_fk = $dic['b_fk'];
}
//CREATE
public static function create($dic) {
if(is_object($dic['b_fk'])){
$dic['b_fk'] = $dic['b_fk']->getId();
}
$sql = "INSERT INTO stadt (id, name, slug, ecount,b_fk) VALUES(:id, :name, :slug, :ecount, :b_fk)";
$data = array ('id' => $dic['id'], 'name' => $dic['name'], 'slug' => $dic['slug'], 'ecount' => $dic['ecount'], 'b_fk' => $dic['b_fk']);
Db :: execute($sql, $data);
$dic['id'] = DB :: getLastInsertId('stadt');
return new Stadt($dic);
}
//READ
public static function getById($id) {
$id = intval($id);
$id = str_replace("-", "", $id);
$sql = "SELECT id, name, slug, ecount, b_fk FROM stadt WHERE id = ?";
$row = Db :: getRow($sql, $id);
return new Stadt($row);
}
//GETPAGE
public static function getPage($page,$count) {
$page = str_replace("-", "", $page);
$count = str_replace("-", "", $count);
$page = intval($page);
$count = intval($count);
$start = $page * $count;
$sql = "SELECT id, name, slug, ecount, b_fk from stadt ORDER BY slug ASC LIMIT $start , $count";
$data = array('start' => $start, 'count' => $count);
$rows = Db :: getResult($sql,$data);
foreach($rows as $row){
$results[] = new Stadt($row);
}
return $results;
}
//GETALL
public static function getAll(){
$sql = "SELECT id, name, slug, ecount, b_fk FROM stadt ORDER BY slug ASC";
$rows = Db :: getResult($sql);
$results = array();
foreach($rows as $row){
$results[] = new Stadt($row);
}
return $results;
}
//READ
public function getStaedteByBundeslandId($id) {
$id = intval($id);
$id = str_replace("-", "", $id);
$sql = "SELECT id, name, slug, ecount, b_fk FROM stadt WHERE b_fk = ?";
$row = Db :: getResult($sql, $id);
return $row;
}
//UPDATE
public function update() {
$sql = "UPDATE stadt SET name = :name, slug = :slug, ecount = :ecount, b_fk = :b_fk WHERE id = :id";
$data = array ('name' => $this->name, 'slug' => $this->slug, 'ecount' => $this->ecount, 'b_fk' => $this->b_fk, 'id' => $this->id);
return DB :: execute($sql, $data);
}
//DELETE
public function delete() {
$sql = "DELETE FROM stadt WHERE id = :id";
$data = array('id' => $this->id);
return DB :: execute($sql, $data);
}
//DELETEBYID
public static function deleteById($id) {
$id = intval($id);
$id = str_replace("-", "", $id);
$sql = "DELETE FROM stadt WHERE id = :id";
$data = array('id' => $id);
return DB :: execute($sql, $data);
}
}
?>