Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

php Hata nerde ?


haydari

Öne çıkan mesajlar


$rdesult = mysql_query("SELECT sonkg FROM `tanitim` WHERE sonkg >='$gun' AND (sonky ='$yil' AND sonka ='$ay') ORDER BY `sonkg` ASC LIMIT 0 , 7");
while($row = mysql_fetch_array($rdesult))
{
$betad=$row['sonkg'];
foreach( range(0,6) as $cnt )
{
$alfad =strtoupper( date('j',strtotime( "today + $cnt day") ) );
if($alfad!=$betad)
{
echo "<option value='" . $alfad . "'>" . $alfad . "</option>";
}
else
{
echo "";
}
}
}
Link to comment
Sosyal ağlarda paylaş

Hatayı yazsana :)

Birde SQL string icindeki `tanitim` tırnak gibi şeyleri kaldır. sadece tanitim yazsın

Birde (sonky ='$yil' AND sonka ='$ay') burada neden bunları tekrar parantez icine aldın ki? paratezden çıkart onları AND ile kontrol ediyorsun sonuçta. (Bu hataya sebep olmaz ama gereksiz olmuş )
Link to comment
Sosyal ağlarda paylaş

foreach( range(0,6) as $cnt )
{
$alfad =strtoupper( date('j',strtotime( "today + $cnt day") ) );
$rdesult = mysql_query("SELECT sonkg FROM `tanitim` WHERE sonkg >='$gun' AND (sonky ='$yil' AND sonka ='$ay') ORDER BY `sonkg` ASC LIMIT 0 , 7");
while($row = mysql_fetch_array($rdesult))
{
$betad=$row['sonkg'];
if($alfad!=$betad)
{
echo "";
}
else
{
echo "";
}
}
}

yani bu da olmadı ben anlayabilmiş değilim
Link to comment
Sosyal ağlarda paylaş

site açılmıyo ne hikmetse bakamıyom şimdi de, ben şöyle diyeyim

foreach önümüzdeki 7 günü sıralıyor ve option olarak select menü basıyor

ben veritabanından o ayda girilmiş kayıtların gunlerini alıyorum,

eğer o gün daha önce kullanılmışsa option olarak basılmasın istiyorum.
Link to comment
Sosyal ağlarda paylaş

Şimdi ben anlamadım, yazdığın kod hatamı veriyor? yoksa sonuç döndürmüyor mu? eğer hata almadan boş dönüyorsa SQL sorguna karışık gelen kayıt yoktur.

Onu bir kontrol et.

2. olarakda tam olarak ne yapmak istediğini söyle de ona göre bir yol izleyelim koddan pek bişi anlamadım.
Link to comment
Sosyal ağlarda paylaş

22519 verdi.

foreach( range(0,6) as $cnt )
{
$alfad =strtoupper( date('j',strtotime( "today + $cnt day") ) );
$rdesult = mysql_query("SELECT sonkullanmag FROM `tanitim` WHERE sonkullanmag >='$gun' AND (sonkullanmay ='$yil' AND sonkullanmaa ='$ay') ORDER BY `sonkullanmag` ASC LIMIT 0 , 7");
if(mysql_num_rows($rdesult)<1)
{
echo "";
} else {
while($row = mysql_fetch_array($rdesult))
{
$betad=$row['sonkullanmag'];

if($alfad!=$betad)
{
echo "";
}
else
{
echo "";
}
}
}
}

böyle çalıştı
Link to comment
Sosyal ağlarda paylaş

Şöyle bir yapı daha uygun olabilir.

foreach( range(0,6) as $cnt ){
$alfadArray[] = strtoupper( date('j',strtotime( "today + $cnt day" ) ) );
}

$alfadString = implode(",",$alfadArray);

Not: tek foreach ile istediğin bilgileri array e alıyorsun. daha sonra arrayde bilgileri implode ile string yapıyorsun virgül ile ayrılmış. Çıkan string e sql ile bağlıyorsun burada JOIN yapcaz ve senin kontrolün eşit değil olduğu için NOT IN ile SQL'e bağlayacağım.

$rdesult = mysql_query("SELECT sonkullanmag FROM `tanitim` WHERE sonkullanmag >='$gun' AND sonkullanmay ='$yil' AND sonkullanmaa ='$ay'
AND sonkullanmag NOT IN (".$alfadString." ) ORDER BY `sonkullanmag` ASC LIMIT 0 , 7" );

Tek 1 SQL çalışacak ve senin istediğin günlere eşit olmayan değerleri verecek.
Link to comment
Sosyal ağlarda paylaş

eğer sonuçta bir veya birden çok değer dönerse while ile bunlar alınıp if ile bugün ve önümüzdeki günlerle karşılaştırılıyor ve olmayanlar basılıyor.

NOT IN ile sonuçları eleyebiliyoruz. ancak veritabanında zaten fazla kayıt yok ki olanları eleyip olmayanları bastırayım. olanlar dediğimiz "bugün ve önümüzdeki 6 gün" onu da php ile yaratıyorum. yani ben başka bir çözüm göremedim.
Link to comment
Sosyal ağlarda paylaş

ikinci yaptığımı sildim. çünkü kontrol edince istediğim işi yapmadı.
eğer değer girilmişse duruyordu. sonraki tarihleri basmıyordu.
işin kötü yanı bu sorgudan bir tane daha çalıştıracağım. o da sonraki ay için. çünkü sorgu aslında önümüzdeki 7 gün için aslında çalışmıyor. eğer önümüzdeki 7 gün içeisinde ay değişmezse çalışıyor.

ben aslında 7 bilemedin 14 günlük kayıtlar tutmak istiyorum. yani geçmişi tutmayı düşünmüyorum. ama otomatik olarak geçmişi silecek bir şey henüz yazmadım.
Link to comment
Sosyal ağlarda paylaş

  • 2 hafta sonra ...
4Ever said:

Hatayı yazsana :)

Birde SQL string icindeki `tanitim` tırnak gibi şeyleri kaldır. sadece tanitim yazsın

Birde (sonky ='$yil' AND sonka ='$ay') burada neden bunları tekrar parantez icine aldın ki? paratezden çıkart onları AND ile kontrol ediyorsun sonuçta. (Bu hataya sebep olmaz ama gereksiz olmuş )


Iıh olmamış. Tırnaklar kendini korusun ki bu şekilde kod yazmaya alışsın. Örneğin mod adında bir field varsa;


$mod="OK";
$sorgu = mysql_query("select id from tablo where mod = ".$mod." ");



Şeklinde kullanamaz orada where koşulundan sonra gelen mod tırnak içerisine alınması gerekir aksi halde çalışmaz. Mysql'in temel değişkenlerini field olarak belirtirseniz o zaman tırnak kullanmak zorunda kalırsınız.

Ayrıca parantezlere gerek var. Siz düzgün çalıştığını sanıyorsunuz ama reportları açarsanız ne kadar çok warning verdiğini görürsünüz.

Sanıyorsunuz ki report kapalı kalınca warningleri görmüyorum o zaman problem yok. Hiçde öyle değil o warningler tek tek log dosyalarına kayıt ediliyor buda sunucunun gereğinden fazla şişmesine sebep olabilir.

Temiz kod yazmak profesyonel bir yazılımcı için en önemli esastır. Amatörlüğün yazılımda yeri yok.
Link to comment
Sosyal ağlarda paylaş

Kendini ispatlamak için arayıp tarayıp geçmiş konuyumu buldun anlamadım ki :)

Zaten table adı gibi yerler de tırnak yazmaya gerek yok. operator vs ile aynı isimleri kullanıyorsan tablo adında zaten amatörsün.

Ayrıca AND ile sorgulama yapıyorsan paranter kullanmaya gerek yok.

Profesyonel hayatında başarılar dilerim.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...