2017-07-06 132 views
-1

我创建的项目不是为了营利,而是有分页问题。第一个想法是“加载更多”< - 但它只是在梦中。也许MySQL的语法是错误的。如何解决这个问题?也许有更好的解决方案?我尝试了所有组合“..”,“..”,“`。这也可以通过使用SQL注入来利用?PHP MySQLi分页LIMIT,WHERE和ORDER BY`date` DESC问题

MySQLi connection: 


$mysqli = new mysqli('localhost','root','','tablename'); 
if ($mysqli->connect_error) { 
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error); 
} 
/* Change character set to utf8 */ 
if (!$mysqli->set_charset("utf8")) { 
    printf("Error loading character set utf8: %s\n", $mysqli->error); 
    exit(); 
} 

    Paggination: 

    $items_per_page = 5; 
    $login = $_SESSION['login']; 
    $per_page = $items_per_page; 
    if (isset($_GET['page'])) { 
    $page = $_GET['page']; 
    }else { 
    $page = 1; 
    } 
    $start_from = ($page-1) * $per_page; 
    //Selecting the data from db 
    $date = $mysqli->query("SELECT post_id FROM posts WHERE posts_author = '.$login.' ORDER BY `date` DESC LIMIT $start_from, $per_page"); 
    while($row = $date->fetch_array()){ 
    echo $row["post_id"]; 
    } 
    // 



    //Select all from DB 
    $query = $mysqli->query("SELECT post_id FROM posts WHERE posts_author='$login' ORDER BY date DESC"); 
    $result = mysqli_query($mysqli, $query); 
    $total_records = mysqli_num_rows($result); 
    $total_pages = ceil($total_records/$per_page); 
    //Going to first page 
    echo '<a href="' .ABSOLUTE_URL. '/post/1">first page</a> '; 
    for ($i=1; $i<=$total_pages; $i++){ 
    echo '<a href="' .ABSOLUTE_URL. '/post/'.$i.'">'.$i.'</a> '; 
    }; 
    // Going to last page 
    echo '<a href="' .ABSOLUTE_URL. '/post/'.$total_pages.'">last page</a> '; 
+1

_“这也可以通过使用SQL注入来利用?” - 当然可以。为什么你甚至不得不问这个问题 - 你没有读到SQL注入的问题究竟是什么?如果您不明白这一点,那么您已经知道所示的代码很脆弱。 _“如何解决这个问题?”_--明确地说,不仅仅是将它倾倒在这里让我们弄清楚什么是错误的。请阅读[问],然后给我们一个适当的问题描述。 – CBroe

+0

我没有看到这样做的原因,他只是要求帮助外面,我想你是所有谁downvoted只是寻找徽章.. – Ultrazz008

+0

而不是做'mysqli_num_rows($结果);'选择所有记录后,你可以做'SELECT COUNT(1)FROM posts WHERE posts_author =?'并得到结果。这也是开始使用参数化查询和准备语句的好地方。正如你的代码很容易迁移到使用它,你将不必担心SQL注入。 – apokryfos

回答

0

您的代码可以被利用, 你应该考虑使用mysqli_real_escape_string的:http://php.net/manual/en/mysqli.real-escape-string.php

窃听器,我看到它在这里:

//Selecting the data from db 
    $date = $mysqli->query("SELECT post_id FROM posts WHERE posts_author = '.$login.' ORDER BY `date` DESC LIMIT $start_from, $per_page"); 
    while($row = $date->fetch_array()){ 
    echo $row["post_id"]; 
    } 

您使用单引号与点的'.$login.'而不是使用双引号,并且您的查询应该可以正常执行。

如果您还有其他问题,请更新答案,您卡在哪里,什么不工作以及您尝试过什么。