Ajax Suche und Umlaute

dennis-sauer

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem, dass wenn ich einen Suchbegriff mit einem Umlaut eingebe, wird mir "Keine Einträge gefunden" ausgegeben, hat jemand vielleicht die Lösung für mich. Ich sitz hier seit zwei Stunden dran und finds einfach net.

Die Kollation der DB und der Tabelle ist: latin1_german1_ci

Hier mal der Quelltext der Datei:

PHP:
<?php

// DB Host
$server= "localhost";
// DB Name
$datenbank= "duessinfo";
// DB Username
$user= "root";
// DB Passwort
$passwort= "mysql";

header('Content-Type: text/html; charset=ISO-8859-1');

// Zugriff auf SQL-Server 
mysql_connect($server, $user, $passwort) or die ("Datenbankserver nicht erreichbar");
MYSQL_SELECT_DB($datenbank) or die ( "Datenbank nicht vorhanden");

// Daten entschaerfen! WICHTIG
$suche = preg_replace ("/[^0-9a-zA-ZÀ-Üà-üß]/", "",  $_GET['suche']);
// Ist was drin im Suchbegriff?
if ($suche != '') {

    // DB Query absenden
    // Hab noch ein ORDER BY eingefügt, damit die Daten in irgendeiner Form sortiert werden
    $result = mysql_query("SELECT id, haltestelle, stufe, besonderheiten
        FROM preisstufen 
        WHERE haltestelle LIKE '%".$_GET['suche']."%'  
        ORDER BY haltestelle
        LIMIT 0, 100"); 
    $menge = mysql_num_rows($result);
    
    // Treffer vorhanden?
    $liste = "<table width=\"200\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
        
    if ($menge > 0) {

         while($daten = mysql_fetch_array($result))    {
            
             // Aufbau der Tabelle mit den Ergebnissen (muss noch mit CSS / etc. modifiziert werden)
             $liste.= "
                <tr>
                 <td bgcolor=\"#ffffff\" width=\"180\"><b>".$daten['haltestelle']."</b></td>
                <td bgcolor=\"#ffffff\" width=\"10\">".$daten['stufe']."</td>
                </tr>
                <tr>
                <td width=\"200\"><br></br></td>
                </tr>
                ";
             
         }
        
    } else {
        
        // Keine Einträge gefunden
        $liste .= "<tr colspan=\"5\">Keine Eintr&auml;ge gefunden</tr>";    
    }

    $liste. "</table>";
    
    
} else {
    
    // Fehlermeldung, wenn kein Suchwort eingegeben wird
    $liste = "<div class=\"color:red;font-weight:bold;\">Bitte geben Sie ein Suchkriterium ein</div>";    
    
}

/*
    Ausgabe erzeugen
    Solltest immer was zurückgeben, nicht nur, wenn ein Suchkriterium eingegegben ist (zumindest eine Fehlermeldung)
    
    Cachen von AJAX-Abfragen sollte auch verhindert werden (sofert der Browser mitspielt, gerade bei GET-Anfragen ist das
    ein Problem
        
*/
echo $liste;

?>

Danke und Grüße

Dennis
 
Ich würde sagen, das hier ist dein Problem
PHP:
$suche = preg_replace ("/[^0-9a-zA-ZÀ-Üà-üß]/", "",  $_GET['suche']);
Sobald du einen Umlaut eingibst, ersetzt er den Sring durch einen leeren, dadurch schlägt deine If-Abfrage fehl und du bekommst "Keine Einträge" angezeigt.

Ich habe nicht viel Ahnung von Regex, aber du musst den Suchausdruck anpassen.
 
An dieser Stelle entfernst du diese Zeichen aus deinem Suchstring:
PHP:
// Daten entschaerfen! WICHTIG
$suche = preg_replace ("/[^0-9a-zA-ZÀ-Üà-üß]/", "",  $_GET['suche']);
Somit wird zum Beispiel aus dem Wort "Läufer" natürlich "Lufer", wofür es höchst wahrscheinlich keine Ergebnisse gibt.

Hat diese - laut dem Kommentar wichtige - Stelle irgendeinen tieferen SInn, bzw. was versuchst du damit zu bezwecken?
 
Hallo,

erstmal danke für eure Antworten. Ich muss zugeben mit Ajax und dergleichen kannste mich jagen... Diese Idee hab ich aus einem anderen Forum, der Eintrag ist aber schon paar Jahre alt.

Zumindest das ich damit die Zeichen entferne hab ich mir schon gedacht, aber wenn ich das alles lösche, bekomm ich nur ne Fehlermeldung statt einer Ergebnisliste.

Daher wüsst ich spontan nicht, was ich da ändern sollte... :confused:
 
Zurück