Archiv verlassen und diese Seite im Standarddesign anzeigen : komm einfach nicht weiter!
Habe ein Formular, wo man einen Namen in die Datenbank schreiben kann... ($Eingabe)
jetzt soll er diesen Namen nur dann einfügen, wenn er nicht vorhanden ist, ansonsten soll die Nachricht kommen $Fehler="Name existiert bereits!"...
Mein Problem liegt darin, was kann ich machen wenn jemand in das Eingabefeld peter, pETER, PeTeR eingeben würde und in der Datenbank Peter gespeichert ist???
Peter-Klaus ist wiederum OK! Aber danach soll bei $Eingabe="peter-klaus" auch wieder $Fehler kommen!
so viel hab ich bis jetzt und weiß nicht weiter:
$db = mysql_connect();
$res = mysql_db_query("datenbank","select name from Namen where name like '$Eingabe' ");
if (!$res)
{
$sqlab = ("insert Namen (name) values ('$Eingabe' ");
else
{
$Fehler="Name existiert bereits!";
}
Kann jemand mir ein anderes Script zeigen, wie es richtig gehört? Wäre sehr dankbar!
Downline 22-10-2001, 11:38 Was hälst Du denn davon, wenn Du die eingaben formatierst, bevor sie in die Datenbank geschrieben werden! So das es egal ist ob Peter, peter oder PeTeR! Formatiere den Namen einfach so, das er immer klein geschrieben wird. Dann müßte es eigentlich gehen!!
Wie mache ich das denn, wenn "PIT der King" erlaubt sein würde???
Es müßte doch eine Möglichkeit geben, bei
"select name from Name where name like '$Eingabe'",
daß er $name="Peter-Klaus" und $Eingabe="peter-klaus" als gleich erkennt oder????
Denn später bei der Ausgabe von der Datenbank soll er ja auch wieder das ausgeben was der User geschrieben hat!!! also auch "PIT der King"!Andersrum soll er wissen, daß "pIt DER kinG" bereits vorhanden ist!!!!
Downline 22-10-2001, 12:08 Hey Jump! Also ich glaube, da hast Du keine Chance! Das einzige was mir da einfällt, ist wirklich den namen zu formatieren, so das er immer alles klein oder Groß schreibt! Damit hättest Du das Problem auf jedenfall weg! Eine unterscheidung der Schriftweise "PeTeR" oder "PIT the King" ist meines wissens jedenfalls nicht möglich! Sorry!
schmalle 22-10-2001, 14:00 so wie dein code lautet muss es eigentlich funktionieren. teste es doch einfach mal. wenn inner db z.b. PeTer steht, müsste $Fehler funzen ...
Also wenn ich PeTer eingebe funzt es nicht! Weil irgendwie Peter nicht PeTer ist! Also führt er denn Befehl IF (!res) "schreibe PeTer in die Datenbank" aus! Die Datenbank läst den Befehl aber nicht zu, weil UNIQUE für Namen aktiviert ist und da ist für ihn Peter gleich PeTer!!!
Darum möchte ich eine Abfrage machen, wenn Peter vorhanden egal ob pETER, PeTeR usw.geschrieben und wieder PETER genommen wird (auch egal wie geschrieben) dann Nachricht: $Fehler Name existiert bereits!
verwende auf beie Strings zB. http://www.php.net/manual/de/function.strtolower.php also strtolower , das wandelt einen string in kleinbuchstaben um, naja und dann vergleichen, so einfach ist das.
Downline 22-10-2001, 14:54 Sag ich doch die ganze Zeit! Die eingaben einfach in kleinbuchstaben umwandeln und dann vergleichen! Das ist deine Möglichkeit die du hast! Einfacher wirds net!!
Hast recht! Danke jetzt hast bei mir den Stein ins rollen gebracht!
$Vergleich = strtolower($name);
$db = mysql_connect();
$res = mysql_db_query("datenbank","select name from Namen");
$num = mysql_num_rows($res);
for ($i=0; $i<$num; $i++)
{
$an = mysql_result($res, $i, "name");
$an = strtolower($an);
if ($an==$Vergleich)
{
$Fehler="Name existiert bereits!";
}
}
Eigentlich so einfach, aber trotzdem konnt vorher keiner mir so recht helfen.
Also nochmals danke!
Original geschrieben von Jump
Eigentlich so einfach, aber trotzdem konnt vorher keiner mir so recht helfen.
Original geschrieben von Downline
Was hälst Du denn davon, wenn Du die eingaben formatierst, bevor sie in die Datenbank geschrieben werden! So das es egal ist ob Peter, peter oder PeTeR! Formatiere den Namen einfach so, das er immer klein geschrieben wird. Dann müßte es eigentlich gehen!!
Ich weiss ja nicht, aber die erste Antwort war eigentlich schon die richtige, oder wie ?
1) like ist sowieso case-insensitiv ... zumindest bei mir
2) in SQL gibt´s die Funktion UPPER, also zur Not UPPER(name)=UPPER('$name') statt name like '$name'
PS: ein trim() vorneweg wär nicht schlecht!
Downline hat mir zwar den Tip gegeben, aber nicht gezeigt, wie ich es umsetzen kann... erst mit den Link konnt ich es sehen, wie es funzt! Vorher hab ich immer verstanden man macht die Buchstaben der Eingabe klein, vergleicht und speichert sie dann so in die Datenbank. Das wollt ich dann nicht, weil die Eingabe nicht verfälscht werden sollte! Dann hab ich erst gesehen, daß nur zum vergleichen beide Daten zu Kleinbuchstaben werden und die Originaleingabe gespeichert wird!
Tja, darum haben mir die Postings vorher nicht viel gebracht.
Downline 23-10-2001, 08:32 Ich hab Dir ja nur den Hinweis gegeben! Hättest mir gesagt, das Du nicht weißt wie! Aber Du wolltest es ja unbedingt anders machen! :(
Sagte ja hab Dich falsch verstanden...
Dachte dies würde das Ergebnis verfälschen, weil Du nicht gesagt hast, daß ich auch den Eintrag in der Datenbank zu formatieren habe! Aber Hauptsache eine Lösung ist da!
|
-
- |