2016-09-09 11 views
1

私はこのPHPこのSQLクエリの結果を以前の結果と置き換えて、どのようにして結果を停止できますか?

$first = $_POST["first"]; 
$last = $_POST["last"]; 

$query = "SELECT * FROM posts ORDER BY TimeStamp DESC LIMIT $first, $last"; 

値はフォームで投稿されたときにこれが成功した最初と最後の間のエントリを返すとともに、次のHTMLフォーム

<form method="POST"> 
    <input type="number" placeholder="first" name="first"> 
    <input type="number" placeholder="last" name="last"> 
    <input type="submit"> 
</form> 

を使用しています。しかし、新しいクエリが作成されると、プライオリティーが取り出した結果は消えます。新しいリクエストがフォームに投稿されたときに古い結果のリストの下に新しい結果が追加されるようにするにはどうすればよいですか?

+0

あなたは 'LIMIT' – Stivan

+2

あなたが送信ボタンをクリックするたびに、あなたが経由してフォームを送信していることがある問題をせずに試してみましたポストし、ページがリロードされます。同じページで異なるクエリの結果を追加する場合は、AJAXを使用して行う必要があります。 – nanocv

+1

これらの両方に同意します。あなたのページがリロードされないようにAjaxがページ設定されたデータを取得するか、最初に$を無視して常に0に設定してください。ajaxは正しい方法です。 – JNevill

答えて

1

あなたに試してみたいことの非常に基本的な例を示しましょう。

フォームと結果を格納するdivを持つHTMLページがあります。 この文書では、フォーム送信イベントを処理するためのJavaScriptコードも少しあります。Ajaxのクエリでは、jQueryを使用して怠け者でした。あなたのコードでそのライブラリを使用できない場合は、私にそれを知らせてください。

myPage.html

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="UTF-8"> 
    </head> 
    <body> 
    <div> 
     <form id="myForm"><!--Note there's no methods here--> 
     <input id="inputFirst" type="number" placeholder="first" name="first"> 
     <input id="inputLast" type="number" placeholder="last" name="last"> 
     <input type="submit"> 
     </form> 
    </div> 
    <div id="divResults"> 
     <!--Results will be displayed here--> 
    </div> 
    </body> 
</html> 

同じ文書(myPage.html)でJavascriptコード。

<!--Loading jQuery for easy Ajax methods--> 
<!--(You can download it to your server)--> 
<script src="http://code.jquery.com/jquery-3.1.0.min.js" type="text/javascript"></script> 

<script> 
    // These first sentences aren't even necessary in main browsers 
    var divResults = window.document.getElementById("divResults"); 
    var myForm = window.document.getElementById("myForm"); 
    var inputFirst = window.document.getElementById("inputFirst"); 
    var inputLast = window.document.getElementById("inputLast"); 

    // Listening for submit button 
    myForm.addEventListener('submit', sendMyAmazingAjax); 

    function sendMyAmazingAjax(e) { 

    // To avoid the form to be send by direct post method 
    e.preventDefault(); 

    $.ajax({ 
     url: 'myAmazingScript.php', // These are well self explained 
     type: 'post', 
     data: { 
     first: inputFirst.value, // Content of form inputs 
     last: inputLast.value 
     }, 
     success: function (data) { 
     // data is anything you "echo" in the PHP document 
     // We add it to the current contents of divResults (if any) 
     divResults.innerHTML += data; 
     } 
    }); 
    } 
</script> 

今すぐ別のドキュメント(myAmazingScript.php)におけるいくつかのPHP。 (同じ文書でも同じことができますが、もう少し扱いに​​くく、必要ではありません)。

データベースへのクエリにどの方法を使用しているのかわかりません。私はこの例のために用意されたステムを選択しました。これは安全で、簡単で、しかも非常に拡張されているからです。

<?php 

// Creating connection 
$mysqli = new mysqli('localhost', 'user', 'password', 'myAmazingDatabase'); 

// Checking connection 
if (mysqli_connect_errno()) { 
    echo "Connect failed: %s\n", mysqli_connect_error(); 
    exit(); 
} 

$first = $_POST["first"]; 
$last = $_POST["last"]; 

$query = "SELECT * FROM posts ORDER BY TimeStamp DESC LIMIT ?, ?"; 

if ($stmt = $mysqli->prepare($query)) { 
    $stmt->bind_param('ii', $first, $last); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 

    while ($row = $result->fetch_assoc()) { 

    echo 'First field: ' . $row['myAmazingFirstField'] . '<br>'; 
    echo 'Second field: ' . $row['myAmazingSecondField'] . '<br>'; 
    // Etc... 
    } 

    $stmt->free_result(); 
    $stmt->close(); 
} 

私はそれを試していないが、私は何か重要なことを忘れていないと思う。ご質問がある場合はお知らせください。

(もちろん、あなたは多くの「驚異の名前」を変更する必要があります)

+0

優秀な答え、多くのおかげであなたの助けに感謝します。 –

関連する問題