2016-04-09 4 views
1

İşaretli yayınlarla ilgili verileri görüntülemek için bir while döngüsü yürütmeye çalışıyorum. Şu anda 2 mesaj (flagged_posts alanında 2 satır) işaretlenen Conor olarak giriş yaptım. Ancak, aşağıdaki kodu çalıştırdığımda, sadece bir div yankıdır, oysa ikisi iki yazıyı işaretlediği için yankı olmalı. Ben aynı hatalarının iki olsun yukarıdaki ileTüm satırları görüntülemek için döngü çalışırken, ancak yalnızca bir satır görüntüler

 $flagged_by2 = mysqli_query ($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$user_ident'"); 
     $flagged_ids = []; 
     $num_of_flagged_posts = mysqli_num_rows ($flagged_by2); 
     while ($getting_d = mysqli_fetch_assoc ($flagged_by2)){ 
      $flagged_ids[] = $getting_d['thought_id']; 
     } 
     if (!$flagged_ids) { 
      $flagged_ids[] = 0; 
     } 


      // Pagination - Load more content when bottom of page hit. 
      $limit = 10; 

      $page = (int) (!isset($_GET['p'])) ? 1 : $_GET['p']; 
      # sql query 
      $query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id IN " . implode(', ', $flagged_ids)." ORDER BY id DESC"); 
      # find out query start point 
      $start = ($page * $limit) - $limit; 
      # query for page navigation 
      if(mysqli_num_rows($query) > ($page * $limit)){ 
       $next = ++$page; 
      } 
      //$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id='$flagged_thought_id' ORDER BY id DESC LIMIT {$start}, {$limit}"); 
$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id IN " . implode(', ', $flagged_ids)." ORDER BY id DESC LIMIT {$start}, {$limit}"); 
      if (mysqli_num_rows($query) < 1) { 
       header('HTTP/1.0 404 Not Found'); 
       echo "<div class='nothing_to_say'> 
         $ufirstname has no flagged posts. 
        </div>"; 
       exit(); 
      } 

:

<?php 
// getting id of logged in user, need this to see all the flagged posts from logged in user. 
$get_uid = mysqli_query ($connect, "SELECT id FROM users WHERE username = '$user' "); 
     $get_d = mysqli_fetch_assoc($get_uid); 
      $user_ident = $get_d ['id']; 

// using the above id and getting all the flagged posts which have been flagged by the id obtained 
$flagged_by2 = mysqli_query ($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$user_ident'"); 
     $num_of_flagged_posts = mysqli_num_rows ($flagged_by2); 
     while ($getting_d = mysqli_fetch_assoc ($flagged_by2)){ 
      $flagged_thought_id = $getting_d['thought_id']; 
     } 

$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id='$flagged_thought_id' ORDER BY id DESC LIMIT {$start}, {$limit}"); 
while ($row = mysqli_fetch_array($query)) { 
    $thought_id  = $row['id']; 
    $message_content = $row['message']; 
    $date_of_msg  = $row['post_details']; 
    $thoughts_by  = $row['added_by']; 
    $attachent  = $row['attachment']; 
    $shared   = $row['shared']; 

    echo 
     " <div class='message_wrapper'> 
       <p> Details would be displayed here </p> 
      </div>"; 
} //while closed 

Düzenleme: (Marcin Nabiałek yaklaşımla)

Sayfalandırmayı İşte

benim yaklaşımdır :

mysqli_num_rows() exp() mysqli_fetch_array parametresi 1 mysqli_result edilecek beklemektedir: Dışarı bu iki satırı yorum yaparsanız

if(mysqli_num_rows($query) > ($page * $limit)){ 

VE

if (mysqli_num_rows($query) < 1) { 

, sonra başka hata alıyorum: satırda - ECTS parametre 1 mysqli_result edilecek on line:

while ($row = mysqli_fetch_array($query)) { 
+1

Sorgularınızın bir kişi olarak daha kolay olacağını düşünüyorum: '" Kullanıcı adından kullanıcı adı = '$ user' soldan kullanıcılardan SELECT * flagged_by_id = users.id adlı kullanıcının soyadı, user_thoughts.id = user_thoughts.id = flagged_posts.thought_id " – Ohgodwhy

cevap

0

sorun buradadır:

$flagged_by2 = mysqli_query ($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$user_ident'"); 
     $num_of_flagged_posts = mysqli_num_rows ($flagged_by2); 
     while ($getting_d = mysqli_fetch_assoc ($flagged_by2)){ 
      $flagged_thought_id = $getting_d['thought_id']; 
     } 

$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id='$flagged_thought_id' ORDER BY id DESC LIMIT {$start}, {$limit}"); 

Aynı değişken için döngü değerlerini belirlersiniz ve burada dizinin olması gerekir. Bir yorumunu gösteriyordu sadece 1 sorgu yapabilir Ancak

$flagged_by2 = mysqli_query ($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$user_ident'"); 
     $flagged_ids = []; 
     $num_of_flagged_posts = mysqli_num_rows ($flagged_by2); 
     while ($getting_d = mysqli_fetch_assoc ($flagged_by2)){ 
      $flagged_ids[] = $getting_d['thought_id']; 
     } 
     if (!$flagged_ids) { 
      $flagged_ids[] = 0; 
     } 

$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id IN " . implode(', ', $flagged_ids)." ORDER BY id DESC LIMIT {$start}, {$limit}"); 

ve ek olarak hazırlanan ifadeleri PDO ile kullanmalıdır - şimdi Yor kod SQL enjeksiyon için açıktır: Yani bu kodu yeniden gerekir.

+0

Bu satırda eksik bir tek teklifiniz olduğunu düşünüyorum * $ query = mysqli_query ($ connect, "SELECT * FROM user_thoughts WHERE id IN". (', ", $ flagged_ids)." ORTAK BY DESC LIMIT {$ start }, {$ limit} ");', Gerçekten hiç kullanılmamış gibi '' implode 'alıntı nerede bitmeli bilmiyorum. – Freddy

+0

@Freddy Doğru, bu –

+0

düzeltildi Ben sorgu satırında bir hata alıyorum - 'implode(): Geçersiz argümanlar '' – Freddy

İlgili konular