Справка PHP MySQL Fetch Printing - PullRequest
       3

Справка PHP MySQL Fetch Printing

0 голосов
/ 27 января 2011

В основном у меня есть два файла, group.php и class.Groups.php

Я пытаюсь распечатать 20 последних сообщений, отправленных группе, однако я не могу понять это, поскольку я довольно новк этому!Любая помощь приветствуется.

Проблема, с которой я сталкиваюсь, заключается в том, что вызываемая мной функция находится внутри класса.Просто не знаю, как выполнять цикл while и печать.

Также приветствуются предложения и отзывы о моей структуре и макете кода.

Спасибо.

класс.Groups.php

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

// Get Group Details

class Group {

 var $groupID;
 var $groupName;
 var $groupDescription;
 var $groupMessage;

 function group_details($ID) {
  $group_details = mysql_query("SELECT * FROM Groups WHERE GroupID = '".$ID."' LIMIT 1");
  if (mysql_num_rows($group_details) == 1) {
   $group_details_row = mysql_fetch_assoc($group_details);
   $this->groupID = $group_details_row ['GroupID'];
   $this->groupName = $group_details_row ['Name'];
   $this->groupDescription = $group_details_row ['Description'];
  }
 }

 function group_member($ID) {
  $group_member = mysql_query("SELECT * FROM GroupMembers WHERE GroupID = '".$ID."' AND UserID = '".$_SESSION['UserID']."' LIMIT 1");
  if (mysql_num_rows($group_member) == 1) {
   return 1;
  }
  else {
   return null;
  }
 }

 function group_messages($ID) {
  $group_messages = mysql_query("SELECT * FROM GroupMessages INNER JOIN Users ON Users.UserID = GroupMessages.UserID WHERE GroupID = '".$ID."' LIMIT 20");
  while ($group_messages_row = mysql_fetch_assoc($group_messages)) {
   $this->groupMessage = $group_messages_row['Message'];
  }
 }

}

?>

group.php

<?php include("includes/class.Groups.php");

$group = new Group;
$group->group_details($_GET['ID']);

if ($_SESSION['LoggedIn'] == 1) {
 if ($group->group_member($_GET['ID'])) {
  include("includes/header.php"); ?>
  <div id="container">
   <div id="menu"><?php include("includes/sidebar.php"); ?></div>
   <div id="main">
    <h2><?php echo $group->groupName; ?></h2>
    <p><?php echo $group->groupDescription; ?></p>
    <h3>Messages</h3>
    <?php 
     while ($group->group_messages($_GET['ID'])) {
      echo $group->groupMessage;
     }
    ?>
   </div>
  </div>
 <?php
 }
 else {
  echo "You are not member of this group.";
 }
}
?>

Ответы [ 2 ]

1 голос
/ 27 января 2011

Вы не можете использовать $group->group_messages() внутри while, потому что:

  1. Он ничего не возвращает (возвращает значение false)
  2. Он проходит по всем строкам за один вызов, а вы ожидаете, что он будет возвращать по одной строке за раз

Вы можете переписать свой код класса, чтобы собрать все строки в переменной, вернуть ее и выполнить итерацию по ней, используя foreach loop

// class.Groups.php
function group_messages($ID) {
  $group_messages = array();
  $group_messages = mysql_query("SELECT * FROM GroupMessages INNER JOIN Users ON Users.UserID = GroupMessages.UserID WHERE GroupID = '".$ID."' LIMIT 20");
  while ($group_messages_row = mysql_fetch_assoc($group_messages)) {
      $group_messages[] = $group_messages_row['Message'];
  }
  return $group_messages;
}

// groups.php
<h3>Messages</h3>
<?php 
    foreach ($group->group_messages($_GET['ID']) as $group_message) {
        echo $group_message;
    }
?>
0 голосов
/ 27 января 2011

У вас, кажется, есть лишняя фигурная скобка в этом куске кода:

<?php 
                    while ($group->group_messages($_GET['ID'])) {
                        echo $group->groupMessage; }
                } ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...