2014-02-14 2 views
0

HTML, PHP, MySQL 및 CSS를 사용하여 인스턴트 메시징 플랫폼을 만들고 있습니다. 내 함수 fetch_conversation_messages (private_message.inc.php에 있음). 여기 private_message.inc.php이다 : 나는 다음을 얻을함수가 적절한 대신 부울을 반환합니다.

<?php 



    $errors = array(); 
    $valid_conversation = (isset($_GET['conversation_id']) && validate_conversation_id($_GET['conversation_id'])); 
    if ($valid_conversation === false){ 
      $errors[] = 'Invalid Conversation ID.'; 
    } 
    if (isset($_POST['message'])){ 
      if (empty($_POST['message'])){ 
        $errors[] = 'You must enter a message.'; 
      } 

      if (empty($errors)){ 
        add_conversation_message($_GET['conversation_id'], $_POST['message']); 
      } 
    } 

if (empty($errors) === false){ 
     foreach ($errors as $error){ 
      echo $error; 
     } 
} 


    if ($valid_conversation){ 
      /*if (isset($_POST['message'])){ 
        update_conversation_last_view($_GET['conversation_id']);*/ 
        $messages = fetch_conversation_messages($_GET['conversation_id']); 
        print_r($messages); 
      }else{ 
        $messages = array(); 
        update_conversation_last_view($_GET['conversation_id']); 
      } 


    ?> 
       <p class="name">Username: <?php echo $message['user_name']; ?></p> 
      <p class="text">Date: <?php echo date('d/m/Y H:i:s', $message['date']); ?></p> 
      <p>Message: <?php echo $message['text']; ?></p> 
    <a href="index.php?page=inbox">Inbox</a> 
    <a href="index.php?page=logout">Logout</a> 

      <form action="" method="post"> 
        <p><textarea name="message" rows="10" cols="110"></textarea></p> 
        <p><input type="submit" value="Add Message" /></p> 
      </form> 

      <?php 
      var_dump($messages); 
      if($messages){ 
      foreach ($messages as $message){ 
      ?> 
      <?php if ($message['unread']) echo 'unread'; ?> 


    <?php 

    }} 
    ?> 

을 다음과 같이

 <?php 

    // Fetches a summary of the conversations. 
    function fetch_conversation_summary(){ 
      $sql = "SELECT 
            `conversations`.`conversation_id`, 
            `conversations`.`conversation_subject`, 
            MAX(`conversations_messages`.`message_date`) AS `conversation_last_reply`, 
            MAX(`conversations_messages`.`message_date`) > `conversations_members`.`conversation_last_view` AS `conversation_unread` 
          FROM `conversations` 
          LEFT JOIN `conversations_messages` ON `conversations`.`conversation_id` = `conversations_messages`.`conversation_id` 
          INNER JOIN `conversations_members` ON `conversations`.`conversation_id` = `conversations_messages`.`conversation_id` 
          WHERE `conversations_members`.`user_id` = {$_SESSION['user_id']} 
          AND `conversations_members`.`conversation_deleted` = 0 
          GROUP BY `conversations`.`conversation_id` 
          ORDER BY `conversation_last_reply` DESC"; 

      $result = mysql_query($sql); 

      $conversations = array(); 

      while (($row = mysql_fetch_assoc($result)) !== false){ 
        $conversations[] = array(
          'id'       => $row['conversation_id'], 
          'subject'      => $row['conversation_subject'], 
          'last_reply'   => $row['conversation_last_reply'], 
          'unread_messages'  => ($row['conversation_unread'] == 1), 
        ); 
      } 

      return $conversations; 
    } 

// Fetches all of the messages in the given converstion. 
function fetch_conversation_messages($conversation_id){ 
     $conversation_id = (int)$conversation_id; 

     $sql = "SELECT 
           `conversations_messages`.`message_date`, 
           `conversations_messages`.`message_date` > `conversations_members`.`conversation_last_view` AS `message_unread`, 
           `conversations_message`.`message_text`, 
           `users`.`user_name` 
         FROM `conversations_messages` 
         INNER JOIN `users` ON `conversations_messages`.`user_id` = `users`.`user_id` 
         INNER JOIN `conversations_members` ON `conversations_messages`.`conversation_id` = `conversations_members`.`conversation_id` 
         WHERE `conversations_messages`.`conversation_id` = {$conversation_id} 
         AND `conversations_members`.`user_id` = {$_SESSION['user_id']} 
         ORDER BY `conversations_messages`.`message_date` DESC"; 

$result = mysql_query($sql); 
    $messages = array(); 
    while ($row = mysql_fetch_assoc($result)){ 
     $messages[] = array(
       'date'   => $row['message_date'], 
       'unread'  => $row['message_unread'], 
       'text'   => $row['message_text'], 
       'user_name'  => $row['user_name'], 
     ); 
    echo mysql_num_rows($result); 
      var_dump($row);  

} 
return print_r($messages);} 


    // Sets the last view time to the current time for the given conversation. 
    function update_conversation_last_view($conversation_id){ 
      $conversation_id = (int)$conversation_id; 
      $time = time() + 18000; 
      $sql ="UPDATE `conversations_members` 
          SET `conversation_last_view` = {$time} 
          WHERE `conversation_id` = {$conversation_id} 
          AND `user_id` = {$_SESSION['user_id']}"; 

      mysql_query($sql);  
    } 

    // Creates a new conversation, making the given users a member. 
    function create_conversation($user_ids, $subject, $body){ 
      $subject  = mysql_real_escape_string(htmlentities($subject)); 
      $body   = mysql_real_escape_string(htmlentities($body)); 

      mysql_query("INSERT INTO `conversations` (`conversation_subject`) VALUES ('{$subject}')"); 

      $conversation_id = mysql_insert_id(); 

      $sql = "INSERT INTO `conversations_messages` (`conversation_id`, `user_id`, `message_date`, `message_text`) 
          VALUES ({$conversation_id}, {$_SESSION['user_id']}, UNIX_TIMESTAMP(), '{$body}')"; 

      mysql_query($sql); 

      $values = array("({$conversation_id}, {$_SESSION['user_id']}, UNIX_TIMESTAMP(), 0)"); 

      foreach ($user_ids as $user_id){ 
        $user_id = (int)$user_id; 

     $values = array("({$conversation_id}, {$_SESSION['user_id']}, UNIX_TIMESTAMP(), 0)");   } 

      $sql = "INSERT INTO `conversations_members` (`conversation_id`, `user_id`, `conversation_last_view`, `conversation_deleted`) 
          VALUES " . implode(", ", $values); 

          mysql_query($sql); 
    } 


    // Checks to see if the given user is a member of the given conversation. 

    function validate_conversation_id($conversation_id){ 
    $conversation_id = (int)$conversation_id; 

    $sql = "SELECT COUNT(1) 
    FROM `conversations_members` 
    WHERE `conversation_id` = {$conversation_id} 
    AND `user_id` = {$_SESSION['user_id']} 
    AND `conversation_deleted` = 0"; 

    $result = mysql_query($sql); 
    return(mysql_result($result, 0) == 1); 
    } 
    // Adds a message to the given conversation. 
    function add_conversation_message($conversation_id, $text){ 
      $conversation_id  = (int)$conversation_id; 
      $text     = mysql_real_escape_string(htmlentities($text)); 

      $sql = "INSERT INTO `conversations_messages` (`conversation_id`, `user_id`, `message_date`, `message_text`) 
          VALUES ({$conversation_id}, {$_SESSION['user_id']}, UNIX_TIMESTAMP(), '{$text}')"; 

      mysql_query($sql); 

      mysql_query("UPDATE `conversations_members` SET `conversation_deleted` = 0 where `conversation_id = {$conversation_id}"); 
    } 

// Deletes (or marks as deleted) a given conversation. 
function delete_conversation($conversation_id){ 
      $conversation_id = (int)$conversation_id; 

      $sql = "SELECT DISTINCT `conversation_deleted` 
          FROM `conversations_members` 
          WHERE `user_id` != {$_SESSION['user_id']} 
          AND `conversation_id` = {$conversation_id}"; 

      $result = mysql_query($sql); 

      //if (mysql_num_rows($result) == 1 && mysql_result($result, 0) == 1){ 
      if (mysql_num_rows($result) == 0){ 
        mysql_query("DELETE FROM `conversations` WHERE `conversation_id` = {$conversation_id}"); 
        mysql_query("DELETE FROM `conversations_members` WHERE `conversation_id` = {$conversation_id}"); 
        mysql_query("DELETE FROM `conversations_messages` WHERE `conversation_id` = {$conversation_id}"); 
      }else{ 
        $sql = "UPDATE `conversations_members` 
            SET `conversation_deleted` = 1 
            WHERE `conversation_id` = {$conversation_id} 
            AND `user_id` = {$_SESSION['user_id']}"; 

        mysql_query($sql); 

      } 
    } 
    ?> 

private_message.inc.php의 기능을 포함 view_conversation.page.inc.php이있다 출력 :

어레이 (1) 불리언 (TRUE)주의 : 라인 (52)에 /home/u406538221/public_html/public_html/gamma/core/pages/view_conversation.page.inc.php의 foreach에 대한 공급 잘못된 인수()

저는이 포럼, 데이터베이스, PHP 및 MySQL을 완전히 새롭게 익혔습니다.

문제 : 잘못된 인수 은 부울을 반환합니다 - 이유는 무엇입니까? 어떻게 수정해야합니까?

도와주세요.

미리 감사드립니다.

+0

는 왜 두 번 fetch_conversation_messages 함수를 정의? – Hassan

+0

변경했지만 동일한 문제가 발생했습니다 – user3308065

+0

위의 코드를 최신 코드로 업데이트 할 수 있습니까? – Hassan

답변

1

먼저 fetch_conversation_messages 함수는 print_r($messages)을 반환합니다. 이 작업은 $messages 변수 (여기는 Array())가 인쇄되는 곳에서 인쇄되고 true을 반환합니다. 그런 다음 fetch_conversation_messages을 호출 한 후 print_r($messages)을 수행하고 $messagesboolean이므로 print_r1입니다. 그러면 라인 52의 foreach 바로 앞에 $messages 변수가 boolean이고 이는 true이고 여기는 bool(true) 출력의 출처입니다. 따라서 foreach()에 제공된 잘못된 인수에 대한 오류를 제공하는 배열처럼 boolean을 반복하려고합니다. 따라서해야 할 일은 fetch_conversation_messages 함수에서 print_r($messages) 대신에 $messages을 반환하는 것입니다.

편집 :

이 무엇인지 당신 fetch_conversation_messages과 같아야합니다

function fetch_conversation_messages($conversation_id){ 
    $conversation_id = (int)$conversation_id; 

     $sql = "SELECT 
          `conversations_messages`.`message_date`, 
          `conversations_messages`.`message_date` > `conversations_members`.`conversation_last_view` AS `message_unread`, 
          `conversations_message`.`message_text`, 
          `users`.`user_name` 
        FROM `conversations_messages` 
        INNER JOIN `users` ON `conversations_messages`.`user_id` = `users`.`user_id` 
        INNER JOIN `conversations_members` ON `conversations_messages`.`conversation_id` = `conversations_members`.`conversation_id` 
        WHERE `conversations_messages`.`conversation_id` = {$conversation_id} 
        AND `conversations_members`.`user_id` = {$_SESSION['user_id']} 
        ORDER BY `conversations_messages`.`message_date` DESC"; 

    $result = mysql_query($sql); 
    $messages= array(); 
    while ($row = mysql_fetch_assoc($result)){ 
     $messages[] = array(
      'date'   => $row['message_date'], 
      'unread'  => $row['message_unread'], 
      'text'   => $row['message_text'], 
      'user_name'  => $row['user_name'], 
    ); 

    echo mysql_num_rows($result); 
    var_dump($row);  

    } 
    return $messages; 
} 
+0

나는 당신이해야 할 일을했으나 여전히 bool (true)이되었습니다. – user3308065

+0

아직도 오류가 있습니까? – elitechief21

+0

예 오류가 계속 발생합니다. – user3308065

관련 문제