Wie vererbt man PHP Bedingungen beim paginieren einer Tabelle an die folgenden Seiten?
Hallo,
eigentlich habe ich 2 Fragen zu PHP, aber das hätte nicht alles ich die Überschrift gepasst.
Frage 1
Ich erlerne gerade PHP und MySQL. Dafür habe ich in einer Datenbank eine Tabelle über Internet Radiostationen angelegt, mit Sendername, Land, Kontinent, StreamURL, Genre usw. Über ein Auswahlmenü lässt sich die Tabelle nach Sendernamen, Land oder Kontinent sortieren. Das klappt soweit auch. Damit aber nicht mehr als 20 Radiostationen auf einer Seite erscheinen, habe ich unter Zuhilfenahme eines Buches die Seiten paginiert (Steige da aber noch nicht so richtig durch). Wenn ich nun die Radiostationen nach Land oder Kontinent sortiere, dann klappt das zwar auf der ersten Seite aber auf der zweiten Seite ist wieder alles nach den Sendernamen sortiert.
Was muss ich machen, damit die Sortier – Auswahl auch an die folgenden Seiten übergeben wird?
Hier ist der PHP Code
<?php
$sortieren = $_POST['sortieren'];
if($sortieren == "Sendername") {
$ergebnis = $mysqli -> query("SELECT * FROM sender ORDER BY sendername LIMIT $start, $anzahl_pro_seite");
} elseif($sortieren == "Kontinent") {
$ergebnis = $mysqli -> query("SELECT * FROM sender ORDER BY kontinent LIMIT $start, $anzahl_pro_seite");
} elseif($sortieren == "Land") {
$ergebnis = $mysqli -> query("SELECT * FROM sender ORDER BY land LIMIT $start, $anzahl_pro_seite");
}
?>
Frage 2
Wie muss die Fall – Entscheidung formuliert werden?
Natürlich soll man Radiosender über ein Eingabeformular finden können. Auch das funktioniert. Allerdings möchte ich, wenn es keinen Sender mit dem entsprechenden Namen gibt, das ein Text wie z. B. "Leider kein Sender mit diesem Namen zu finden" erscheint. Dafür habe ich in der Fall – Entscheidung folgende 2 Dinge ausprobiert:
if($zeile == !array()) {
echo "Leider gab es keinen Sender mit dem Namen";
}
Das klappt nicht.
if($zeile == false) {
echo "Leider gab es keinen Sender mit dem Namen";
}
Das klappt auch nicht.
if($zeile == null) {
echo "Leider gab es keinen Sender mit dem Namen";
}
War auch 'ne Nullnummer :)
Hier ist der komplette Code dazu:
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label>Sendername eingeben:</label><br />
<input type="text" name="suchbegriff"/><br /><br />
<input type="submit" name="gesendet"/>
</form>
<?php
if(isset($_POST['gesendet'])) {
$suchbegriff = htmlspecialchars($_POST['suchbegriff']);
echo $suchbegriff . "<br />";
$db = mysqli_connect("localhost", "root");
mysqli_set_charset($db, "utf8");
mysqli_select_db($db, "radio2");
$sql = "SELECT * FROM sender WHERE sendername LIKE '%$suchbegriff%' ";
$erg = mysqli_query($db, $sql);
while($zeile = mysqli_fetch_assoc($erg)) {
echo $zeile['sendername'] . " ". $zeile['kontinent'] ." ". $zeile['land'] . " ". $zeile['ort'] . " ". $zeile['genre'] . " ". $zeile['streamurl'] . "<br /><br />" ;
}
if($zeile == !array()) {
echo "Leider gab es keinen Sender mit dem Namen";
}
}
?>
</body>
Danke für's lesen.
3 Antworten
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
zu 1. Du musst dann bei den "Blätter-Link" halt auch die ausgewählte Sortierung übergeben. Z.B:
<a href="seite.php?start=<?= $start + $anzahl_pro_seite ?>&sortieren=<?= $sortieren ?>">Nächste Seite</a>
zu. 2 brauchst du num_rows, damit kannst die Ergebnisse einer mysql Abfrage zählen z.B.
if( mysqli_num_rows($erg) > 0 ) {
while( $zeile = mysqli_fetch_assoc($erg) ) {
// etc....
}
} else {
// nix gefunden
}
Maximale Erfolge!
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
nana du übergibst einfach die seite und berechnest start neu bei limit
$page=$_GET['page'];
$start = ($page-1) * $anzahl_pro_seite
url = "?page=$page";
und die einzelnen seiten machst du mit einer $alle abfrage und teilst durch $anzahl_pro_seite um z.b. die mitte der pager anzeige zu ermitteln . oder wieviele du vor oder hinter $page haben willst . also wenn du nur plaz für 10 hast etc. gehts natülrich nur von 5 bis 15 etc . entsprechend dann den rest ausrechnen
oder eine for schleife
$pageanzeige = 0; /* hier mal fals man ab 1 seit anfängt */
for (var $i=0; $i < $alle; $i=$i+$anzahl_pro_seite) {
++$pageanzeige ;
/* bau der menue anzeige für pages */
if($pageanzeige == $page) { /* highlight */}
}
teste mal einfach rum , irgendwann hast du wa brauchbares :) gibt viele möglichkeiten .
![](https://images.gutefrage.net/media/user/LeBonyt/1553190555784_nmmslarge__5_5_160_160_23469c76ccd9796e9cb38ca6b6f0ac87.png?v=1553190556000)
Zu 2. Deklariere vor der Abfrage die Variable.
$zeile = [];
Wenn Sender gefunden wurden, dann wird das Array geüllt. Was passiert eigentlich wenn meherere Sender gefunden werden? Also Suchbegriff NDR, gefunden werden die Sender NDR1 und NDR2.
![](https://images.gutefrage.net/media/user/LeBonyt/1553190555784_nmmslarge__5_5_160_160_23469c76ccd9796e9cb38ca6b6f0ac87.png?v=1553190556000)
VOR der Abfrage musst du die Variable mit einem leeren Array füllen. Nur wenn das Ergebnis mindestens einen Treffer erzielt hat, ist das Array gefüllt. Mit der Funktion empty() kannst das prüfen.
Danke für die Hilfe.
An Frage 1 bastele ich noch rum.
Zu Frage 2
Ich habe das jetzt folgendermaßen geschrieben, aber dann kommt auch bei Treffern die Anzeige "Leider gab es keinen Sender mit dem Namen",
So sieht es im Moment aus:
Es werden mir beide Sender in der Tabelle die ich mit HTML Code erzeugt habe angezeigt,