2015-07-29 29 views
1

Я пытаюсь извлечь записи из базы данных и щелкнув ссылку, которую он передает, чтобы перейти к нужному URL-адресу. но когда я нажимаю на ссылку я получаю следующее сообщение об ошибке:Недопустимый аргумент, предоставленный foreach() в предложении else

Warning: Invalid argument supplied for foreach() in /home/next/public_html/cms/index.php on line 31

используемый код:

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 

    require_once('includes/class-query.php'); 

    if (!empty ($_GET)) { 
     if (!empty ($_GET['p'])) { 
      $post = $_GET['p']; 
     } 

     if (!empty ($_GET['cat'])) { 
      $cat = $_GET['cat']; 
     } 
    } 

    if (empty ($post) && empty ($cat)) { 
     $posts_array = $query->all_posts(); 
    } elseif (!empty ($post)) { 
     $posts_array = $query->post($post); 
    } elseif (!empty ($cat)) { 
     echo 'cat'; 
    } ?> 
<html> 
    <head> 
     <title></title> 
    </head> 

    <body> 
     <?php foreach ($posts_array as $post) : ?> 
      <div class="post"> 
       <h1><a href="?p=<?php echo $post->ID; ?>"><?php echo $post->post_title; ?></a></h1> 
       <p><?php echo $post->post_content; ?></p> 
      </div> 
     <?php endforeach; ?> 
    </body> 
</html> 
+1

Ваш запрос не удался, и вам нужно выяснить, почему. Проверьте наличие ошибок для db и PHP. –

+0

место echos ('echo" failed ";') во всех ваших условных операторах и посмотреть, что там появляется. Вы можете отслеживать/устранять неполадки таким образом, а также использовать print_r и/или var_dump –

+0

Я уверен, что ' 'повторно вызывает проблему. Вероятно, '$ posts_array' не является массивом. – redimp

ответ

0

Вам нужно передать массив в последний еще потому, что вы возвращаете массива в другой два цикла if и foreach с использованием этого массива.

Изменить этот код

if (empty ($post) && empty ($cat)) { 
     $posts_array = $query->all_posts(); 
    } elseif (!empty ($post)) { 
     $posts_array = $query->post($post); 
    } elseif (!empty ($cat)) { 

    //Change this line and pass an array instead of echo something 

     echo 'cat'; 
    } 
+0

как это сделать? потому что результат - массив – Ranjit

+0

То, что я говорю, вам нужно изменить этот код, я не изменился, я только что упомянул о той строке, в которой вам нужно внести изменения. Не эхо-то, передайте массив вместо эха. –

1

Провал случай этого кода, когда $ кошка определена. Добавляя к предложению @Mohammad Imran Ashraf, если вы напишете что-то подобное, ошибка исчезнет.

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 

    require_once('includes/class-query.php'); 

    if (!empty ($_GET)) { 
     if (!empty ($_GET['p'])) { 
      $post = $_GET['p']; 
     } 

     if (!empty ($_GET['cat'])) { 
      $cat = $_GET['cat']; 
     } 
    } 

    if (empty ($post) && empty ($cat)) { 
     $posts_array = $query->all_posts(); 
    } elseif (!empty ($post)) { 
     $posts_array = $query->post($post); 
    } elseif (!empty ($cat)) { 
     $posts_array = array(); 
    } ?> 
<html> 
    <head> 
     <title></title> 
    </head> 

    <body> 
     <?php foreach ($posts_array as $post) : ?> 
      <div class="post"> 
       <h1><a href="?p=<?php echo $post->ID; ?>"><?php echo $post->post_title; ?></a></h1> 
       <p><?php echo $post->post_content; ?></p> 
      </div> 
     <?php endforeach; ?> 
    </body> 
</html> 

или

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 

    require_once('includes/class-query.php'); 

    if (!empty ($_GET)) { 
     if (!empty ($_GET['p'])) { 
      $post = $_GET['p']; 
     } 

     if (!empty ($_GET['cat'])) { 
      $cat = $_GET['cat']; 
     } 
    } 

    $posts_array = array(); 
    if (empty ($post) && empty ($cat)) { 
     $posts_array = $query->all_posts(); 
    } elseif (!empty ($post)) { 
     $posts_array = $query->post($post); 
    } elseif (!empty ($cat)) { 
     echo "cat"; 
    } ?> 
<html> 
    <head> 
     <title></title> 
    </head> 

    <body> 
     <?php foreach ($posts_array as $post) : ?> 
      <div class="post"> 
       <h1><a href="?p=<?php echo $post->ID; ?>"><?php echo $post->post_title; ?></a></h1> 
       <p><?php echo $post->post_content; ?></p> 
      </div> 
     <?php endforeach; ?> 
    </body> 
</html> 

Любой из этих двух решений будет работать. Надеюсь, поможет. Основной причиной является неинициализированный массив $posts_array. Поэтому либо инициализируйте его вначале, либо присвойте ему значение в предложении else.