Über Suchabfrage Datensätze über mehrere Seiten verteilen
In meinem Formular habe ich die Möglichkeit mehrere Suchbegriffe über ein Eingabefeld einzugeben. Nun möchte ich die Datensätze über mehrere Seiten verteilen.
In meinem Script wird die erste Seite richtig angezeigt, wechsle ich nun zu Seite 2, ist diese leer. Gebe ich aber nun auf Seite 2 dieselben Suchkriterien an, werden mir
die nächsten Datensätze angezeigt.
Vielleicht hat ja jemand eine Idee. Über jede Hilfe wäre ich sehr dankbar.
Hier mein Code:
In meinem Script wird die erste Seite richtig angezeigt, wechsle ich nun zu Seite 2, ist diese leer. Gebe ich aber nun auf Seite 2 dieselben Suchkriterien an, werden mir
die nächsten Datensätze angezeigt.
Vielleicht hat ja jemand eine Idee. Über jede Hilfe wäre ich sehr dankbar.
Hier mein Code:
<html>
<head>
</head>
<body>
<form method="post">
<div style='text-align:center;margin:20px 0px;'><input type="text" name="q"><input type="submit" value="Suchen"></div>
</form>
<?php
$db = new PDO('mysql:host=ww4.ddns.net;dbname=db_event;charset=utf8', 'mark', '#P1a2t3r4?#');
if (isset($_POST["q"])) {
// Anzeige der Datensätze pro Seite
$DatensaetzeSeite = 6;
$AnzahlDatensaetze = $db->query("SELECT COUNT(*) FROM `eingabeform_event`")->fetchColumn(0);
$AnzahlSeiten = ceil($AnzahlDatensaetze / $DatensaetzeSeite);
$AktuelleSeite = isset($_GET["seite"]) ? $_GET["seite"] : 1;
$AktuelleSeite = ctype_digit($AktuelleSeite) ? $AktuelleSeite : 1;
$AktuelleSeite = $AktuelleSeite < 1 || $AktuelleSeite > $AnzahlSeiten ? 1 : $AktuelleSeite;
$Versatz = $AktuelleSeite * $DatensaetzeSeite - $DatensaetzeSeite;
// suchformular mehrere Eingaben
$search = preg_split('/[\s]+/', $_POST["q"]);
if (count($search) > 0) {
$searchfield = ;
foreach ($search as $s) {
if (mb_strlen($s) >= 3) {
$searchfield = $s;
}
}
$totalwords = count($searchfield);
$placeholder = [":p1", ":p2", ":p3"];
if ($totalwords > 0 &&
$totalwords <= count($placeholder)) {
$string1 = ""; // DATE_FORMAT(`datum`,'%d.%m.%Y')
foreach($searchfield as $key => $searchword) {
$string1 .= " DATE_FORMAT(`Datum`,'%d.%m.%Y')" . " LIKE " . $placeholder[$key];
if ($key != ($totalwords - 1)) {
$string1 .= " OR ";
}
}
$string2 = ""; // `uhrzeit`
foreach($searchfield as $key => $searchword) {
$string2 .= " `Uhrzeit`" . " LIKE " . $placeholder[$key];
if ($key != ($totalwords - 1)) {
$string2 .= " OR ";
}
}
$string3 = ""; // `Genre`
foreach($searchfield as $key => $searchword) {
$string3 .= " `Genre`" . " LIKE " . $placeholder[$key];
if ($key != ($totalwords - 1)) {
$string3 .= " OR ";
}
}
// SQL zusammensetzen
$select = $db->prepare("SELECT `id`, DATE_FORMAT(`datum`,'%d.%m.%Y') AS `datum`, `Uhrzeit`, `Genre`
FROM `eingabeform_event`
WHERE
( " . $string1 . " )
OR
( " . $string2 . " )
OR
( " . $string3 . " )
ORDER BY `datum` ASC
LIMIT :versatz, :dseite");
$select->bindValue(':versatz', $Versatz, PDO::PARAM_INT);
$select->bindValue(':dseite', $DatensaetzeSeite, PDO::PARAM_INT);
// bindValue mit den Platzhaltern und Werten setzen
foreach ($searchfield as $key => $wort) {
$like = "%" . $wort . "%";
$select->bindValue($placeholder[$key], $like);
}
// Anfrage ausführen
$select->execute();
$events = $select->fetchAll(PDO::FETCH_OBJ);
//if ($AnzahlDatensaetze > 0) {
if ($select->rowCount() > 0 AND $AnzahlDatensaetze > 0 ) {
echo "<center>";
echo "<table border=\"1\">\n";
echo "<tr align left>";
echo "<th align=left width=50><font face=\"arial\" size=3 color=#66CCFF>id</font></th>";
echo "<th align=left width=100><font face=\"arial\" size=3 color=#66CCFF>Datum</font></th>";
echo "<th align=left width=100><font face=\"arial\" size=3 color=#66CCFF>Uhrzeit</font></th>";
echo "<th align=left width=100><font face=\"arial\" size=3 color=#66CCFF>Genre</font></th>";
echo "</tr>";
echo "</table>";
echo "<center>";
foreach ($events as $event) {
echo "<center>";
echo "<table border=\"1\">\n";
echo "<tr align=left>";
echo "<td width=50><font face=\"arial\" size=2 color=black>$event->id</font></td>";
echo "<td width=100><font face=\"arial\" size=2 color=black>$event->datum</font></td>";
echo "<td width=100><font face=\"arial\" size=2 color=black>$event->Uhrzeit</font></td>";
echo "<td width=100><font face=\"arial\" size=2 color=black>$event->Genre</font></td>";
echo "</tr>";
echo "</table>";
echo "<center>";
}
}
}
}
// Seitenfunktion
echo '<form method="GET" autocomplete="off">' .
(($AktuelleSeite - 1) > 0 ?
'<a href="?seite=' . ($AktuelleSeite - 1) . '">◄</a>' :
' ◄') .
' <label>Seite <input type="text" value="' . $AktuelleSeite . '" name="seite" size="3"
title="Seitenzahl eingeben und Eingabetaste betätigen"> von ' . $AnzahlSeiten . '</label>' .
(($AktuelleSeite + 1) <= $AnzahlSeiten ?
' <a href="?seite=' . ($AktuelleSeite + 1) . '">►</a>' :
' ►') .
'</form>';
}
?>
</body>
</html>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 578465
Url: https://administrator.de/forum/ueber-suchabfrage-datensaetze-ueber-mehrere-seiten-verteilen-578465.html
Ausgedruckt am: 19.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar
Du machst das auch max. komplex, oder?
Entweder lade dir die Ergebnisse in nen Array und gebe halt aus dem Array die passenden Elemente aus (z.B. du hast 10 Einträge pro Seite:
Seite 1: Eintrag 1 - 10 -> Array-Element 1+0*10)
Seite 2: Eintrag 11-20 -> Array-Element 1+1*10)
Seite 3: Eintrag 21-30 -> Array-Element 1+2*10)
Da Seitenzahlen nur Ganzzahlig sein können (ich gehe mal davon aus dein formular lässt nicht zu das der Benutzer die Seite eingibt und dabei seite 1,5 eingeben kann) brauchst du ne ganze menge von dem Kram nicht...
Entweder lade dir die Ergebnisse in nen Array und gebe halt aus dem Array die passenden Elemente aus (z.B. du hast 10 Einträge pro Seite:
Seite 1: Eintrag 1 - 10 -> Array-Element 1+0*10)
Seite 2: Eintrag 11-20 -> Array-Element 1+1*10)
Seite 3: Eintrag 21-30 -> Array-Element 1+2*10)
Da Seitenzahlen nur Ganzzahlig sein können (ich gehe mal davon aus dein formular lässt nicht zu das der Benutzer die Seite eingibt und dabei seite 1,5 eingeben kann) brauchst du ne ganze menge von dem Kram nicht...