v2.5.2
Giriş yap

PHP VERİ LİSTELEME

jesujson
921 defa görüntülendi
    $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.

ebykdrms
931 gün önce

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.