v2.5.2
Giriş yap

PHP VERİ LİSTELEME

jesujson
931 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.

Cevap yaz
Cevaplar (4)
ilkertuncer
951 gün önce

Merhabalar. Size kendi kodumu sunacağım. Ben bu işelmi olması gerektiği gibi ajax ile arka plandan çalıştırıyorum.
Kafanızı karıştırmasın. Oldukça basit bir şekilde anlattım.

https://github.com/ilkercvb33/php-ve-ajax-ile-veri-silme-islemi/

Bu linke tıklayarak kaynak kodlarımı görüntüleyebilir/indirebilirsiniz.

ÖNEMLİ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

README.TXT OKUMAYI UNUTMA! YOL HARİTAN O OLSUN. DİĞER SAYFALARA DAA RADME.TXT DEN YOL ÇIKARAK NE YAPMAN GEREKİYOR YAZDIM.

SANA TAVİSYEM OLDUĞU GİBİ DOSYALARI İNDİRMEN, README.TXT YE BAKARAK KENDİNE GÖRE UYARLAMAN VE ÇALIŞTIRDIKTAN SONRA KENDİ PANELİNE
ENTEGRE ETMEN

SORUN OLURSA YAZMAYI UNUTMA!

rephp7
952 gün önce

index.php de <?=$sitebaslik;?> dediğinde veriyi getirmiyor mu?

jesujson
952 gün önce

.

ebykdrms
952 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.