2016-07-24 3 views
2

Ich arbeite an paginieren einige Daten mit Ajax Anfragen. Wenn eine der Seitennummerntasten gedrückt wird, wird eine Anforderung an eine separate Datei gesendet, um die nächste Seite in einer Tabelle zu erzeugen.Wie man Abfrage durch eine Ajax Anfrage übergibt

Auf meiner Haupt-Seite werde ich so etwas wie habe:

$query = "Select * from table WHERE field = 'something' LIMIT 5"; 
$result = mysqli_query($con, $query); 
$row = mysqli_fetch_assoc($result); 

// dump results as table 

Wenn ich schreibe das Skript ein neues xmlhttp Request-Objekt zu meiner „paginate.php“ Datei zu erstellen, wie kann ich diese gleiche Abfrage durchführen zu der Datei, da sie sich aufgrund von Benutzereingaben dynamisch ändern kann?

Ich dachte über die Übergabe der gesamten Abfrage-String als Funktionsparameter über eine POST-Anfrage, aber ich frage mich, ob es eine effizientere Möglichkeit ist, dies zu tun.

+0

Warum nicht einfach das Argument übergeben, und in php, verwenden Mysqli statments vorbereitet? – cpugourou

+1

Sie möchten absolut in keiner Weise Ihre Fragen in Javascript ausgesetzt haben ... – cpugourou

Antwort

2

Ich wurde über eine POST-Anfrage nur das Bestehen der gesamten Abfrage-String als Funktion Parameter denken

Definitiv nicht dies tun! Es ist wirklich wirklich schlechte Sicherheitsvorkehrung, um den Browser (dh Benutzer) Abfragen direkt gegen Ihre Datenbank ausführen zu lassen. Ich habe diesen Fehler in den frühen Tagen gemacht und meine Website wurde in kürzester Zeit beendet.

Ihre PHP-Datei sollte Parameter akzeptieren, bestätigen sie, so dass sie dann die Abfrage auszuführen verwenden

1. Sie XHR Objekt sendet: page_number=5

2. Ihre PHP die Eingabe überprüft und dynamisch baut die Abfrage:

//set page to 1 if none was provided. 
$pg = isset($_POST['page_number'])? (int)$_POST['page_number']: 1; 
$pg = max(1,$pg); // lowest allowed pg number is 1 

Sobald Sie die Seitenzahl, und Sie sind sicher, dass es eine ganze Zahl (nicht einig schändliches SQL Komma ist nd, dass ein Benutzer auf den Server gesendet), können Sie es in Ihrer Abfrage verwenden:

$size = 5; //# of results per page 
$start = ($pg-1) * 5; 
$query = "SELECT * from myTable WHERE field='something' LIMIT $start,$size"; 

Beachten Sie, dass, wenn der Feldwert something vom Benutzer kommt, Sie wollen es nicht in der Abfrage direkt aufzunehmen (Dies gilt für jeden vom Benutzer angegebenen Wert. Stattdessen sollten Sie vorbereitete Anweisungen und parametrisierte Abfragen verwenden

Ressource: https://www.owasp.org/index.php/SQL_Injection

+0

Vielen Dank für den Link und die Info! Ich verstehe, was Sie in der Antwort perfekt gesagt haben, aber es sieht so aus, als müsste ich über vorbereitete Aussagen recherchieren und darauf zurückkommen! –

+0

@TimothyFisher kein Problem. Glückliche Kodierung. – BeetleJuice

Verwandte Themen