2012-04-07 8 views
3

Ich versuche, mein eigenes CMS zu machen, und ich bin ziemlich neu in PHP und MySQL. Lassen Sie mich an den Punkt kommen:MySQL: zeige Inhalte in Permalinks nach Zeile ID

Bis jetzt habe ich Nachrichten in der Indexseite mit "mehr lesen" Permalinks (was bedeutet, wenn ich mehr lesen, verschiebt es mich auf andere Seite zB /readmore.php?id=[news ID] und auf dieser Seite die nur Inhalt ist jene spezifischen Nachrichten, dh bestimmte Zeile aus der Tabelle. Was ich bin stecken mit in diesem permalink, dass bestimmte Zeilen-ID zu bekommen.

Lassen Sie mich den Code zeigen, die zur Zeit für mich funktioniert.

Indexdatei mit Nachrichten:

while($row = mysql_fetch_array($result)) 
    { 
/*... title, news content... */ 
    echo "<a href='readmore.php?id=".$row['ID']."'>".$read_more_link."</a></div>"; 
} 

readmore.php mit exakter Reihe (? zum Beispiel readmore.php id = 1201):

$params = $_SERVER['QUERY_STRING']; 
$str = $params; 
$id1 = $str[strlen($str)-1]; 
$id2 = $str[strlen($str)-2]; 
$id3 = $str[strlen($str)-3]; 
$id4 = $str[strlen($str)-4]; 
$news_id = "$id4$id3$id2$id1"; 

$query = "SELECT * FROM naujiena WHERE ID='$news_id'"; 

Im Grunde, was es tut, erholt es vier letzte Ziffern von Adressleiste und sucht nach jenen Nachrichten mit der 4-stelligen ID

Es ist eine sehr primitive Art, dies zu tun, aber ich bin für ein paar Tage mit diesem fest und kann keinen Ausweg finden.

Was ich zuvor versucht habe, ist eine Variable mit Sitzung in der while($row = mysql_fetch_array($result)) Schleife zu erstellen, es zeigt IDs in der Indexseite, wie es sollte, aber in readmore Seite nur die letzte oder die erste (abhängig von desc oder asc) was ganz offensichtlich zu erwarten war

Können Sie mir helfen? Ich würde es schätzen.

Antwort

2

Sie die Werte in dem Abfrage-String mit Namen in dem $_GET Array zugreifen können.

Beispiel: $_GET['id'] ist der Wert des id=<ID>-Teils der Abfragezeichenfolge. Es funktioniert für jedes Feld der Abfragezeichenfolge.

// url : readmore.php?id=1201 
$news_id = intval($_GET['id']); 
// now, $news_id contains the value 1201 
$query = "SELECT * FROM naujiena WHERE ID='$news_id'"; 

Sie können die offizielle Hilfe lesen: $_GET oder einer der verschiedenen Tutorial Sie im Internet finden können: http://www.w3schools.com/php/php_get.asp

aktualisieren

Da Sie meine Antwort akzeptiert, ich fühle mich verpflichtet, werfen Sie auch ein Wort über SQL-Injektion. Sie sollten immer alle Eingaben bereinigen, die Sie in einer SQL-Abfrage mit mysql_real_escape_string verwenden. Weitere Informationen finden Sie auf Wikipedia: SQL injection oder in der PHP-Dokumentation: SQL Injection.

Da Ihre IDs numerische Werte sind, können Sie auch sicherstellen, dass. Ich habe das Code-Snippet aktualisiert, um dies mit intval zu tun.

+0

Vielen Dank für Ihr Interesse, ich habe bereits mysql_rea_escape_string() 'auf meinem Login und Kommentarformulare platziert. Und danke für 'intval' Sache! Ich weiß es zu schätzen. – Baseckas

+1

Sie sollten ** alles ** entkommen, es gibt so viele Möglichkeiten, etwas in die Datenbank zu injizieren, Sie würden kein Risiko eingehen wollen! – krtek

2

Um die Parameter der Abfrage-String in PHP zu extrahieren, verwenden $_GET super-global, wie folgt aus:

$_GET["id"] 

Beachten Sie auch, dass die alle von einem entfernten zur Verfügung gestellten Daten (Benutzer, Browser, etc.) kann gefälscht sein. So kann ein Angreifer Sie auch ?id=0; DROP TABLE users oder etwas Ähnliches senden.

Lesen Sie mehr über SQL Injections.

Es ist immer eine gute Idee, die Eingabe zu validieren. Sie erwarten die id eine ganze Zahl zu sein, also um sicher zu sein, können Sie if(ctype_digit($_GET["id"]))) ...

Und schließlich prüfen, es ist auch eine gute Idee, jede Eingabe Sie verwenden in SQL-Anweisungen zu sanieren. Verwenden Sie mysql_real_escape_string(), oder verwenden Sie PDO

+1

Also, was sagst du mir Zeilen wie diese machen sollte: '$ id = mysql_real_escape_string ($ _ GET [ "id"])'? (oder/und auch) make check mit 'if (ctype_digit (...))) ..'? – Baseckas

+0

Ja, validiere Daten immer und entkomme sie immer. Wenn Sie beides tun, sind Sie auf der sicheren Seite – poncha

1

Um eine bestimmte HTTP-GET-Variable zu erhalten, können Sie $_GET["variableName"] verwenden. In Ihrem Fall könnten Sie die ID wie diese:

$news_id = $_GET["id"];

0

Verwendung gU es bereits enthält SQL-Injection prevetion

+1

Sie sollten überlegen, warum dies hilfreich ist, und einen Link zu einer externen Ressource hinzufügen, um noch mehr Informationen zu erhalten. – jmort253