Benutzersuche Problem bei Umsetzung

spikaner

Quereinsteiger @ php
Also ich möchte für mein Nachrichtensystem eine Benutzersuche machen ansantz
PHP:
$sucheuser = "%".htmlspecialchars($_GET['name'])."%";
$sql_query_string = "SELECT * FROM benutzerdaten WHERE name LIKE '".$sucheuser."' ";
$result =mysql_query($sql_query_string);
while(($datensatz=mysql_fetch_assoc($result)))
{
// ausgabe
}
soweit so gut, nun will ich aber das wenn $sucheuser z.b. "johannes" war und das Query null ausgibt das er nochmal sucht mit "ohanne" sprich ersten und letzten Buchstaben "abschneidet".
Wie kann ich das realisieren ?

mfg Spikaner
 
das wäre der code den ich in solchen fällen benutze

PHP:
$notfound = TRUE;
$string = "Johannes";
print $string;

if($notfound) {
	$string = substr($string, 1, -1);
	print $string;
}

substr()

hoffe das hilft
 
Du könntest die Suche in eine Schleife packen, die so lange läuft bis der Suchstring leer ist oder eine bestimmte Länge erreicht hat. Nur nach z.B. einem Buchstaben zu suchen ist nicht gerade sinnvoll.
PHP:
while (strlen($sucheuser) > 2')
Bevor du anfängst die Datensätze auszulesen, fragst du erst einmal ab, wie viele es überhaupt gibt.
PHP:
$anzahl=mysql_num_rows($result)
Wenn als Anzahl 0 rauskommt, schneidest du von $sucheuser mit substr den ersten bzw. letzten Buchstaben ab.
PHP:
$sucheuser = substr($sucheuser, 1, -1);
Nach dem Ende der inneren Schleife solltest du dann abfragen, ob $datensatz befüllt ist und dann die äußere Schleife mit break beenden, außer du willst ihm die verkürzten Suchergebnisse auch noch liefern.
 
Ist mein Ansatz so richtig?, kann es leider gerade nicht testen, würde aber gerne weiter machen..
PHP:
$sucheuser = "%".htmlspecialchars($_GET['name'])."%";
$suchstring = "SELECT * FROM benutzerdaten WHERE name LIKE '".$sucheuser."' ";
$result =mysql_query($suchstring);
$anzahl=mysql_num_rows($result)
while (strlen($sucheuser) > '4')
{
    If ($anzahl == "0")
    {
        $sucheuser = substr($sucheuser, 2, -2);
        $sucheuser = "%".$sucheuser."%";
        $suchstring = "SELECT * FROM benutzerdaten WHERE name LIKE '".$sucheuser."' ";
        $result =mysql_query($suchstring);
        $anzahl=mysql_num_rows($result);
    }
    else
    {
        $datensatz=mysql_fetch_array($result);
    }
}

mfg Spikaner
 
Im Prinzip ja, aber so solltest du im Erfolgsfall eine Endlosschleife bekommen, weil der Suchstring nie mehr verkürzt wird. Ich würde es eher so machen:
PHP:
$sucheuser = "%".htmlspecialchars($_GET['name'])."%"; 
while (strlen($sucheuser) > '4') 
{ 
    $suchstring = "SELECT * FROM benutzerdaten WHERE name LIKE '%".$sucheuser."%';"; 
    $result =mysql_query($suchstring); 
    $anzahl=mysql_num_rows($result) 
    If ($anzahl == "0") 
    { 
        $sucheuser = substr($sucheuser, 2, -2); 
    } 
    else 
    { 
        $datensatz=mysql_fetch_array($result); 
        break;
    } 
}

Das break ist wichtig, weil er sonst die Endlosschleife baut.
Daß du vorher die Eingaben noch prüfst, setzte ich jetzt einfach mal voraus.
 
Soweit so gut...
PHP:
$sucheuser = htmlspecialchars($_GET['name']); 
while (strlen($sucheuser) > '4') 
{ 
    $suchstring = "SELECT * FROM benutzerdaten WHERE name LIKE '%".$sucheuser."%'"; 
    $result =mysql_query($suchstring); 
    $anzahl=mysql_num_rows($result) 
    If ($anzahl == "0") 
    { 
        $sucheuser = substr($sucheuser, 1, -1); 
    } 
    else 
    { 
        $datensatz=mysql_fetch_array($result); 
        break;
    } 
}
soweit so gut nur wie "baue" ich das am einfachsten um sollte nach erster Ausgabe 0 herauskommen, das mir php erstmal aus meinen Suchstring alle Sonderzeichen entfernt und den Längsten Namen nimmt ?
Sprich aus -==Sir Spikaner==- soll dann Spikaner werden z.B. bevor er dann weitere Buchstaben "abschneidet".

mfg Spikaner
 
So solltest du alle Sonderzeichen entfernen können, hoffe ich:
PHP:
preg_match_all( '/([a-zA-Z0-9 ]+)/i', $sucheuser, $match );
var_dump( $match );
 
Zurück