PHP/MySQL - Praxistutorial 5 - Die Parameter
1. Die Abschnitte
- Überblick
- LIMIT
- Erster Aufruf
- Das Navigationsmenü
- Die Parameter
- Blättern
2. Erstmalige Parameterübergabe
Beim erstmaligen Aufruf unserer Suchfunktion ergeben sich zwei der benötigten drei Parameter aus dem Inhalt der Variable
$_POST['searchstring']
sowie der Anzahl der Treffer unserer Abfrage aus der Variable $num
. Also
definieren wir innerhalb der if (!empty ($_POST['searchstring']))
-Bedingung eine Zeichenkette, die wir als
ersten Teil unserer späteren Parameterübergabe nutzen. Am besten packt ihr den Code direkt hinter die $num = ...
-Stelle.
$param = '?num='.$num.'&string='.urlencode($_POST['searchstring']);
Erläuterung
Dies ist eine stinknormale Zeichenkettenverknüpfung, die als GET-Parameter benutzt wird. Wichtig ist dabei die Funktion
urlencode
. Die wandelt besondere Zeichen, wie zum Beispiel Umlaute oder Leerzeichen in eine Form um, die man in der
URL übergeben kann.
Ein Beispiel. Gibt man zum Beispiel "php" in das Textfeld ein, so würde $param
zum Beispiel so aussehen:
?num=168&string=php
Wenn aber jemand auf die Idee käme, statt dessen "reguläre ausdrücke" einzutippen, so kann es passieren, das dieser String nach dem Leerzeichen abgeschnitten wird oder beim "ä" irgendein Murks geschieht.
?num=48&string=regul(plus irgendein unvollständiger Mist)
3. Weitere Parameterübergabe
Die benötigen wir, wenn denn auf einer unserer Links geklickt wird. Der Code selber ist pisselig einfach, muss aber in einer
weiteren Bedingung definiert werden, da wir bisher ja nur die Übergabe eines Suchbegriffs per POST definiert
haben. Ergänzt also die if (!empty ($_POST['searchstring']))
um dieses:
else if ($_GET)
{
$num = $_GET['num'];
$param = '?num='.$_GET['num'].'&string='.$_GET['string'];
}
Ein urlencode
ist in diesem Fall nicht mehr notwendig, da der Parameter ja schon entsprechend umgewandelt worden
ist. Das $num = $_GET['num'];
benötigen wir wofür? Genau! Um das altbekannte
"register_globals"-Problem zu vermeiden.
4. Die Limit-Variable
Die müssen wir innerhalb der Ausgabe unserer Navigationsleiste definieren und ist auch kein Problem. Passt den Code innerhalb
der for
-Schleife um Folgendes an:
$limit = $i * 10 - 10;
echo '<a href="'.$_SERVER['PHP_SELF'].$param;
echo '&limit='.$limit.'">'.$from.'-'.$to.'</a> ';
Erläuterung
$limit
wirft entsprechend seiner Vorgaben einfach nur die Werte (0, 10, 20 etc.)
aus, die wir später bei der GET-Bedingung benötigen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt