这段代码不起作用的任何特殊原因?我似乎无法解决这个问题

时间:2017-07-11 00:38:33

标签: php html mysql

此页面的目标是检查数据库中的标签表,并生成带有每行标签名称和标签图像的无序列表。以下代码允许我完美地完成这项工作:

<?php
                $sql = "SELECT * FROM tags";

                echo "<ul id='ulTags'>";
                $result = mysqli_query($conn, $sql);

                    while ($row = $result->fetch_assoc()){
                        echo '<div class="imageContainerTags"><a href="specificTag.php?='.$row['tag'].'"><li class="listTags"><h1>'.$row['tag'].'</h1></li><img class="tagThumbnail" src="images/Tags/'.$row['path'] .'" alt="Random image" /></a></div>';
                    }
                echo "</ul>";
        ?>

但是,如果您拥有该权限,我已决定实施从数据库中删除标记的可能性。每个用户都拥有权限,如果您拥有1的权限,则应在每个图像下看到删除按钮。这是具有该功能的更新代码:

<?php
                $userId = $_SESSION['id'];

                $sql = "SELECT * FROM tags";
                $result = mysqli_query($conn, $sql);

                $sql2 = "SELECT * FROM user where id='$userId'";
                $result2 = mysqli_query($conn, $sql2);
                $getResult2 = mysqli_fetch_assoc($result2);

                $userP = $getResult2['permission'];

                echo "<ul id='ulTags'>";
                if (isset($_SESSION['id']) && $userP == 1) {
                    while ($row = $result->fetch_assoc()){
                        echo '<div class="imageContainerTags"><a href="specificTag.php?='.$row['tag'].'"><li class="listTags"><h1>'.$row['tag'].'</h1></li><img class="tagThumbnail" src="images/Tags/'.$row['path'] .'" alt="Random image" /></a></div>';
                        echo "<form method='POST' action='".deleteTag($conn)."'>
                                            <input type='hidden' name='id' value='".$row['id']."'>
                                            <input type='hidden' name='tag' value='".$row['tag']."'>
                                            <input type='hidden' name='path' value='".$row['path']."'>
                                            <button id='delTag' type='submit' name='tagDelete'>Delete Tag</button>
                            </form>";
                    }
                } else {
                    while ($row = $result->fetch_assoc()){
                        echo '<div class="imageContainerTags"><a href="specificTag.php?='.$row['tag'].'"><li class="listTags"><h1>'.$row['tag'].'</h1></li><img class="tagThumbnail" src="images/Tags/'.$row['path'] .'" alt="Random image" /></a></div>';
                    }
                };
                echo "</ul>";
        ?>

不幸的是,代码似乎存在问题,它只回应一个标签,而不是它应该做的所有标签。第一段代码回显了所有标签,但在我尝试添加删除按钮之前。任何线索都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

尝试使用此替换代码中的if语句。

if (isset($_SESSION['id']) && $userP == 1) {
                    while ($row2 = $result->fetch_assoc()){
                        echo '<div class="imageContainerTags"><a href="specificTag.php?='.$row2['tag'].'"><li class="listTags"><h1>'.$row2['tag'].'</h1></li><img class="tagThumbnail" src="images/Tags/'.$row2['path'] .'" alt="Random image" /></a></div>';
                        echo "<form method='POST' action='".deleteTag($conn)."'>
                                            <input type='hidden' name='id' value='".$row2['id']."'>
                                            <input type='hidden' name='tag' value='".$row2['tag']."'>
                                            <input type='hidden' name='path' value='".$row2['path']."'>
                                            <button id='delTag' type='submit' name='tagDelete'>Delete Tag</button>
                            </form>";
                    }
                } else {
                    while ($row2 = $result->fetch_assoc()){
                        echo '<div class="imageContainerTags"><a href="specificTag.php?='.$row2['tag'].'"><li class="listTags"><h1>'.$row2['tag'].'</h1></li><img class="tagThumbnail" src="images/Tags/'.$row2['path'] .'" alt="Random image" /></a></div>';
                    }
                };

答案 1 :(得分:0)

调试的最佳方法是在代码的每个部分插入回声,以查看它出轨的位置。

首先检查输出html页面源,看看标签是否正确回显(没有html错误)。

我会将echo $ result-&gt; num_rows放在if else子句之前,以查看返回的总标签。

如果结果中有多个标签且只显示一个标签,那么我将看到该标签是否是返回结果中的最后一个或第一个标签。

检查这些以开始......

注意:为什么不使用一致的编码风格?

    //One place you use

    $getResult2 = mysqli_fetch_assoc($result2); // functional programming

    // another place you use 

    $row = $result->fetch_assoc(); // OOP programming

    // Stick to one style, preferably OOP

答案 2 :(得分:0)

PHP是服务器端编程语言,HTML表单是客户端。 这里的deleteTag()是一个PHP函数,它在客户端提交表单时没有任何效果。

echo "<form method='POST' action='delete.php'>

其中delete.php具有处理删除所需的逻辑