PHP ile MYSQL ilişkisini iyi bilenler içeri.

sefacix

Öğrenci
Katılım
2 Eylül 2015
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
Selamun Aleyküm ,
Php ile bir panel yazıyorum fakat tek sorunum var bunu halledemedim yardıma ihtiyacım var, kime söylediysem yapamadı sizler yardım edersiniz diye buraya konu açma isteğinde bulundum.

Konuma geçeyim.

Ben Üye paneli içerisinde arkadaş ekleme bölümü yapıyorum Arkadaş Ekleme bölümünde Ekli Olan Arkadaşların gözükmemesini istiyorum.

Mesela Arkadaslarim veritabaninda bulunan kullanicilari varsa (resim1)'deki kullanici gözükmesin.

Örnegin,
Arkadaslarim tablosunda sefa,ahmet var
kullanicilar tablomda yani listelenen tablomda sefa,ahmet,mustafa,ali var.
Ekrana mustafa ve alinin verileri yansıtılsın.

(resim4)'de mavi içine aldıgım kodda sadece en son eklenen veriyi yazdırmıyor 1 adet yazdırmıyor yani. ben hepsinin yazdırmamasını istiyorum bana yardım edebilecek varsa lütfen etsin 1 haftadır ne yaptıysam olmadı.

resim1 (LİSTE BÖLÜMÜ)
lyQG8l.png

resim2 (arkadaslarim veritabani)
RVgZq1.png

resim3 (kullanicilar veritabani)
VLQnbn.png

resim4 (Yazdığım kod satırı hata varsa düzeltin.)
kgMzmW.png



ŞİMDİDEN TEŞEKKÜR EDERİM.
 

mberatsanli

Öğrenci
Katılım
2 Eylül 2015
Mesajlar
3
Reaksiyon puanı
0
Puanları
0
Öncelikle yazılanlardan fazla bir şey anlamadım fakat bir yerde sorun gördüm en sondaki resimde mavi alan ile aldığınız satırın başında
@$bilgi diyerek yazmışsın !
ve kodlar çöp :( neden mi PHP'nin eski sürümünü kullanıyorsun şimdi ise PDO kodları ile yapmanı tavsiye ederim :)

select * from kullanicilar WHERE kullanici NOT LIKE '$kullanici' and kullanici NOT LIKE '$kullanicilar' order by rand ()
 

sefacix

Öğrenci
Katılım
2 Eylül 2015
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
Öncelikle yazılanlardan fazla bir şey anlamadım fakat bir yerde sorun gördüm en sondaki resimde mavi alan ile aldığınız satırın başında
@$bilgi diyerek yazmışsın !
ve kodlar çöp :( neden mi PHP'nin eski sürümünü kullanıyorsun şimdi ise PDO kodları ile yapmanı tavsiye ederim :)

select * from kullanicilar WHERE kullanici NOT LIKE '$kullanici' and kullanici NOT LIKE '$kullanicilar' order by rand ()
PDO için teşekkür ederim, zaten ugraşıyorum ama @$bilgi diye bilerek öyle kullandım hataları göstermesin diye.
bu arada amacım
kullanici NOT LIKE '$kullanicilar' bu bölümde 1 adet işlem görüyor fakat daha fazla işlem görmesi.
 

Champion78

Profesör
Katılım
29 Eylül 2006
Mesajlar
1,716
Reaksiyon puanı
43
Puanları
228
Konum
İstanbul
Merhaba,
Öncelikle SQL sorgusuna dizi geçtiğinde çalışıyor mu emin değilim. Dolayısıyla daha basit bir şekilde string geçmeni tavsiye ederim. $kullanicilari değişkenindeki değerleri string bir değerde birleştirmek için (değerleri ',' ile birleştiriyoruz):
$kullaniciListe = implode("','", $kullanicilari); // sonuçta şöyle bir şey olacak: ahmet','mehmet','ali

Ardından da bu yeni değişkeni o maviyle belirttiğin yerde kullanabilirsin:
kullanicilar.kullanici NOT IN ('$kullaniciListe') //baştaki ve sondaki tırnak ile birlikte eksikler tamamlanacak 'ahmet','mehmet','ali'

Daha basit bir yöntem olabilir ama aklıma ilk bu geldi :)
 
Katılım
11 Ağustos 2010
Mesajlar
5,807
Reaksiyon puanı
68
Puanları
1,228
Sosyal paylaşım tarzı bir projeye benziyor. Yukarıda denilmiş gerçi PDO şart. Hatta OOP yaklaşımı ile MVC kullanarak yapmalısın. Yeniliklere ayak uydurmak gerekir sonuçta.

Eğer login sayfalarını da yukarıdaki sorgular şeklinde gerçekleştirmişsen ve tam teşekkülü bir şekilde kullanıcıdan aldığın girdiyi filtrelemedinse sql injection kaçınılmaz :)
 

sefacix

Öğrenci
Katılım
2 Eylül 2015
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
Merhaba,
Öncelikle SQL sorgusuna dizi geçtiğinde çalışıyor mu emin değilim. Dolayısıyla daha basit bir şekilde string geçmeni tavsiye ederim. $kullanicilari değişkenindeki değerleri string bir değerde birleştirmek için (değerleri ',' ile birleştiriyoruz):
$kullaniciListe = implode("','", $kullanicilari); // sonuçta şöyle bir şey olacak: ahmet','mehmet','ali

Ardından da bu yeni değişkeni o maviyle belirttiğin yerde kullanabilirsin:
kullanicilar.kullanici NOT IN ('$kullaniciListe') //baştaki ve sondaki tırnak ile birlikte eksikler tamamlanacak 'ahmet','mehmet','ali'

Daha basit bir yöntem olabilir ama aklıma ilk bu geldi :)
Teşekkür ederim ama bu çalışmadı hata alıyorum :'(
Warning: implode(): Invalid arguments passed in C:\xampp\htdocs\panel\tablo.php on line 70
70.ci satırda $kullaniciListe = implode("','", $kullanicilari); var
benim amacım şuan veritabanından çekilen veri 1 adet olmasını istemiyorum hepsini yazdırsın istiyorum fakat while döngüsü dışında 1 adet yazdırıyor. while döngüsünün içine mysql sorgusunu koysamda işlem görmüyor. Benim istediğim şuanlık
$kullanicilari değişkeni 1 adet veri vermesin while döngüsü dışında. hepsini versin.


Sosyal paylaşım tarzı bir projeye benziyor. Yukarıda denilmiş gerçi PDO şart. Hatta OOP yaklaşımı ile MVC kullanarak yapmalısın. Yeniliklere ayak uydurmak gerekir sonuçta.

Eğer login sayfalarını da yukarıdaki sorgular şeklinde gerçekleştirmişsen ve tam teşekkülü bir şekilde kullanıcıdan aldığın girdiyi filtrelemedinse sql injection kaçınılmaz :)
Hocam pdo için araştırmama başladım inşallah onuda öğreneceğim. "OOP yaklaşımı ile MVC" Demişsin bunu ne olarak kullanabilirim.
login girişi 3 defa include içinde geçiyor fakat tam bilemiyorum sizin kadar uzman değilim. bana önerebileceginiz birşey varmı nasıl "
sql injection"'dan kaçınabilirim.
 
Katılım
11 Ağustos 2010
Mesajlar
5,807
Reaksiyon puanı
68
Puanları
1,228
Teşekkür ederim ama bu çalışmadı hata alıyorum :'(
Warning: implode(): Invalid arguments passed in C:\xampp\htdocs\panel\tablo.php on line 70
70.ci satırda $kullaniciListe = implode("','", $kullanicilari); var
benim amacım şuan veritabanından çekilen veri 1 adet olmasını istemiyorum hepsini yazdırsın istiyorum fakat while döngüsü dışında 1 adet yazdırıyor. while döngüsünün içine mysql sorgusunu koysamda işlem görmüyor. Benim istediğim şuanlık
$kullanicilari değişkeni 1 adet veri vermesin while döngüsü dışında. hepsini versin.



Hocam pdo için araştırmama başladım inşallah onuda öğreneceğim. "OOP yaklaşımı ile MVC" Demişsin bunu ne olarak kullanabilirim.
login girişi 3 defa include içinde geçiyor fakat tam bilemiyorum sizin kadar uzman değilim. bana önerebileceginiz birşey varmı nasıl "
sql injection"'dan kaçınabilirim.

pdo kullanırsan zaten sql injection'dan korunmuş olursun. OOP bir yazılım geliştirme yaklaşımıdır. Nesne mantığı referans alınarak geliştirilmiştir. Ve bir çok yönden sana getirisi olur. Mesela defalarca sql sorgu cümleleri yazmak bir çok yerde crud işlemleri defalarca yapmak yerine oop yöntemini kullanırsan veri tabanı işlemlerin için sınıflar tanımlarsın ve gerisi o sınıflardan nesneler türetmek olur. Projene ekleme, geliştirme gibi bir durum söz konusuda olursa daha rahat yapabilirsin. gibi... gibi... araştırmalarına devam et bu konuda :)

MVC ise bir yazılım geliştirme şablonudur. Yani projede front-end ve back-end kısmını belli bir düzen içinde belli kriterlere uyarak o şekilde geliştirmenizi sağlayan bir mimaridir. Proje ne kadar büyük olursa veya ne kadar büyürse de bu mimariyi kullandığınız sürece karmaşıklığa mahal vermemiş olursunuz ve daha rahat geliştirebilirsiniz. Sizden sonra gelen geliştiricilerde veya ekibe alınan geliştiriceler de bu mimariye hakim iseler hemen yapıyı çözeceklerdir.

include fonksiyonlarına da dikkat. php bir takım güvenlik önlemi almış olsa da hala local file include ve remote file include zaafiyetlerine yol açabilir doğru kullanılmaz ise.
Sorgular yukarıdaki gibi ise eminim yüzde 100 çapraz kod çalıştırma (XSS) mevcuttur.

Ayrıca ilk mesajda yazmayı unuttum ama öyle değişken isimleri kullanmanız kesinlikle doğru değildir. Orta ölçekli bir çalışma yaparsanız bu şekilde değişken isimlendirmesi kullanırsanız işin içinden çıkamazsınız. Şimdiden kendinize bu konuda bir paradigma geliştirip değişkenlerin ve fonksiyonlarında yerine getirdiği iş ile veya depoladıkları değerle ilişkili, anımsatıcı kelimeler kullanın. Ve kendize bir standart geliştiriniz. Mesela ben şu şekilde yaparım;

* İlk kelimenin bütününü küçük kullanırım.
* Değişken iki veya daha fazla kelimeden oluşur ise ilk kelimenin bütünü küçük, ondan sonra gelen kelimeleri başharfleri tek büyük. örneğin; enCokTiklanan
* İngilizcen var ise değişken isimlerinide ingilizce kullanmanı tavsiye ederim.
* İsimlendirma anımsatıcı, kapsayıcı ve yapılan iş ile bağdaştırılabilir nitelikte olsun.

Sonuç olarak;
Güvenlik kısmı için şunu söyleyebilirim. Kullanıcıdan aldığın her ama her girdiyi kesinlikle çok iyi filtrele. Zararlı bütün karakterleri filtrele ve url bootstrap kısmını iyi öğren.

İşin başındasın ama böyle bir çalışma içersine girmen çok güzel. Öğrendiklerini ancak bu şekilde pratiğe dökebilirsin ve bu şekilde kendini geliştirebilirsin mantığınıda ancak proje geliştirerek anlarsın. Hep daha fazlasını en iyisini yapma çabasına gir. Yeni metodları öğren, kendince standartların olsun.

Güvenlik bir işi öğrendikten hemen sonra ikinci basamağı oluşturur. ama eğer yapısal programlama tekniğini öğrendinse OOP tekniğini de öğren. zaten PDO veri tabanı sınıfıdır. OOP kapsar PDO. MVC ise OOP'den sonra :)

Burda yazdıklarımın birçoğu aklında olsun diye yazdım. Araştırırsın öğrenirsin, kendini hazır hissetiğinde de denersin. Yoksa burda ismi geçen yöntemleri tam anlamak için aylarını vermen gerekir. Şıp diye 1 ayda tam öğrenilecek şeyler değil. zamanla ve çalışarak.

Konu dağıldı ve uzatmışım farkıdayım. Neyse olsun :)

Hayırlı Akşamlar.
 

sefacix

Öğrenci
Katılım
2 Eylül 2015
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
pdo kullanırsan zaten sql injection'dan korunmuş olursun. OOP bir yazılım geliştirme yaklaşımıdır. Nesne mantığı referans alınarak geliştirilmiştir. Ve bir çok yönden sana getirisi olur. Mesela defalarca sql sorgu cümleleri yazmak bir çok yerde crud işlemleri defalarca yapmak yerine oop yöntemini kullanırsan veri tabanı işlemlerin için sınıflar tanımlarsın ve gerisi o sınıflardan nesneler türetmek olur. Projene ekleme, geliştirme gibi bir durum söz konusuda olursa daha rahat yapabilirsin. gibi... gibi... araştırmalarına devam et bu konuda :)

MVC ise bir yazılım geliştirme şablonudur. Yani projede front-end ve back-end kısmını belli bir düzen içinde belli kriterlere uyarak o şekilde geliştirmenizi sağlayan bir mimaridir. Proje ne kadar büyük olursa veya ne kadar büyürse de bu mimariyi kullandığınız sürece karmaşıklığa mahal vermemiş olursunuz ve daha rahat geliştirebilirsiniz. Sizden sonra gelen geliştiricilerde veya ekibe alınan geliştiriceler de bu mimariye hakim iseler hemen yapıyı çözeceklerdir.

include fonksiyonlarına da dikkat. php bir takım güvenlik önlemi almış olsa da hala local file include ve remote file include zaafiyetlerine yol açabilir doğru kullanılmaz ise.
Sorgular yukarıdaki gibi ise eminim yüzde 100 çapraz kod çalıştırma (XSS) mevcuttur.

Ayrıca ilk mesajda yazmayı unuttum ama öyle değişken isimleri kullanmanız kesinlikle doğru değildir. Orta ölçekli bir çalışma yaparsanız bu şekilde değişken isimlendirmesi kullanırsanız işin içinden çıkamazsınız. Şimdiden kendinize bu konuda bir paradigma geliştirip değişkenlerin ve fonksiyonlarında yerine getirdiği iş ile veya depoladıkları değerle ilişkili, anımsatıcı kelimeler kullanın. Ve kendize bir standart geliştiriniz. Mesela ben şu şekilde yaparım;

* İlk kelimenin bütününü küçük kullanırım.
* Değişken iki veya daha fazla kelimeden oluşur ise ilk kelimenin bütünü küçük, ondan sonra gelen kelimeleri başharfleri tek büyük. örneğin; enCokTiklanan
* İngilizcen var ise değişken isimlerinide ingilizce kullanmanı tavsiye ederim.
* İsimlendirma anımsatıcı, kapsayıcı ve yapılan iş ile bağdaştırılabilir nitelikte olsun.

Sonuç olarak;
Güvenlik kısmı için şunu söyleyebilirim. Kullanıcıdan aldığın her ama her girdiyi kesinlikle çok iyi filtrele. Zararlı bütün karakterleri filtrele ve url bootstrap kısmını iyi öğren.

İşin başındasın ama böyle bir çalışma içersine girmen çok güzel. Öğrendiklerini ancak bu şekilde pratiğe dökebilirsin ve bu şekilde kendini geliştirebilirsin mantığınıda ancak proje geliştirerek anlarsın. Hep daha fazlasını en iyisini yapma çabasına gir. Yeni metodları öğren, kendince standartların olsun.

Güvenlik bir işi öğrendikten hemen sonra ikinci basamağı oluşturur. ama eğer yapısal programlama tekniğini öğrendinse OOP tekniğini de öğren. zaten PDO veri tabanı sınıfıdır. OOP kapsar PDO. MVC ise OOP'den sonra :)

Burda yazdıklarımın birçoğu aklında olsun diye yazdım. Araştırırsın öğrenirsin, kendini hazır hissetiğinde de denersin. Yoksa burda ismi geçen yöntemleri tam anlamak için aylarını vermen gerekir. Şıp diye 1 ayda tam öğrenilecek şeyler değil. zamanla ve çalışarak.

Konu dağıldı ve uzatmışım farkıdayım. Neyse olsun :)

Hayırlı Akşamlar.
Hocam Önerileriniz için çok çok teşekkür ederim. Pdo kullanımını öğrenmeye çalışacağım bu anllattıklarınızı kimse anlatmazdı, araştırmacı biriyimdir ve araştırdıklarımıda anlamak için çaba gösteren biriyimdir. Fakat ilk defa sizin gibi birinin bana böyle kod anlamında öneri sunduğunu görmedim. :)
Çok teşekkür ederim.
Bu arada hocam kusuruma bakmayın "bootstrap" şunu arkadaşlarda önerdi kolay yaparsın dediler tasarımlarını fakat birşeyler indirmek gerekiyor diye indiremedim linkler kırıktı hevesimi kaçırdı. küçük bir anlatım rica edebilirmiyim Teşekkür ederim.

Buda benim kendime ait tasarımım
Güzellik oranını alabilirmiyim rica etsem :) Herşey için Bütün arkadaşlara teşekkür ediyorum.
kgpAjm.png
 
Katılım
11 Ağustos 2010
Mesajlar
5,807
Reaksiyon puanı
68
Puanları
1,228
bootstrap, html css js frameworkü olanı kastediyorsun. Responsive tasarımlar ve temiz ve düzenli bir front-end geliştirmek için framework kullanmak şart. bütün tarayıcılar ile uyumlu olması ve kullanım kolaylığı sağladığı avantajlar arasında gösterilebilir. Ayrıca kendi frameworkünü de yazabilirsin kendini çok iyi geliştirirsen ama şahsi fikrim tekerleği yeniden icat etmenin bir anlamı yok. Bir şey indirmene gerek yok fazladan. frameworku indirip kullanacağın sayfalara dahil ediyorsun hepsi bu. Geri kalan ise hiyerarşisini çözmen. Sınıf ve id isimlerini bilmen. Kullandıkça öğrenilir bence.

sitesinde detaylı bir şekilde nasıl kullanılacağına ilişkin güzel dökümanlar mevcut. En iyi kaynak orası bence.

Tasarımların minimallist olsun fazla süslemene gerek yok. Dikkat dağıtmasın. Topoloji çok önemli ayrıca. Eğitim amaçlı kullanacaksanız siteyi düzgün anlaşılır gözü yormayan bir font seçmelisiniz. yukarıdaki olmamış yani. orta içerik kısmındaki diktörtgen ve tarih ile hit değerlerini yazdığın bölümde olmamış bence. Sade, düzenli, anlaşılır insanı boğmayan bir arayüz olsun. Öte yandan başlangıç için böyle bir tasarım tabiki iyi.

Gelişim basamaklı bir yapıdır. Zamanla.
Kolay gelsin.
 

saltmedya

Öğrenci
Katılım
24 Eylül 2015
Mesajlar
17
Reaksiyon puanı
0
Puanları
1
Çok eski yapılar peşinden gidiyorsun. PHP 7 ile mysql_connect desteği kalkıyor. Yani şu yazdığın herşey 1-2 seneye çöp olabilir. Acilen mysql sorgularını pdo veya mysqli ile değiştirmen lazım.
 
Üst