Suchfunktion mit PHP Version 7.1.12 und MySQL?

7 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Probier mal das hier https://pastebin.com/MUCrqqYi

PS: ich bin mir nicht sicher ob beim order by mehrere spaltennamen als angabe zugelassen sind.


wotan38  30.12.2018, 11:25

Ja, man kann beim ORDER BY mehrere Spalten angeben, und nicht nur das. Für jede Spalte einzeln kann man aufsteigend ASCENDING oder absteigend DESCENDING hinzufügen. Ersteres kann man weglassen, weil das dann standardmäßig so gemacht wird, letzeres kann man mit DESC abkürzen. Bei der Verwendung von UNION, wobei mehrere SELECTs vorhanden sind und deshalb die Spaltenbezeichnungen nicht zwangsläufig eindeutig übereinstimmen, muss man die alternative Schreibweise verwenden und Spalten als Ordnungs-Nr angeben: Für 1.Spalte eine 1, für 12. Spalte die 12 usw.

Sortiert wird nicht nach dem Binärwert, sondern nach der verwendeten Codetabelle, um Umlaute richtig einzuordnen. Für das Laden von sortierten Tabellen im Programm (für Binärbaum z.B.) aus der Datenbank kann dies für das Programm falsch sein, eine binäre Neusortierung ist dann erforderlich.

Wenn Du das alles beachtest, wirst in Deiner Datenbank-Karriere nie wieder ein Problem mit dem Sortieren haben.

Baumwollkuch433 
Beitragsersteller
 29.12.2018, 20:20

Danke! Gibt es auch eine Funktion, die aus bzpw. einem ä ein ä macht damit ein ä ausgegeben werden kann?

regex9  29.12.2018, 20:43
@Baumwollkuch433

Bitte beachte, dass auch in diesem Code noch Fehler vorhanden sind sowie Dinge verbessert werden sollten:

  • Es fehlt der Doctype. Der ist zwingend notwendig.
<!doctype html>
  • Setze den Zeichensatz auf UTF-8, dann erledigt sich auch dein Problem mit den Umlauten. Der Meta-Tag dazu kommt in den head:
<meta charset="utf-8">
  • Das action-Attribut solltest du weglassen, wenn es die Daten an die selbe Seite verschicken soll.
  • Die Abfrage isset / empty kann auf empty reduziert werden, denn die Funktion prüft auf Vorhandensein und Wert.
  • Verwende CSS, um Abstände zu erzeugen und lasse dafür br-Tags weg.
  • Entscheide dich für einen Stil: Entweder objektorientiert oder prozedual. Die jeweiligen Schreibweisen werden in der PHP Dokumentation stets aufgezeigt, bspw. hier für mysqli_query.
  • Verwende Prepared Statements. Dies übernimmt die Filterung der Werte für dich und hält auch deinen Query lesbarer.
  • while - das nur am Rande, würde ich wie alle anderen Kontrollstrukturen auch klein schreiben.

As erstes fällt auf, dass du zwar eine Datenbank-Verbindung aufbaust und dir das zugehörige Objekt in Variable $conn speicherst. Dann aber greifst du teilweise auf andere (nicht initialisierte) Variablen zu. Beispielsweise bei $mysqli->connect_error.

Dann verwendest du die Funktionen teilweise falsch. Die Funktionen mysqli_real_escape_string oder mysqli_query erwarten als Übergabe auch die Verbindung ($conn). Du kannst dir dazu das PHP-Handbuch anschauen.

versuche mal für das Problem Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\xampp\htdocs\PHP\suche\index.php on line 23

$suchbegriff = trim(htmlentities(stripslashes(mysqli_real_escape_string($_GET['suchfeld']))));

$suchbegriff = trim(htmlentities(stripslashes(mysqli_real_escape_string($conn, $_GET['suchfeld']))));

damit sollte das Problem weg sein.

Schreib mal ob es funktioniert hat am Enden

Woher ich das weiß:Hobby – Viele YouTube Tutorials

Die Datenbank Verbindung könntest du auch einfach kürzen. Und zwar in $conn = new mysqli ('localhost', 'root', 'Passwort', 'Datenbank');

Also die Zeile mit $query = mysqli_query($sql); musst du ändern. Du musst da auch die Datenbank angeben. $query = mysqli_query($conn, $sql);