PHP 和 MySQL 查询输出数据两次


PHP and MySQL query outputting data twice

我有一个CMS页面模块,当你进入一个页面时,它会显示两次。这就是调用函数的内容:

$pages = new pages;
if(isset($_GET['action']) && ($_GET['action'] == "pages")){
if($_GET['action'] === 'pages' && isset($_GET['page'])){
$pages->pages();
} elseif ($_GET['action'] === 'pages' && !isset($_GET['page'])) {
$pages->pagelist();
}
$pages->pagesAdminBar();
if(isset($_GET['mode'])){
if($_GET['mode'] == "edit"){
$pages->editPage();
}
if($_GET['mode'] == "addpage"){
$pages->addpage();
}
if($_GET['mode'] == "pageadmin"){
$pages->pageadmin();
}
$pages->pagesAdminBar();
}
}

这是函数:

public function pages(){
    global $dbc, $parser, $layout, $main, $settings, $core;
        if(isset($_GET['page'])){
        $page = mysqli_real_escape_string($dbc, $_GET['page']);
        if(!isset($_GET['page']) && !isset($_GET['action'])){
        $page = $settings['home_display'];
        }
        $query = "SELECT * FROM pages WHERE pagename = '$page'";
        $data = mysqli_query($dbc, $query);
        while ($row = mysqli_fetch_array($data)) {
            echo '<div class="shadowbar">';
                echo'<h3>' . $row['pagename'] . '</h3>';
            $parsed = $parser->parse($row['body']);
                echo '<pre>'.$parsed.'</pre>';
            echo '</div>'; 
    }
    }
    }

但是当我转到浏览器中的页面时,它会显示两次查询数据。

我认为你在 pages(( 中的代码被调用了两次,因为你的类没有构造函数,而且你有两行 $pages = new pages;$pages->pages();产生相同的结果。

尝试 DISTINCT 选择数据。它将合并相同的行作为一行。

SELECT DISTINCT * FROM pages WHERE pagename = '$page'

尝试这可能是有效的,因为有时在while循环中调用$rows = mysqli_fetch_array($data(一定是问题。

public function pages(){
    global $dbc, $parser, $layout, $main, $settings, $core;
        if(isset($_GET['page'])){
        $page = mysqli_real_escape_string($dbc, $_GET['page']);
        if(!isset($_GET['page']) && !isset($_GET['action'])){
        $page = $settings['home_display'];
        }
        $query = "SELECT * FROM pages WHERE pagename = '$page'";
        $data = mysqli_query($dbc, $query);
        $row = mysqli_fetch_array($data);
        echo '<div class="shadowbar">';
        echo'<h3>' . $row['pagename'] . '</h3>';
        $parsed = $parser->parse($row['body']);
        echo '<pre>'.$parsed.'</pre>';
        echo '</div>'; 
    }
    }