Zeichensatz in MYSQLi - Datenbank

Vorstaedter

Benutzer
Beiträge
21
Guten Tag !
Als Neuer stelle ich mich mal kurz vor :
Ich bin Rentner, ehemals Dipl.Ing E-Technik und lebe im Rheinland.
Ich bin Segler, fotografiere dabei gerne und betreibe eine WEB-Seite auf der ich Törnberichte und einige andere nautische Infos anbiete.
Jüngst habe ich da eine Fotodatenbank angehängt mit aktuell knapp 4000 Bildern.
In einer Datenbank mit nur einer Tabelle sind u.a. Dateiname der .jpg-Dateien, Suchbegriffe und Bildunterschriften gespeichert. Mit den üblichen Hilfsmitteln ( PHP / MYSQLI / JS / AJAX ) wird zunächst eine Suchseite und anschließend die Ausgabe der Fotos generiert. Das funzt nun alles ganz nett, unschön ist aber, daß ich in den Textfeldern nur den Standard-ASCI-Zeichensatz zur Verfügung habe. Deutsche und skandinavische Sonderzeichen kann ich nicht verwenden. Die Textausgabe wird nach dem ersten Leer- bzw. Sonderzeichen beendet; Abfragen auf Datenfelder, die solche Zeichen enthalten funktionieren nicht.
In phpMYADMIN habe ich schon etliche Zeichensätze durchprobiert, funzt aber alles nicht.
An welcher Stelle kann ich da noch schrauben ?
Die Datenbank ist zu finden unter Auswahl :
Würde mich freuen, wenn sich hier ein Lotse fände, der mich durch dieses "trübe Gewässer" führt.
 
Werbung:
Das ist eher NICHT ein Problem IN der DB, sondern wie Du diese ansprichst. Hier also PHP mit dem MySQLi - Treiber. Frag bitte in einem PHP-Forum, was da falsch ist, und zeige dort auch Deinen PHP-Code.
 
So, das Problem mit den Sonderzeichen scheint gelöst, ein Datenbankproblem bleibt aber.
In der mysqli_query steht u.a. - where ABC like '$string' - , wobei in $string auch mehrere Worte, z.B. "Kiel bis Rügen" stehen können.
Der Suchstring selbst stammt aus der Datenbank, matcht also auf jeden Fall mit mindestens einem Satz der Datenbank; eigene Suchstrings kann der Nutzer nicht definieren. Dadurch brauchen keine weiteren Randbedingungen wie z.B. Groß-Kleinschreibung berücksichtigt werden.
Muß ich jetzt im obigen Beispiel den String wirklich in 3 getrennte Abfragen für "Kiel", "bis" und "Rügen"aufteilen oder geht das irgendwie in einem Rutsch ?
Zu beachten ist, daß in anderen Datensätzen z.B. Flensburg bis Kiel stehen kann und eine Teilstringsuche nach Kiel deshalb daneben geht.
Ist vermutlich ein triviales Problem, aber ich komme hier nicht weiter ....
 
Ich würde mir überlegen eine vorhandene Bildergallery zu nutzen. Ohne viel Erfahrung baut man sich selbst schnell Sicherheitslücken ein.
Diese Query klingt auch schwer nach einer Möglichen SQL Injection Lücke.
 
Ich würde mir überlegen eine vorhandene Bildergallery zu nutzen. Ohne viel Erfahrung baut man sich selbst schnell Sicherheitslücken ein.
Diese Query klingt auch schwer nach einer Möglichen SQL Injection Lücke.


Das verstehe ich nun nicht so richtig; der User hat keine Möglichkeit eigene Eingaben zu machen. In mehreren HTML-Selectfeldfeldern werden ihm lediglich Suchbegriffe angeboten, die aus der Datenbank stammen und die er durch anklicken und absenden per Method "POST" zurücksenden kann. Wenn das wirklich gefährlich sein sollte, könnte ich die Eingaben noch abfangen und vergleichen, ob der ankommende String wirklich in der Datenbank vorkommt und ansonsten eine Fehlermeldung ausgeben.
Halt ich aber im Augenblick für überzogen....
Programmieren will ich das ganze nur so zum Spaß, quasi als Gehirnjogging. Den Spaß hätte ich mit einer fertigen Gallerie nicht.
 
Man kann auch manuell Post Daten an einen Webserver senden. Es ist immer empfohlen Daten nicht per Query sondern per Stored Procedure abzufragen.
Wenn die Auswahl der Abfragen bekannt ist würde ich "=" statt "like" nutzen.
Wie verschlagwortest du die Bilder und was soll als Abfragemöglichkeit kommen?
 
Nett, daß Du um die Sicherheit meiner Anwendung besorgt bist; werde - soweit mein Hobby KnowHow dazu reicht - den Sicherheitsaspekt nochmal evaluieren. Hast Du denn auch 'ne Lösung für mein Problem ?

Die Datenbank ist zu sehen unter Auswahl :
 
Muß ich jetzt im obigen Beispiel den String wirklich in 3 getrennte Abfragen für "Kiel", "bis" und "Rügen"aufteilen oder geht das irgendwie in einem Rutsch ?
Zu beachten ist, daß in anderen Datensätzen z.B. Flensburg bis Kiel stehen kann und eine Teilstringsuche nach Kiel deshalb daneben geht.

Klingt für mich, als ob Du nicht mit like, sondern nach ganzen Strings suchen willst. Aber das klingt alles etwas kunfus bis jetzt...
 
Werbung:
Klingt für mich, als ob Du nicht mit like, sondern nach ganzen Strings suchen willst. Aber das klingt alles etwas kunfus bis jetzt...
Das trifft den Kern, ich will nach ganzen Strings suchen und probier das in der Tat aktuell mit like ! Und für Konfusion wegen unklarer Ausdrucksweise entschuldige ich mich.

So sieht meine Abfrage aus :
mysqli_select_db($con, " XYdatenbank" );
$sql="select id from ABCtabelle";
$sql.=" where wo1 like'$land' and wo2 like'$region' and wo3 like'$ort' and jahr like '$jahr' and was like '$thema' and id > 0 ORDER BY id";

In den $XXX-Variablen stehen die Suchbegriffe, die ihrerseits wieder aus der Datenbank stammen. Diese Suchbegriffe bestehen aus einem bis einigen Wörtern, können also einige Leerzeichen beinhalten.
Aktuell habe ich die Leerzeichen durch _ ersetzt, was aber im Suchformular doof aussieht.
 
Zurück
Oben