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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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!
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.