Защо този код не влиза в else блока?

vinsbg

Registered
Защо следния код не влиза в ELSE блока. Когато няма открити тагове не показва "Към видеото няма добавени тагове", а показва бутон, който нормално показва съответния таг но в линка е:
tagsPreview.php?tag_id="
Код:
                $tags = $pdo->prepare("Select * From `video` p LEFT JOIN `tags_image` tp ON p.video_id = tp.video_id LEFT JOIN `tag` t ON tp.tags_id = t.tag_id WHERE p.video_id = ?");
                $tags -> bindParam(1, $row['video_id'], PDO::PARAM_INT);
                $tags -> execute();
                $tags = $tags->fetchAll();
                foreach($tags as $tag) {
                  if($tag){
                    echo '<li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id='.$tag['tag_id'].'">'.$tag['tag_name'].'</a></li>';  
                  }
                  else {
                    echo '<li style="margin-top: -13px;"><a href="">Към видеото няма добавени тагове</a></li>';
                  }                  
                }
 
teroristd каза:
Проверявай if($tag == null) защото променливата таг винаги съществува.
Ми не .. така на видео, което има 5 тага получавам 5 пъти "Към видеото няма добавени тагове"
 
Така на видо, което има тагове си ги показва, а на видео, което няма тагове показва празно място и като посоча с мишката там има линк, който е tagsPreview.php?tag_id=" ... тоест от IF-а .. не от ELSE-a
 
Идея си нямам дали ще сработи но пробвай така

Код:
$tags = $pdo->prepare("Select * From `video` p LEFT JOIN `tags_image` tp ON p.video_id = tp.video_id LEFT JOIN `tag` t ON tp.tags_id = t.tag_id WHERE p.video_id = ?"); 
                $tags -> bindParam(1, $row['video_id'], PDO::PARAM_INT); 
                $tags -> execute(); 
                $tags = $tags->fetchAll();

if($tags == false){
echo 'Няма тагове';
}
else{
 foreach($tags as $tag) { 
echo '<li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id='.$tag['tag_id'].'">'.$tag['tag_name'].'</a></li>';
}
}
 
vinsbg каза:
Така на видо, което има тагове си ги показва, а на видео, което няма тагове показва празно място и като посоча с мишката там има линк, който е tagsPreview.php?tag_id=" ... тоест от IF-а .. не от ELSE-a
Няма логик да е така.
 
teroristd каза:
Идея си нямам дали ще сработи но пробвай така

Код:
$tags = $pdo->prepare("Select * From `video` p LEFT JOIN `tags_image` tp ON p.video_id = tp.video_id LEFT JOIN `tag` t ON tp.tags_id = t.tag_id WHERE p.video_id = ?"); 
                $tags -> bindParam(1, $row['video_id'], PDO::PARAM_INT); 
                $tags -> execute(); 
                $tags = $tags->fetchAll();

if($tags == false){
echo 'Няма тагове';
}
else{
 foreach($tags as $tag) { 
echo '<li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id='.$tag['tag_id'].'">'.$tag['tag_name'].'</a></li>';
}
}

Същото, където има тагове ги показва, а на другото е празно място с линка...
uphero каза:
Няма логик да е така.
Наистина няма, но се случва и нямам идея защо...
djman каза:
if(count($tags))
foreach...
else
no tags
Това как точно би изглеждали?
 
Таблицата с таговете държи тагове за няколко различни неща.
има тагове за снимки, видео, гифове
tags_id, image_id, video_id, gif_id

Дали е възможно нещо от тук да става ибъркването? Като на една страница изкарвам само едно от тези неща.. в смисъл нямам страница на която да трябва да изкарам и тагове на снимки, тагове на видеа и т.н. .. само едно от тях.
 
PHP:
   $tags = $pdo->prepare("Select * From `video` p LEFT JOIN `tags_image` tp ON p.video_id = tp.video_id LEFT JOIN `tag` t ON tp.tags_id = t.tag_id WHERE p.video_id = ?");
                $tags -> bindParam(1, $row['video_id'], PDO::PARAM_INT);
                $tags -> execute();
                $tags = $tags->fetchAll();

              
  if(count($tags)>0) {
  foreach($tags as $tag) {
                    echo '<li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id='.$tag['tag_id'].'">'.$tag['tag_name'].'</a></li>';  
                  }
}
else {
                    echo '<li style="margin-top: -13px;"><a href="">Към видеото няма добавени тагове</a></li>';
                  }

Много лоша практика да пишеш заявка във дизайна.. тези инлайн стилове не им е там работата. :?:
 
Същото. Поствам от сорса на страницата точно, какво се получава:
video_id=1
Код:
<div class="tags">
            <ul>                                       
                <li>Тагове: </li><li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id=2">Автомобили</a></li>
</ul>
</div>
video_id=2
Код:
        <div class="tags">
            <ul> 
                                            
                <li>Тагове: </li><li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id="></a></li></ul>
        </div>
video_id=3
Код:
        <div class="tags">
            <ul> 
                                            
                <li>Тагове: </li><li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id="></a></li></ul>
        </div>

Като в базата наистина имам тагове само за video_id=1.. другите нямат и би трябвало else-a да излезе, но не...
За заявките и стиловете съм съгласен, но засега ще е така :)
 
Като минаваш през резултат от заявка обикновено се ползва този вариант:
PHP:
while($tags = $stmt->fetch())
    echo $tags['name'];
а не
PHP:
$result = $stmt->fetchAll();
foreach($result) { ... }
 
.....
PHP:
foreach($tags as $tag) {
	if($tag['tag_id']){
		echo '<li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id='.$tag['tag_id'].'">'.$tag['tag_name'].'</a></li>'; 
    } else {
		echo '<li style="margin-top: -13px;"><a href="">Към видеото няма добавени тагове</a></li>';
    }                 
}
?
 
vinsbg каза:
djman каза:
if(count($tags))
foreach...
else
no tags
Това как точно би изглеждали?

Просто сложи foreach-a, който изкарва таговете вътре в if-a.
Код:
if(count($tags))
{
     foreach($tags as $tag)
            echo $tag;
}
else
{
        echo 'no tags';
}

@anonimen е прав. Но дори тогава пак if-a ще е извън (и ще е друго условието)...
 
imagination каза:
.....
PHP:
foreach($tags as $tag) {
	if($tag['tag_id']){
		echo '<li style="margin-top: -13px;"><a href="tagsPreview.php?tag_id='.$tag['tag_id'].'">'.$tag['tag_name'].'</a></li>'; 
    } else {
		echo '<li style="margin-top: -13px;"><a href="">Към видеото няма добавени тагове</a></li>';
    }                 
}
?
Това свърши работа.. Благодаря! :?:
 

Back
Горе