v2.5.2
Giriş yap

PHP ile bir veri kaç tane ise saydırtıp çektirmek

ilkertuncer
544 defa görüntülendi

Merhabalar. Elimde bir verim olduğumu düşünelim. Bu veriyi safyaya çektirirken demem lazım ki ".. verisini saydır kaç tane ise getir" demem lazım.

Nasıl yapabilirim?

NOT: VERİLERİN HEPSİNİ ÇEKTİRMEK İSTEMİYORUM ÇÜNKÜ BU ÇEKTİRİLEN VERİLER BOŞ İNPUTLARA HAZIR OLARAK GELİYOR VE EĞER BENİM SİSTEMİNDE 5 VERİDEN AZ VERİ EKLERSEM ÖRNEĞİN 3 EKLEDİM 2 İNPUT BOŞTA KALIYOR

Cevap yaz
Cevaplar (7)
munzevi
740 gün önce

https://prnt.sc/o07E_zCF0sHt bunu yaptığına göre, bir id belirliyor olmalısın. bütün soru ve cevaba ait o kolonları sil. https://prnt.sc/aoOfwxazIp6n kare içine alıp işaretledim bak sileceğin yeride. bunlar yerine 1 tane soru, 1 tane cevap oluştur. zaten kategori_id'ye göre çekmiyor musun, yine öyle çek. o kategori_id ile ileşesen 5 sonucun hepsi dönecek. bir önceki mesajımdan en ufak detayına kadar nasıl doğru şekilde listeleme yapacağını anlattım ve bunun üzerine artık söyelebileceğim bir şey yok. sen ne istiyorsun öğrenmek mi, yoksa her ayağın takıldığında burda kod yazacak birini bulup oraya yapıştırıp çalıştırmak mı? anlamıyorum ya, bunu anlamıyorsan buraya kadar nasıl geldin? kendi kendine, çözüm olarak görmediğin ve anlamadın şeyi, ya bi deneyim desen. php'yide geç, sql de denesen kurcalasan. anlatımda değil belki pratikte "haaa böylemiş" diyeceksin, oda yok.

son deneme;
şimdiye kadar yazdığım her şeyi boşver, yukarıdaki pragrafı da, sadece aşağıdaki kısa anlatımı uygula. uygulama ama, anlamasanda uygula.
veritabanında birden çok anahtar vardır, en çok kullanılan ve ihtiyaç duyulan primary key adı verilen birincil anahtardır, ve ardışık olarak arttığı için benzersizdir. her girdi için +1 değer alır. kesin eşleşme sağlamak için tek bir sonuç döndürmek için kullanılır.
birde ikincil anahtar vardır, soyut veye doğrudan başka tablolarda yer alan verilerle eşleşme sağlamak için kullanılır.
bak iki tip anahtarımız varmış, birincil anahtar; tek sonuc döndürür, ikincil anahtar eşleşen tüm sonuçları döndürür. senin birincil anahtarın id, bu tek sonuç döndürür. ikincil anahtarın ise category_id bu da eşleşen tüm sonuçları döndürür.

hiçbir şeyi bozmadın diyelim, tablon, kodların her şeyin şimdiki gibi aynı. o tabloya hemen 5 tane ekeleme yap. 5 kere bütün kolonları doldur. sadece kategor_id'lerin hepsi aynı olsun, sayıyla tutuyorsan sayı, metinle tutuyorsan metin artık neyse. sonra phpmyadmin gir o tabloya tıkla, tıklayınca zaten hemen üst tarafta SELECT * From tablo diye kod çıkıyor onu kopyala sonuna where kategori_id = artık ne belirlediysen onu yaz ve sonucu kendin gör.

ha yok illa saydırcam ben yaaa diyorsan, zaten 5 sabitmiş hesaplama gerektirecek bir durum yok. sıfıra eşit bir değişken belirle, her undefined veya null değer için ++ operatörü ile bir kere arttır.

ilkertuncer
740 gün önce

Merhabalar @munzevi abi ben kullanıcıya soru yöneltmek değil de hani sitelerin altında olur ya sık sorulan sorular oluyor ya şu şekilde https://prnt.sc/CDfYMlLifzMx ben bu şekilde yapmak istiyorum

Benim istediğim her konuya ait soruları ve ceavplarını o konuyu girerken ek olarak sorusunu da girebilmem.

Ben veri tabanımı her soruya özel olacak şekilde soru1baslik ve soru1icerik olarak 5 tane bu şekilde tuttum çüni bu şekilden başka bir şekil aklıma gelmedi

yani tek bir soru stürnununa o konuya ait 5 tane soru ve cavap stünuna o kunya ait 5 cevap tutmanın nasıl olabileceğini bilmiyorum

Ek olarak naşka bir tabloya o soruları atmamı ve konuya özel belirli soruların nasıl çektiriceğimi bilmiyorum

Yani benim yapım https://prnt.sc/YK3eCPXO4O3V bu şekilde. Benim tam olarak istediğim konuyu girerken o konuya özel soruları eklemek. Çektirirken ise benim 5 soru ekleyebilme hakkım var ve diyelim ki ben 3 soru yazdım. 2 tane soru boş olarak kalmasın diye php ye dicem ki "sen bu konya ait soruları saydır. Kaç tane ise o yapıda çektir" demem lazım

Mantığını yanlış da kuruyor olabilirim ama temel olarak amaçladığım şey bu abi.

Yani konuyu oluştururken o konuya özel yani o id ye özel 5 tane soru eklemek ve o soruları çektitiken kaç tane o sorudan varsa saydır kaç taneyse çektir diyebilmek

Umarım biraz daha anlaşılır olmuştur abi

munzevi
740 gün önce

benim tablondan anladığım kadarıyla, Sıkça Sorulan Sorular tarzında bir şey yapmaya çalışıyorsun gibi duruyor. bu genelde önceden belli olan soruları içerir, "Siparişimi Nasıl İptal edebilirim?" gibi bir başlık olur ve tıklayınca altında cevabı yazar. ama sen diyorsan ki ben kullanıcıların buraya gireceği ve sorularla cevapların önceden belli olmadığı spesifik bir içerik oluşturacağım. o zamanda durum pek farklı değil aslında. script yazmak, kodları bilmekten değil, düşünmekten geçiyor. sen nasıl kaydedip sıralayabileceğine dair bir fikire sahipsin ve bunu uygulamaya çalışıyorsun. ama yeterince düşünmeden bunu uygulamışsın. bu tabloyu ders ile ilişkili bir tablo olarak ele alalım ve özünde sınav sistemine benzer soru cevap gibi bir senaryosu olsun.

tablo

bir tablo oluşturdum ve resimde de gördüğün gibi tablonun yapı kısmındayım.

1 numaralı kolon id değeri ve her girdi de (veritabanına yapılan yeni kayıtta) otomatik olarak artıyor 1-2-3 gibi.
2 numaralı kolon ise sorunun başlığını içeriyor seninkinden farklı olarak Question1 gibi sonuna sayısal ek almıyor. sen bu sayısal ek ile sıralama yaparken eşleşme sağlamayı planlamıştın. ama gereken tüm içerik tek sütunda (satır) olduğu için biz buna id değeri ile erişebiliriz. yani id 1 dediğimiz zaman, soruyu ve cevapları alabiliriz.
3 numaralı kolon ise cevap kolonu

mantığı bu şekilde olmalıydı. hatta bunu biraz daha ilerletmek istersen, bir kolon daha açıp (yapı kısmında gördüğün id, cevap vb. kolondur) kategori diyebilirdin.

tablo2

şimdi yeni bir tablo yapısı oluşturdum. bu tabloyu standart çoktan seçmeli bir sınav gibi düşünebiliriz. bir soru var ve sorunun altında şıklar şeklinde a) b) c) d) cevapları mevcut. soru kolonu sorumuzu sormak için, cevap kısmını doğru cevabımızı saklamak için, cevap_a ve diğerlerini de şıkları saklamak için kullanabiliriz. Örneğin doğru cevap b ise, kişi cevap seçtiğinde, doğru cevabımız da "cevap" kolonunda tutulduğundan, $secim == $row["cevap"] diyerek kişinin yanıtı doğru verip vermediğini de kolayca anlayabiliriz. ekstradan ne demiştik, kategori. örneğin bu sorular fen dersini içeriyor olsunlar, ben daima veritabanına sayısal değer kullanmayı tercih ederim byte değerleri daha düşük olduğu için. yani benim için fen dersi 6 numara olabilir, bu yüzden yapıda da gördüğün gibi kategori kısmı int(2) bu da en fazla 0 ile 99 arasında bir sayı belirtebileceğimi yani 100 kategoriden fazla kategorim olmadığı anlamına gelir. nasıl doğru cevabı eşleştirme yaparak bulduysak, tüm soruları listelemek yerine kategorilere göre soruları listelemek için böyle bir yöntem kullanabiliriz. ben her zaman mantıksal açıdan insanlara anlatımda bulunmayı tercih ediyorum. çünkü sen zaten veritabanına bağlanabiliyorsun, verileri listeleyebiliyorsun, ekleyebiliyorsun... benim anlattıklarım için ekstra bir kod yazmana veya bilmene gerek yok, sadece analitik düşünmüyorsun. düşünmen gerekiyor.

sadece soru ve cevabı görüntülemek istedim ve hedefim de 1. sıradaki soru yani id 1 değerine sahip olan olsun
soru

birde sınav benzer bir bir soru olsun ve kategorisi sosyal bilgiler (buna 3 dedim) olsun ve tüm soruları getirelim
soru2

şimdi kullanıcı bir şık seçmiş gibi doğru cevabı arayalım
soru3
önce cevabı D olarak seçtim ve veritabanı sonuç bulamadı, bu da yanlış cevap verdim demek.
sonra cevabı A olarak işaretledim ve Ankara sonucunu aldım, yani cevap doğruymuş.

ilkertuncer
741 gün önce

Merhabalar @munzevi abi. Dediğinden çok bir şey anlayabilmiş değilim. Ynei bir yapı oluştur derken sanırım yeni bir tablo oluştur diyorsun. Fakat yeni bir tablo oluşturunca nasıl inputtaki verilerimi konuyu oluştutuken, nasıl diğer tabloma atacağımı ve nasıl konuyu çektirirken çektirirken o konun sorularını çektireceğimi bilmiyorum.

Veya abi tablo yapını düzenle derken ne demek istediğini anlayabilmiş değilim biraz daha detaylı olarak anlatyabilirsen süper olur abi.

Kendimi geliştirme aşamasındayım yardımcı olabilirsen sevinirim abi.

munzevi
741 gün önce

veritabanını yanlış kullanıyorsun. böyle tabi kendine sorun teşkil eder sıralama yaparken. tablo yapını tekrar düzenle.

id, soru, cevap şeklinde yapı oluştur ve id'ye göre sırala. kodları değiştirmene gerek kalmaz.

ilkertuncer
741 gün önce

Merhabalar @munzevi abi.

Sanırım tam isetdiğim şey olmadı. söyle anlatayım,

Tablomun içinde birçok verim var. Ben soru ve sorunun cevabı olarak stünumu tutuyorum.

Stünum Şu şekilde: https://prnt.sc/lU-dryD4-vRC

Eklediğim Bölüm şu şekilde: https://prnt.sc/_Qq7E0_0hArt Soldaki input soru başlığı sağdaki input soru yanıtı

Çektirdiğim bölüm ise şurası: https://prnt.sc/24X7TCAjkSRm KODU: https://prnt.sc/9vIMm6BNUF3-

Abi çektiriken $data adlı değişkenden konu ile alakalı her şeyi konuya ait verileri title'i vs. alıyorum.

Yani abi demek istediğim çektirirken dicem ki bu $data değikenindeki yani konumdaki soru title ina bak kaç tane ise saydır ona göre o yapıda accordion yapısında çektir verimi dicem. Bu sayede boş bir input oluşmayacak

Yardımcı olabilirsen süper olur abi :D

munzevi
741 gün önce

count dizide bulunan öğeyi hesaplar

if(count($veri) < 5){

//veri beşten küçükse çalışacak blok

}