tweetImage не показывает изображение

#php #mysql #sql #regex

#php #mysql #sql #регулярное выражение

Вопрос:

Вот моя строка 51,

 <img src="'.BASE_URL.$tweet->tweetImage.'"/>
  

Вот мой код.

 <?php
class Tweet extends User
{
    
    function _construct($pdo)
    {
        $this->pdo = $pdo;
    }
    public function tweets($user_id)
    {
        $stmt = $this->pdo->prepare("SELECT * FROM `tweets` LEFT JOIN `users` ON `tweetBy` = `user_id` WHERE `tweetBy` = :user_id AND `retweetID` = '0' OR `tweetBy` = `user_id` AND `retweetBy` != :user_id");
        $stmt->bindParam(":user_id", $user_id, PDO::PARAM_INT);
        $stmt->execute();
        $tweets = $stmt->fetchAll(PDO::FETCH_OBJ);
        
        foreach($tweets as $tweet)
        {
            $likes = $this->likes($user_id, $tweet->tweetID); 
            $retweet = $this->checkRetweet($tweet->tweetID, $user_id);
            $user = $this->userData($tweet->retweetBy);
            echo '<div class="all-tweet">
<div class="t-show-wrap">   
 <div class="t-show-inner">
 '.((!empty($tweet->retweetMsg) amp;amp; $tweet->tweetID === $retweet['tweetID'] or $tweet->retweetID > 0) ? '  
    <div class="t-show-banner">
        <div class="t-show-banner-inner">
            <span><i class="fa fa-retweet" aria-hidden="true"></i></span><span>'.$user->screenName.' Retweeted</span>
        </div>
    </div>' 
    : '').'
    '.((!empty($tweet->retweetMsg) amp;amp; $tweet->tweetID === $retweet['tweetID'] OR $tweet->retweetID > 0) ? '<div class="t-show-head">
                      <div class="t-show-img">
                            <img src="'.BASE_URL.$user->profileImage.'"/>
                        </div>
                <div class="t-s-head-content">
                    <div class="t-h-c-name">
                        <span><a href="'.BASE_URL.$user->username.'">'.$user->screenName.'</a></span>
                        <span>@'.$user->username.'</span>
                        <span>'.$retweet['postedOn'].'</span>
                    </div>
                    <div class="t-h-c-dis">
                        '.$this->getTweetLinks($tweet->retweetMsg).'
                    </div>
                </div>
            </div>
            <div class="t-s-b-inner">
                <div class="t-s-b-inner-in">
                    <div class="retweet-t-s-b-inner">
                    '.((!empty($tweet->tweetImage)) ? '
                        <div class="retweet-t-s-b-inner-left">
                            <img src="'.BASE_URL.$tweet->tweetImage.'"/>    
                        </div>' : '').'
                        <div class="retweet-t-s-b-inner-right">
                            <div class="t-h-c-name">
                                <span><a href="'.BASE_URL.$tweet->username.'">'.$tweet->screenName.'</a></span>
                                <span>@'.$tweet->username.'</span>
                                <span>'.$tweet->postedOn.'</span>
                            </div>
                            <div class="retweet-t-s-b-inner-right-text">        
                                '.$tweet->status.'
                            </div>
                        </div>
                    </div>
                </div>
            </div>' : '
    <div class="t-show-popup">
        <div class="t-show-head">
            <div class="t-show-img">
                <img src="'.$tweet->profileImage.'"/>
            </div>
            <div class="t-s-head-content">
                <div class="t-h-c-name">
                    <span><a href="'.$tweet->username.'">'.$tweet->screenName.'</a></span>
                    <span>@'.$tweet->username.'</span>
                    <span>'.$tweet->postedOn.'</span>
                </div>
                <div class="t-h-c-dis">
                    '.$this->getTweetLinks($tweet->status).'
                </div>
            </div>
        </div>'.
        ((!empty($tweet->tweetImage)) ? 
         '<!--tweet show head end-->
        <div class="t-show-body">
          <div class="t-s-b-inner">
           <div class="t-s-b-inner-in">
             <img src="'.$tweet->tweetImage.'" class="imagePopup"/>
           </div>
          </div>
        </div>
        <!--tweet show body end-->
        ' : '').'
        
     </div>').'
    <div class="t-show-footer">
        <div class="t-s-f-right">
            <ul> 
                <li><button><i class="fa fa-share" aria-hidden="true"></i></button></li>    
                <li>'.((isset($retweet['retweetID']) ? $retweet['retweetID'] === $tweet->tweetID : '') ? 
                '<button class="retweeted" data-tweet="'.$tweet->tweetID.'" data-user="'.$tweet->tweetBy.'"><i class="fa fa-retweet" aria-hidden="true"></i><span class = "retweetsCount">'.$tweet->retweetCount.'</span></button>' : 
                '<button class="retweet" data-tweet="'.$tweet->tweetID.'" data-user="'.$tweet->tweetBy.'"><i class="fa fa-retweet" aria-hidden="true"></i><span class = "retweetsCount">'.(($tweet->retweetCount > 0) ? $tweet->retweetCount : '').'</span></button>').'
                </li>
                <li>'.((isset($likes['likeOn']) ? $likes['likeOn'] === $tweet->tweetID : '') ? 
                                    '<button class="unlike-btn" data-tweet="'.$tweet->tweetID.'" data-user="'.$tweet->tweetBy.'"><i class="fa fa-heart" aria-hidden="true"></i><span class="likesCounter">'.(($tweet->likesCount > 0) ? $tweet->likesCount : '' ).'</span></button>' : 
                                    '<button class="like-btn" data-tweet="'.$tweet->tweetID.'" data-user="'.$tweet->tweetBy.'"><i class="fa fa-heart-o" aria-hidden="true"></i><span class="likesCounter">'.(($tweet->likesCount > 0) ? $tweet->likesCount : '' ).'</span></button>').'
                                </li>                   
                    <li>
                    <a href="#" class="more"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></a>
                    <ul> 
                      <li><label class="deleteTweet">Delete Tweet</label></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>
</div>
</div>';
        }
    } 
    public function getTrendByHash($hashtag){
        $stmt = $this->pdo->prepare("SELECT * FROM `trends` WHERE `hashtag` LIKE :hashtag LIMIT 5");
        $stmt->bindValue(":hashtag", $hashtag.'%');
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }
    
    public function getMention($mention)
    {
        $stmt = $this->pdo->prepare("SELECT `user_id`,`username`,`screenName`,`profileImage` FROM `users` WHERE `username` LIKE :mention OR `screenName` LIKE :mention LIMIT 5");
        $stmt->bindValue(':mention', $mention.'%');
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }
    
    public function addTrend($hashtag)
    {
        preg_match_all("/# ([a-zA-Z0-9_] )/i", $hashtag, $matches);
        if($matches)
        {
            $result = array_values($matches[1]);
        }
        $sql = "INSERT INTO `trends` (`hashtag`, `createdOn`) VALUES (:hashtag, CURRENT_TIMESTAMP)";
        foreach ($result as $trend) {
            if($stmt = $this->pdo->prepare($sql)){
                $stmt->execute(array(':hashtag' => $trend));
            }
        }
    }
    public function getTweetLinks($tweet)
    {
        $tweet = preg_replace("/(https?://)([w] .)([w.] )/", "<a href='$0' target='_blank'>$0</a>", $tweet);
        $tweet = preg_replace("/#([w] )/", "<a href='http://localhost/twitter/hashtag/$1'>$0</a>", $tweet);
        $tweet = preg_replace("/@([w] )/", "<a href='http://localhost/twitter/$1'>$0</a>", $tweet);
        return $tweet;
    }
    
    public function getPopupTweet($tweet_id){
        $stmt = $this->pdo->prepare("SELECT * FROM `tweets`,`users` WHERE `tweetID` = :tweet_id AND `tweetBy` = `user_id`");
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_OBJ);
    }
    
    public function retweet($tweet_id, $user_id, $get_id, $comment)
    {
        $stmt = $this->pdo->prepare("UPDATE `tweets` SET `retweetCount` = `retweetCount` 1 WHERE `tweetID` = :tweet_id AND `tweetBy` = :get_id");
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->bindParam(":get_id", $get_id, PDO::PARAM_INT);
        $stmt->execute();
        
        $stmt = $this->pdo->prepare("INSERT INTO `tweets` (`status`,`tweetBy`,`retweetID`,`retweetBy`,`tweetImage`,`postedOn`,`likesCount`,`retweetCount`,`retweetMsg`) SELECT `status`,`tweetBy`,`tweetID`,:user_id,CURRENT_TIMESTAMP`tweetImage`,`postedOn`,`likesCount`,`retweetCount`,:retweetMsg FROM `tweets` WHERE `tweetID` = :tweet_id");
        $stmt->bindParam(":user_id", $user_id, PDO::PARAM_INT);
        $stmt->bindParam(":retweetMsg", $comment, PDO::PARAM_STR);
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->execute();
    }
    
    public function checkRetweet($tweet_id, $user_id){
        $stmt = $this->pdo->prepare("SELECT * FROM `tweets` WHERE `retweetID` = :tweet_id AND `retweetBy` = :user_id OR `tweetID` = :tweet_id and `retweetBy` = :user_id");
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->bindParam(":user_id", $user_id, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
    
    public function addLike($user_id, $tweet_id, $get_id)
    {
        $stmt = $this->pdo->prepare("UPDATE `tweets` SET `likesCount` = `likesCount`  1 WHERE `tweetID` = :tweet_id");
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->execute();
        
        $this->create('likes', array('likeBy' => $user_id, 'likeOn' => $tweet_id));
    }
    
        public function unlike($user_id, $tweet_id, $get_id)
    {
        $stmt = $this->pdo->prepare("UPDATE `tweets` SET `likesCount` = `likesCount` -1 WHERE `tweetID` = :tweet_id");
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->execute();
        
        $this->create('likes', array('likeBy' => $user_id, 'likeOn' => $tweet_id));
    }
    
    public function likes($user_id, $tweet_id){
        $stmt = $this->pdo->prepare("SELECT * FROM `likes` WHERE `likeBy` = :user_id AND `likeOn` = :tweet_id");
        $stmt->bindParam(":user_id", $user_id, PDO::PARAM_INT);
        $stmt->bindParam(":tweet_id", $tweet_id, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    } 
}
?><br><br>
  

Когда я его выполняю
Я ПОЛУЧАЮ ЭТО

Когда я заменяю ‘tweetImage’ на ‘profileImage’ в строке 51.My Изображение профиля успешно загружается вместо пустого эскиза.Я хочу, чтобы tweetImage, загруженный пользователем, был загружен вместо пустой миниатюры.Кажется, я не могу понять многого, поскольку я неделю новичок в PHP.

Вот мой «home.php «, Это моя главная страница, и здесь определены profileImage и tweetImage.

 <?php
    include 'core/init.php';
    $user_id = $_SESSION['user_id'];
    $user = $getFromU->userData($user_id);
    if($getFromU->loggedIn() === false)
    {
        header('Location: index.php');
    }
    
    if(isset($_POST['tweet']))
    {
        $status = $getFromU->checkinput($_POST['status']);
        $tweetImage = '';
        
        if(!empty($status) or !empty($_FILES['file']['name'][0]))
        {
            if(!empty($_FILES['file']['name'][0]))
            {
                $tweetImage = $getFromU->uploadImage($_FILES['file']);
            }
            
            if(strlen($status) > 140)
            {
                $error = "The text of your tweet is too long!";
            }
            $getFromU->create('tweets' ,array('status' => $status, 'tweetBy' => $user_id, 'tweetImage' => $tweetImage, 'postedOn' => date('Y-m-d H:i:s')));
            preg_match_all("/# ([a-zA-Z0-9_] )/i", $status, $hashtag);
            
            if(!empty($hashtag))
            {
                $getFromT->addTrend($status);
            }
        }
        else
        {
            $error = "Try adding an image/text then click tweet!!";
        }
    }
?>

<!DOCTYPE HTML> 
 <html>
    <head>
        <title>Tweety</title>
          <meta charset="UTF-8" />
          <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.css"/>  
          <link rel="stylesheet" href="assets/css/style-complete.css"/> 
          <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>     
    </head>
    <!--Helvetica Neue-->
<body>
<div class="wrapper">
<!-- header wrapper -->
<div class="header-wrapper">

<div class="nav-container">
    <!-- Nav -->
    <div class="nav">
        
        <div class="nav-left">
            <ul>
                <li><a href="#"><i class="fa fa-home" aria-hidden="true"></i>Home</a></li>
                <li><a href="i/notifications"><i class="fa fa-bell" aria-hidden="true"></i>Notification</a></li>
                <li><i class="fa fa-envelope" aria-hidden="true"></i>Messages</li>
            </ul>
        </div><!-- nav left ends-->

        <div class="nav-right">
            <ul>
                <li>
                    <input type="text" placeholder="Search" class="search"/>
                    <i class="fa fa-search" aria-hidden="true"></i>
                    <div class="search-result">         
                    </div>
                </li>

                <li class="hover"><label class="drop-label" for="drop-wrap1"><img src="<?php echo $user->profileImage;?>"/></label>
                <input type="checkbox" id="drop-wrap1">
                <div class="drop-wrap">
                    <div class="drop-inner">
                        <ul>
                            <li><?php echo $user->username;?></a></li>
                            <li><a href="settings/account">Settings</a></li>
                            <li><a href="includes/logout.php">Log out</a></li>
                        </ul>
                    </div>
                </div>
                </li>
                <li><label class="addTweetBtn">Tweet</label></li>
            </ul>
        </div><!-- nav right ends-->

    </div><!-- nav ends -->

</div><!-- nav container ends -->

</div><!-- header wrapper end -->

<script type="text/javascript" src = "assets/js/search.js"></script>
<script type="text/javascript" src = "assets/js/hashtag.js"></script>

<!---Inner wrapper-->
<div class="inner-wrapper">
<div class="in-wrapper">
    <div class="in-full-wrap">
        <div class="in-left">
            <div class="in-left-wrap">
        <div class="info-box">
            <div class="info-inner">
                <div class="info-in-head">
                    <!-- PROFILE-COVER-IMAGE -->
                    <img src="<?php echo $user->profileCover;?>"/>
                </div><!-- info in head end -->
                <div class="info-in-body">
                    <div class="in-b-box">
                        <div class="in-b-img">
                        <!-- PROFILE-IMAGE -->
                            <img src="<?php echo $user->profileImage;?>"/>
                        </div>
                    </div><!--  in b box end-->
                    <div class="info-body-name">
                        <div class="in-b-name">
                            <div><a href="<?php echo $user->username;?>"><?php echo $user->screenName;?></a></div>
                            <span><small><a href="<?php echo $user->username;?>"><?php echo $user->username;?></a></small></span>
                        </div><!-- in b name end-->
                    </div><!-- info body name end-->
                </div><!-- info in body end-->
                <div class="info-in-footer">
                    <div class="number-wrapper">
                        <div class="num-box">
                            <div class="num-head">
                                TWEETS
                            </div>
                            <div class="num-body">
                                10
                            </div>
                        </div>
                        <div class="num-box">
                            <div class="num-head">
                                FOLLOWING
                            </div>
                            <div class="num-body">
                                <span class="count-following"><?php echo $user->following;?></span>
                            </div>
                        </div>
                        <div class="num-box">
                            <div class="num-head">
                                FOLLOWERS
                            </div>
                            <div class="num-body">
                                <span class="count-followers"><?php echo $user->followers;?></span>
                            </div>
                        </div>  
                    </div><!-- mumber wrapper-->
                </div><!-- info in footer -->
            </div><!-- info inner end -->
        </div><!-- info box end-->

    <!--==TRENDS==-->
      <!---TRENDS HERE-->
    <!--==TRENDS==-->

    </div><!-- in left wrap-->
        </div><!-- in left end-->
        <div class="in-center">
            <div class="in-center-wrap">
                <!--TWEET WRAPPER-->
                <div class="tweet-wrap">
                    <div class="tweet-inner">
                         <div class="tweet-h-left">
                            <div class="tweet-h-img">
                            <!-- PROFILE-IMAGE -->
                                <img src="<?php echo $user->profileImage;?>"/>
                            </div>
                         </div>
                         <div class="tweet-body">
                         <form method="post" enctype="multipart/form-data">
                            <textarea class="status" name="status" placeholder="Type Something here!" rows="4" cols="50"></textarea>
                            <div class="hash-box">
                                <ul>
                                </ul>
                            </div>
                         </div>
                         <div class="tweet-footer">
                            <div class="t-fo-left">
                                <ul>
                                    <input type="file" name="file" id="file"/>
                                    <li><label for="file"><i class="fa fa-camera" aria-hidden="true"></i></label>
                                    <span class="tweet-error"><?php if(isset($error)){echo $error;}else if(isset($imageError)){echo $imageError;}?></span>
                                    </li>
                                </ul>
                            </div>
                            <div class="t-fo-right">
                                <span id="count">140</span>
                                <input type="submit" name="tweet" value="tweet"/>
                        </form>
                            </div>
                         </div>
                    </div>
                </div><!--TWEET WRAP END-->

            
                <!--Tweet SHOW WRAPPER-->
                 <div class="tweets">
                    <?php $getFromT->tweets($user_id);?>
                 </div>
                <!--TWEETS SHOW WRAPPER-->

                <div class="loading-div">
                    <img id="loader" src="assets/images/loading.svg" style="display: none;"/> 
                </div>
                <div class="popupTweet"></div>
                <!--Tweet END WRAPER-->
            <script type="text/javascript" src = "assets/js/like.js"></script>
            <script type="text/javascript" src = "assets/js/retweet.js"></script>
            </div><!-- in left wrap-->
        </div><!-- in center end -->

        <div class="in-right">
            <div class="in-right-wrap">

            <!--Who To Follow-->
              <!--WHO_TO_FOLLOW HERE-->
            <!--Who To Follow-->

            </div><!-- in left wrap-->

        </div><!-- in right end -->

    </div><!--in full wrap end-->

</div><!-- in wrappper ends-->
</div><!-- inner wrapper ends-->
</div><!-- ends wrapper -->
</body>

</html>
  

ЭТО ТО, ЧТО я ПРОБОВАЛ:

  1. Удален базовый URL перед изображением твита; как это '.$tweet->tweetImage.' ИЛИ <img src="'.$tweet->tweetImage.'" class="imagePopup"/>
  2. Попытался «Проверить элемент на миниатюре пустого изображения», чтобы найти ошибку в строке 51.
  3. Я попытался найти аналогичный вопрос в stackoverflow, но не смог его найти.

    Редактировать:
    ВЫ МОЖЕТЕ ПОСМОТРЕТЬ НА ЭТО, ЧТОБЫ НАЙТИ ЧТО-ТО ПОЛЕЗНОЕ

Любые предложения, замечания, ответы будут оценены!

Комментарии:

1. Итак, как выглядит фактический HTML, который это создает? Есть ли правильный URL-адрес в src атрибуте изображения, или, возможно, какое-то сообщение об ошибке попало в выходные данные? (Включены ли у вас надлежащие отчеты об ошибках PHP? Если нет, пожалуйста, перейдите и сделайте это в первую очередь сейчас!) Что говорит консоль браузера, показывает ли она 404 для запроса URL-адреса изображения?

2.Вот как настроен мой отчет об ошибках. error_reporting=E_ALL amp; ~E_DEPRECATED amp; ~E_STRICT Нужно ли мне что-либо менять?.Все остальное в моем выводе home.php работает нормально, я просто не получаю tweetImage вместо этого

3. Хорошо, это отвечает на один из вопросов, которые вам задавали.

4. ВОТ ВЫВОД HOME.PHP Ошибка "Notice: Trying to access array offset on value of type bool in C:xampphtdocstwittercoreclassestweet.php ..." , вероятно, не связана с моей ошибкой «tweetImage».

Ответ №1:

В вашей таблице db tweets.tweetImage столбцом является datetime. Все строки пусты, за исключением последней, которая является отметкой времени.

Измените его на путь к файлу или uri, и после этого он должен работать.