2017-07-06 8 views
-1

私は利益のためにプロジェクトを作成しており、ページネーションに問題があります。最初のアイデアは「もっとロードする」<ですが、それは夢の中だけです。 MySQLの構文が間違っている可能性があります。このコードを修正するには?多分もっと良い解決策がありますか?私はすべての組み合わせを試しました ".."、 ".."、 "。これはSQLインジェクションを利用することによって悪用することもできますか?PHP MySQLiページネーションLIMIT、日付と日付による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インジェクションの問題が何であるかを読んでいませんでしたか?それを理解するのが面倒な場合は、表示されているコードが脆弱であることを既に知っているでしょう。 _ "このコードを修正するにはどうすればいいですか?" _ - 確かに最初に間違っているものが何であるか把握するためにここにダンプするだけです。 [ask]を読んでから、適切な問題の説明をしてください。 – CBroe

+0

私はこれをdownvotingの理由は表示されません、彼は少しの助けを求めている、私はバッジを探してdownvotedすべての人だと思う.. – Ultrazz008

+0

'mysqli_num_rows($ result);'の代わりにすべてのレコードを選択した後、 'COUNT(1)posts from 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.'用ドットで単一引用符を使用しました二重引用符を使用する代わりに、クエリは正常に実行されます。

その他の問題が発生した場合は、どこにいらっしゃいましたか、何がうまくいかないか、何を試してみましたか?