PHP VERİ LİSTELEME
$ayarlar = $db -> veriGetir("ayarlar","WHERE id= ?",array(1),"ORDER BY id ASC",1);
if($ayarlar != false){
$sitebaslik = $ayarlar[0] ['baslik'];
$siteanahtar = $ayarlar[0] ['anahtarkelime'];
$siteaciklama = $ayarlar[0] ['aciklama'];
$siteurl = $ayarlar[0] ['url'];
}
Arkadaslar php de admin paneli hazırlamaya çalışıyorum sql deki ayarlar verilerini listelemeye çalıştım fakat undefined variable hatası alıyorum verileri başka nasıl listeleyebilirim yardımcı olurmusnuz.
class db{
var $db;
function __construct()
{
try {
$this -> db = new PDO("mysql:host=localhost; dbname=admin; charset=utf8", 'root', '');
echo "+";
} catch (PDOException $error) {
echo $error -> getMessage();
exit();
}
}
/** SELECT * FROM ayarlar WHERE id=? ORDER BY id ASC LIMIT 1 */
public function veriGetir($tablo, $wherealan = "", $wherearray = [], $orderby = "ORDER BY id ASC", $limit = ""){
$this -> db -> query("SET CHARACTER SET utf8");
$sql="SELECT * FROM ".$tablo; // SELECT * FROM tablo eklendi
if(!empty($wherealan) && !empty($wherearray)){
$sql.=" ".$wherealan; /**SELECT * FROM tablo WHERE id eklendi */
if(!empty($orderby)){$sql.=" ".$orderby;}
if(!empty($limit)){$sql.=" LIMIT ".$limit;}
$start = $this-> db -> prepare($sql);
$sonuc = $start -> execute($wherearray);
$veri = $start -> fetchAll(PDO::FETCH_ASSOC);
}else {
if(!empty($orderby)){$sql.=" ".$orderby;}
if(!empty($limit)){$sql.=" LIMIT ".$limit;}
$veri = $this -> db -> query($sql,PDO::FETCH_ASSOC);
}
if ($veri != false && !empty($veri)) {
$datalar[] = array();
foreach($veri as $bilgiler){
$datalar[] = $bilgiler;
}
}else{
return false;
}
echo $sql;
}
}
Kodun function.php kısmı şu şekilde amacım sürekli sorgu kodu yazmadan basit bir halde sorguyu çekmekti `echo $sql;
yaptıgımda SELECT * FROM ayarlar WHERE id = ? ORDER BY id ASC LIMIT 1 olarak istediğim sonucu alıyorum fakat listelerken index.php title kısmına undefinded hatası alıyorum include hatası değil hata yaptıgımda hata mesajını alıyorum
print_r($veri)` yaptığımda verilerin çekildiğini görüyorum yani veriler geliyor ama listelenirken bir sorun oluşuyor ve index.php de <?=$sitebaslik;?> dediğimde veriyi getirmiyor.
undefined variable
tanımlanmamış değişken demek. Birçok ihtimal var.
Sizin veriGetir()
fonksiyonunuz mutlaka dolu bir dizi dönecek diye varsayıyorsunuz.
$ayarlar
değişkeniniz false
değildir ama belki de boş dizidir. Yani $ayarlar[0]
diye sıfırıncı index'i yoktur mesela. Böylece siz olmayan bir index altındaki baslik
değerini almaya çalışıyorsunuz.
Eğer sorun buysa bir if
ile gelen değer var mı yok mu diye inceleyebilirsiniz.
$ayarlar = $db -> veriGetir("ayarlar","WHERE id= ?",array(1),"ORDER BY id ASC",1);
if($ayarlar != false && count($ayarlar)>0){
$sitebaslik = $ayarlar[0]['baslik'];
$siteanahtar = $ayarlar[0]['anahtarkelime'];
$siteaciklama = $ayarlar[0]['aciklama'];
$siteurl = $ayarlar[0]['url'];
}
else {
echo "Boş değer döndü!";
exit();
}
Eğer sorun bu değilse, size veriGetir()
fonksiyonuntan tam olarak ne döndüğüne bakmanız gerekir. Bunu var_dump()
fonskiyonu ile yapabilirsiniz.
function getDatas($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit(); }
$ayarlar = $db -> veriGetir("ayarlar","WHERE id= ?",array(1),"ORDER BY id ASC",1);
getDatas($ayarlar);
Ekrana basılanları inceleyerek hangi veriye ulaşamadığınızı bulabilirsiniz.
DÜZENLEME
db
class'ınızı inceledim. Veritabanından dönen değerleri $datalar
değişkenine aktarıyorsunuz ama bunu return
etmiyorsunuz. Dolayısıyla $ayarlar
değişkeninize $datalar
dizinizdeki değerleri iletmemiş oluyorsunuz.
Ayrıca return etmiş olsanız bile, $datalar[] = array();
dediğiniz satırda aslında $datalar
dizinizin ilk elemanına boş dizi atıyorsunuz. Bu yüzden $ayarlar[0]
dediğinizde aslında elinizde boş bir dizi olur.
Kodunuzu aşağıdaki şekilde güncellemeyi deneyebilirsiniz:
class DB
{
private $db;
private $lastQueryString;
function __construct()
{
try { $this -> db = new PDO("mysql:host=localhost; dbname=admin; charset=utf8", 'root', ''); }
catch (PDOException $error) { echo $error -> getMessage(); exit(); }
$this->lastQueryString = "";
}
public function getLastQueryString() {
return $this->lastQueryString;
}
public function get($tableName, $where = '', $data = [], $orderby = '', $limit = ''){
$sql = "SELECT * FROM $tableName";
if(!empty($where)) $sql = "$sql WHERE $where";
if(!empty($orderby)) $sql = "$sql ORDER BY $orderby";
if(!empty($limit)) $sql = "$sql LIMIT $limit";
$this->lastQueryString = $sql;
$start = $this->db->prepare($sql);
$sonuc = $start->execute($data);
$veri = $start->fetchAll(PDO::FETCH_ASSOC);
return $veri;
}
}
Kullanırken de...
$db = new DB();
$ayarlar = $db->get('ayarlar', 'id=:id', ["id"=>1], 'id ASC', 1);
echo $db->getLastQueryString();
if(!empty($ayarlar)){
$sitebaslik = $ayarlar[0]['baslik'];
$siteanahtar = $ayarlar[0]['anahtarkelime'];
$siteaciklama = $ayarlar[0]['aciklama'];
$siteurl = $ayarlar[0]['url'];
}
Dikkat: Class adları mecburi olmasa da standart olarak büyük harfle başlar. Class adını değiştirdim. Sizinkiyle karışmaması için fonksiyon adını da veriGetir
yerine get
olarak değiştirdim.