警告:在第145行的C:\ wamp \ www \ social \ includes \ class-query.php中为foreach()提供的参数无效

时间:2014-04-15 03:58:13

标签: php mysql sql foreach invalid-argument

我的foreach语句出现了无效的参数错误。我正在尝试创建一个页面,从我的数据库中检索消息,在我的收件箱中显示它。这是发生错误的代码。

   public function do_inbox($user_id) {
                    $message_objects = $this->get_message_objects($user_id);

            Line 145 -------->  foreach ( $message_objects as $message ) {?>
                        <div class="status_item">
                            <?php $user = $this->load_user_object($message->message_sender_id); ?>
                            <h3>From: <a href="/social/profile-view.php?uid=<?php echo $user->ID; ?>"><?php echo $user->user_nicename; ?></a></h3>
                            <p><?php echo $message->message_subject; ?></p>
                            <p><?php echo $message->message_content; ?></p>
                        </div>

这是我的完整代码:

<?php
       //class-query.php
    require_once('class-db.php');

    if ( !class_exists('QUERY') ) {
        class QUERY {
            public function load_user_object($user_id) {
                global $db;

                $table = 's_users';

                $query = "
                                SELECT * FROM $table
                                WHERE ID = $user_id
                            ";

                $obj = $db->select($query);

                if ( !$obj ) {
                    return "No user found";
                }

                return $obj[0];
            }

            public function load_all_user_objects() {
                global $db;

                $table = 's_users';

                $query = "
                                SELECT * FROM $table
                            ";

                $obj = $db->select($query);

                if ( !$obj ) {
                    return "No user found";
                }

                return $obj;
            }

            public function get_friends($user_id) {
                global $db;

                $table = 's_friends';

                $query = "
                                SELECT ID, friend_id FROM $table
                                WHERE user_id = '$user_id'
                            ";

                $friends = $db->select($query);

                foreach ( $friends as $friend ) {
                    $friend_ids[] = $friend->friend_id;
                }

                return $friend_ids;
            }

            public function get_status_objects($user_id) {
                global $db;

                $table = 's_status';

                $friend_ids = $this->get_friends($user_id);

                if ( !empty ( $friend_ids ) ) {
                    array_push($friend_ids, $user_id);
                } else {
                    $friend_ids = array($user_id);
                }

                $accepted_ids = implode(', ', $friend_ids);

                $query = "
                                SELECT * FROM $table
                                WHERE user_id IN ($accepted_ids)
                                ORDER BY status_time DESC
                            ";

                $status_objects = $db->select($query);

                return $status_objects;
            }

            public function get_message_objects($user_id) {
                global $db;

                $table = 's_messages';

                $query = "
                                SELECT * FROM $table
                                WHERE message_recipient_id = '$user_id'
                            ";

                $messages = $db->select($query);

                return $messages;
            }

            public function do_user_directory() {
                $users = $this->load_all_user_objects();

                foreach ( $users as $user ) { ?>
                    <div class="directory_item">
                        <h3><a href="/social/profile-view.php?uid=<?php echo $user->ID; ?>"><?php echo $user->user_nicename; ?></a></h3>
                        <p><?php echo $user->user_email; ?></p>
                    </div>
                <?php
                }
            }

            public function do_friends_list($friends_array) {
                foreach ( $friends_array as $friend_id ) {
                    $users[] = $this->load_user_object($friend_id);
                }

                foreach ( $users as $user ) { ?>
                    <div class="directory_item">
                        <h3><a href="/social/profile-view.php?uid=<?php echo $user->ID; ?>"><?php echo $user->user_nicename; ?></a></h3>
                        <p><?php echo $user->user_email; ?></p>
                    </div>
                <?php
                }
            }

            public function do_news_feed($user_id) {
                $status_objects = $this->get_status_objects($user_id);

                foreach ( $status_objects as $status ) {?>
                    <div class="status_item">
                        <?php $user = $this->load_user_object($status->user_ID);  ?>
                        <h3><a href="/social/profile-view.php?uid=<?php echo $user->ID; ?>"><?php echo $user->user_nicename; ?></a></h3>
                        <p><?php echo $status->status_content; ?></p>
                    </div>
                <?php
                }
            }

            public function do_inbox($user_id) {
                $message_objects = $this->get_message_objects($user_id);

                foreach ( $message_objects as $message ) {?>
                    <div class="status_item">
                        <?php $user = $this->load_user_object($message->message_sender_id); ?>
                        <h3>From: <a href="/social/profile-view.php?uid=<?php echo $user->ID; ?>"><?php echo $user->user_nicename; ?></a></h3>
                        <p><?php echo $message->message_subject; ?></p>
                        <p><?php echo $message->message_content; ?></p>
                    </div>
                <?php
                }
            }
        }
    }

    $query = new QUERY;
?>

这是我的插入php页面,它运行我的大部分查询:

<?php
    //class-insert php page
    require_once('class-db.php');


    if ( !class_exists('INSERT') ) {
        class INSERT {
            public function update_user($user_id, $postdata) {
                global $db;

                $table = 's_users';

                $query = "
                                UPDATE $table
                                SET user_email='$postdata[user_email]', user_pass='$postdata[user_pass]', user_nicename='$postdata[user_nicename]'
                                WHERE ID=$user_id
                            ";

                return $db->update($query);
            }


            public function add_friend($user_id, $friend_id) {
                global $db;

                $table = 's_friends';

                $query = "
                                INSERT INTO $table (user_id, friend_id)
                                VALUES ('$user_id', '$friend_id')
                            ";

                return $db->insert($query);
            }

            public function remove_friend($user_id, $friend_id) {
                global $db;

                $table = 's_friends';

                $query = "
                                DELETE FROM $table 
                                WHERE user_id = '$user_id'
                                AND friend_id = '$friend_id'
                            ";

                return $db->insert($query);

            }

            public function add_status($user_id, $_my_post) {
                global $db;

                $table = 's_status';

                $query = "
                                INSERT INTO $table (user_id, status_time, status_content)
                                VALUES ($user_id, '$_my_post[status_time]', '$_my_post[status_content]')
                            ";

                return $db->insert($query);

            }

            public function send_message($_my_post) {
                global $db;

                $table = 's_messages';

                $query = "
                                INSERT INTO $table (message_time, message_sender_id, message_recipient_id, message_subject, message_content)
                                VALUES ('$_my_post[message_time]', '$_my_post[message_sender_id]', '$_my_post[message_recipient_id]', '$_my_post[message_subject]', '$_my_post[message_content]')
                            ";

                return $db->insert($query);
            }
        }
    }


    $insert = new INSERT;
?>

我也收到通知:未定义的变量:第38行的C:\ wamp \ www \ social \ includes \ class-db.php结果 这是在我的class-db页面上。这是代码:

<?php
     //class-db.php
    if ( !class_exists ('DB') ) {
        class DB {
            public function __construct() {
                $mysqli = new mysqli('localhost', 'root', 'test123', 'social');

                if ($mysqli->connect_errno) {
                    printf("Connect failed %s\n", $mysqli->connect_error);
                    exit();
                }

                $this->connection =  $mysqli;
            }

            public function insert($query) {                
                $result = $this->connection->query($query);

                return $result;
            }

            public function update($query) {
                $result = $this->connection->query($query);

                return $result;
            }

            public function select($query) {                            
                $result = $this->connection->query($query);

                if ( !$result ) {
                    return false;
                }

                while ( $obj = $result->fetch_object() ) {
                    $results[] = $obj;
                }

    Line 38 ----------------->  return $results;
            }
        }
    }

    $db = new DB;
?>

任何帮助将不胜感激。我想在youtube上复制本教程:https://www.youtube.com/watch?v=Wgbmgf84ZOo

2 个答案:

答案 0 :(得分:0)

这是因为$ user_id为null。你能告诉代码的哪一行调用do_inbox($user_id)吗?

答案 1 :(得分:0)

您必须在class-db.php中更改select函数,如下所示:

public function select($query) {                            
  $result = $this->connection->query($query);

  if ( !$result->fetch_object()) {
    $obj = $result->fetch_object();
    $results = array();
    do {
      array_push($results, array($obj));
    while($obj = $result->fetch_object());              
  }
  return $results;
}