Bir Sorguyu Birden Fazla Yerde Nasıl Çalıştırabilirim?

Merhaba arkadaşlar,

Tek sorgu ile tüm haberleri çekip index.php deki bir kaç box'ta göstermek istiyorum.

her seferinde ayrı ayrı sorgu yapmak siteyi zorluyor.

öncelikle yapmak istediğim kodları paylaşayım:

  <?php
include("header.php");
		
		/* Slider  */
		$query = $db->read_query("SELECT id, title, spot, image, date, head, type
                            FROM news
							WHERE active = 'Y'
							AND head_view = 'Y'
							ORDER BY date DESC
							LIMIT 10") or die($db->sql_error());
                   $SNews = array();
                   while($row = $db->sql_fetcharray($query)){
    $SNews[] = $row;
                    }
                    ?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Posts</title>
</head>
<body>
**// first article box**
  <h1>fruits</h1>
  <ul>
<?php
foreach($SNews as $k=>$news){
 $news_url_seo = $news[id]."-".seo($news[title]).".html";
?>
      <li><?php echo stripslashes($news[image]);?>" width="350" /></li>
      <li><p><?=stripslashes($news[spot])?>.</p>
			<a href="<?=$news_url_seo;?>">Details</a></li>
 <?php } ?>
  </ul>
**// second article box**
<h1>fruits 2</h1>
<ul>
   <?php
foreach($SNews as $k=>$news){
 $news_url_seo = $news[id]."-".seo($news[title]).".html";
?>
      <li><?php echo stripslashes($news[image]);?>" width="350" /></li>
      <li><p><?=stripslashes($news[spot])?>.</p>
			<a href="<?=$news_url_seo;?>">Details</a></li>
 <?php } ?>
  </ul>
**// Third article box**
<h1>fruits 3</h1>
<ul>
    <?php
foreach($SNews as $k=>$news){
 $news_url_seo = $news[id]."-".seo($news[title]).".html";
?>
      <li><?php echo stripslashes($news[image]);?>" width="350" /></li>
      <li><p><?=stripslashes($news[spot])?>.</p>
			<a href="<?=$news_url_seo;?>">Details</a></li>
 <?php } ?>
  </ul>
</body>
</html>

yukardaki gibi tek sorgu ile tüm haberleri çekip foreach fonksiyonu ile index.php değişik yerlerinde göstermek istiyorum.

Aşağıdaki gibi kod denedim fakat array atamalarını yapmayı beceremedim.

Deneme:

<?php
include("header.php");

        /* Slider  */
        $query = $db->read_query("SELECT id, title, spot, image, date, head, type
                                    FROM news
                                    WHERE active = 'Y'
                                    AND head_view = 'Y'
                                    ORDER BY date DESC
                                    LIMIT 10") or die($db->sql_error());
                   $SNews = array();
                   while($row = $db->sql_fetcharray($query)){
                        //Array atamaları buraya yapılıyor
                        $SNews[$row[id]] = $row;
                    }
                    ?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Posts</title>
</head>
<body>
**// Tüm haber yerleri**
<?php
foreach($SNews as $k=>$news){
 //array daki tüm haberler için ayrı ayrı box oluşturulacak
 $news_url_seo = $news[id]."-".seo($news[title]).".html";
?>
  <h1>fruits <?php echo $k ?></h1>
  <ul>

      <li><?php echo stripslashes($news[image]);?>" width="350" /></li>
      <li><p><?=stripslashes($news[spot])?>.</p>
            <a href="<?=$news_url_seo;?>">Details</a></li>

  </ul>
 <?php } ?>
</body>
</html>


array atamalarını yapmayı beceremedim her kutucukta 5 ayrı haber göstermesi lazım.

yardımcı olursanız menun olurum teşekkürler

sql_fetcharray fonksiyonunu kullanarak zaten diziye atama yapmış oluyorsun. Bu fonksiyondan çıkan değeri herhangi bir değişkene atayarak kullanabilirsin. Örnek olarak aşağıdaki kodu inceleyebilirsin.

// sql sorgusunu çalıştıralım
$query = $db->read_query("SELECT id, title, spot, image, date, head, type
    FROM news
    WHERE active = 'Y'
    AND head_view = 'Y'
    ORDER BY date DESC
    LIMIT 10") or die($db->sql_error());

// çalıştırılan sorgudaki verileri diziye atayalım.
$haberler = $db->sql_fetcharray($query);


// haberleri listeleyelim
foreach($haberler as $haber) {
    echo $haber['adi'];
}

Teşekkürler cevap için hocam,

yazdığınız örnek kod ile tüm haberler listeleniyor (limit 10) benim yapmak istediğim ise her kutucukta 5 tane haber göstermek ve 4 kutu var sayfamda.

toplam 20 haber çekip 5er tane ayrı ayrı kutularda göstermek istiyorum.

 

örnek :

kutu 1

1

2

3

4

5

kutu2

6

7

8

9

10

kutu3

11

12

13

14

15

O zaman for döngüsü kullanman gerekecektir. Aşağıdaki örneği inceleyebilirsin.

// 1'den 5'e kadar saydır
for($i=1; $i<=5; $i++) {

  // yazdır
  $haberler[$i]['adi'];
}


// 5'den 10'a kadar saydır
for($i=5; $i<=10; $i++) {

  // yazdır
  $haberler[$i]['adi'];
}

// ...

Hocam affına sığınırak yüzsüzlük yapacam kodları bir araya toplayabilirmisiniz lütfen 

dediğinizi yapıyorum fakat ekrana bişey basmıyor,

print_r

 bu fonksiyonu denedim yine boş ekran geliyor.

Teşekkürler

Kodları tamamen düzenlemek yerine adım adım ilerleyelim. İlk önce $haberler değişkeninin içi boş mu dolu mu diye kontrol edelim. Bunun için aşağıdaki fonksiyonu kullanabilirsiniz.

print_r($haberler);

Bu kodu çalıştıralım. Eğer ekran çıktısında Array(...) ile başlayan kod varsa aşağıdaki kodu deneyelim.

print_r($haberler[0]);

Yukarıdaki kodun çıktısında $haberler değişkeninin içindeki ilk dizi gösterilecek. Eğer burada da sorun yoksa aşağıdaki kodu çalıştırabiliriz.

// 1'den 5'e kadar saydır
for($i=1; $i<=5; $i++) {

  // yazdır
  $haberler[$i]['adi'];
}

Buraya kadar sorun yoksa bir üstteki kodun başlangıç ve bitiş numarasını ($i=1; $,<=5;) değiştirip sayfamızın belirli yerlerine yerleştirebiliriz. 

Çok çok Teşekür ederim hocam,

kodları aşağıdaki gibi denedim oldu, listelemeyi başarıyorum fakat seo linki nasıl düzenleyeceğimi ve nasıl kullanacağımı çözemedim. tüm haberlere aynı linki veriyor.

Orijinal link şu şekilde ama seoya göre düzenleyemedim:

<?php
  ob_start();

  include("config.php");	
  include("inc/includes.php");

  // sql sorgusunu çalıştıralım
  $query = $db->read_query("SELECT id, title, spot, image, date, head, type
    FROM news
    ORDER BY date DESC
    LIMIT 10") or die($db->sql_error());

  // çalıştırılan sorgudaki verileri diziye atayalım.
  $snews = array();
  while($row = $db->sql_fetcharray($query)) {
    $snews[] = $row;
  }
?>

<!-- //TABLEMİZİ OLUŞTURALIM -->
<table width="100%" border="0">
  <tr>
    <th scope="col">
      <?php	
        // Verileri saydıralım
        for($j=0; $j<5; $j++){	
        // Seo linkimizi oluşturalım	
        $news_url_seo = $snews[$j][id]."-".seo($snews[$j][title]).".html";
      ?>
        <div class="title"><a href="<?=$news_url_seo;?>"><?=stripslashes($snews[$j][title])?></a></div>
      <?php } ?>
    </th>
  </tr>
  <tr>
    <td>
      <?php	
        // Verileri saydıralım
        for($j=5; $j<10; $j++){	
          // Seo linkimizi oluşturalım	
          $news_url_seo = $snews[$j][id]."-".seo($snews[$j][title]).".html";
        ?>
          <div class="title"><a href="<?=$news_url_seo;?>"><?=stripslashes($snews[$j][title])?></a></div>
        <?php } ?>
    </td>
  </tr>
  <tr>
    <td>KUTU 3</td>
  </tr>
  <tr>
    <td>KUTU 4</td>
  </tr>
</table>

Düzenledim hocam çalışıyor şimdi yukardaki gibi düzenledim kodlarımı.

kontrol ederseniz sevinirim doğru kullanım amacıyla hatalarım varsa.

Birde başka bir sorum daha var for döngüsüne şart eklememiz mümkünmü ?

yani haber durumu 1 ise göstersin değil ise göstermesin ?

Çok teşekkürler iyi ki siz hocalar varsınız :)

For döngüsünün içine if kullanarak şart yerleştirebilirsin. Bkz;

// 1'den 5'e kadar saydır
for($i=1; $i<=5; $i++) {

  // eğer haber_durumu 1 ise sıradaki item'e geç
  if ($haber_durumu == 1)
    continue;

  // yazdır
  $haberler[$i]['adi'];
}

 

                               <?php	
								for($j=0; $j<5; $j++){
							    $news_url_seo = $snews[$j][id]."-".seo($snews[$j][title]).".html";		        ?>
								<?php
								if($place == 3){
								?>
								<div class="title">
                                <a href="<?=$news_url_seo;?>">
								<?=stripslashes($snews[$j][title])?></a>
                                </div>
								
                                <?php
								}	else {
								?>
								<div class="title">
                                henüz haber yok
                                </div>
								
								<?php
								}
								?>
								<?php
								}
								?>

Bu şekilde denedim çalışmadı hocam, place değişkene atayıp if te kullanabilirmiyiz ?

$place değişkeninde sorun olabilir. Bunu çözmek içinde biraz test yapman lazım. print_r fonksiyonunu kullanarak değişkenin içindeki değeri görebilirsin.

değişkeni görmüyor hocam sıkıntı orda

Şuan sorunun ne olduğunu tahmin edemiyorum ama muhtemelen değişken tanımı yaptığın yerde bir sorun olmuştur.

Cevap Yaz

Cevap yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git