variblen vergleichen ohne Groß/kleinschrift
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bedingung
code
dank
datum
entfernen
feld
gleichen taste
hilfe
klein schreibung
liegen
sonderzeichen
text
tip
umlaut
umwandeln
url
vergleichen
wut
zahl
zeichen
-
Hi Leute ich brauch mal wieder Hilfe.
Folgendes Problem,
ich vergleiche 2 Variablen auf „Gleichheit“, dabei möchte ich aber die Groß/Kleinschreibung ignorieren.
Derzeit ist zb.
, so sollte es aber sein.Peter ≠ peter
Gibt es eine Möglichkeit das direkt beim Vergleichen die Schriftart zu ignorieren?
Ich möchte nicht die Daten beim Speichern in kleine oder große Buchstaben umwandeln, das wäre die alternative die mir dazu bisher einfiel. Der Nutzer soll aber selber bestimmen ob der Name Groß oder klein ist.
if ($name_vali == $name_wertetabelle) { }
Tante Edit:
Sorry Leute ich bin ja völlig falsch hier, es ist natürlich PHP und gehört in eine andere Fore.
Könnte ein Mod das vieleicht verschieben?
Danke und SORRY
Tante Edit die 2te
man, man, hätte ich mal noch 10 min weiter gegoogelt. Habe die Lösung gefunden.
if (strcasecmp($name_vali, $name_wertetabelle) == 0) { }
Da muss ich mich für´s erstellen hier ja glatt entschuldigen.
Schönen Abend euch noch.
Beitrag zuletzt geändert: 21.11.2012 23:28:26 von aff3m1tw4ff3 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Eine Alternative wäre wohl auch ... beide mit strtolower()
if ( strtolower($name_vali) == strtolower($name_wertetabelle) ) { }
bzw. andersrum ... beide mit strtoupper()
if ( strtoupper($name_vali) == strtoupper($name_wertetabelle) ) { }
aber .... strcasecmp() ist wahrscheinlisch die "schönere" Methode
denn bei den anderen beiden vom vom Wert locale abhängig ist
was bei Umlauten (Ä, Ö, Ü, ä, ö ,ü) mit passendem locale geht
obwohl .. bei strcasecmp() steht in Kommentare auch: "... be sure to use the correct locale"
also auch da wohl aufpassen mit locale Settings und Umlauten
Was ist mit Zahlen / Sonderzeichen die auf der gleichen Taste (mit Shift) liegen ?
... als Bsp
und3
....... oder§
und+
.... etc. ?*
Beitrag zuletzt geändert: 22.11.2012 10:28:39 von juwely -
ja, das ist klar
aber wird nicht über Setzen der Werte für locale auch das (Tastaturlayout) festgelegt ?!
mit
ist das $ (Dollar-Zeichen) auf SHIFT+2setlocale(LC_ALL, "en_US");
mit
ist das $ (Dollar-Zeichen) auf SHIFT+4setlocale(LC_ALL, "de_DE");
ok, das ist jetzt hier vielleicht schon off-topic, aber nochmal die Frage: wie ist definiert, welche Zeichen bei strtolower() bzw. strtoupper() geändert werden und welche nicht ?
bzw. welche Zeichen in strcasecmp() verglichen werden (und welche nicht) ?
-
Umwandeln wollte ich den String ja nicht da ich Ihn später noch ausgeben will, da soll die Groß/Kleinschreibung noch so vorhanden sein wie in der DB.
Ich hätte da aber noch eine Frage, ich möchte zusätzlich noch die Leerzeichen entfernen.
Diese sollen allerdings direkt beim eintragen in die DB entfernt werden.
Der User gibt über ein Formular unter anderem seinen Namen an, dieser sollte hinten sowie vorne keine Leerzeichen enthalten. Hier fehlt mir im Momnet die Idee wo ich ansetze.
Was ich bereits weiß ist das man das mit
machen kann, allerdings kriege ich das einfach nicht hin.trim ()
Wo setze ich das
denn an?trim ()
Im Formular?
Oder erst beim prüfen der Daten mit mysql_real_escape?
Da suche ich nun seid gestern nach einer Lösung.
Das ist die Form ( hier mal gekürzt auf das Feld um das es geht )
ist das Feld um was es geht.kw_name
<form method="post" action="http://www.pennereck.de/admin/<? echo $link ?> " name="senden" target="fenster" onsubmit="window.open('','fenster','width=488,heig ht=450');"> <input type="text" text-transform="none" name="kw_name" value="Name" size="10" maxlength="25"> <input name="KW eintragen" type="submit" id="kw eintragen" value="Kampfwert an die MotD senden"/> </form>
Hier wird der Name geprüft
$kw_name = mysql_real_escape_string($_POST['kw_name'], $dbverbindung);
Und hier dann eingetragen:
$query = " INSERT INTO `$tabelle` (kw_name, kw_wert, kw_att, kw_def, kw_gangid, kw_stadt, date, ip, kw_sendeart, wut, boost, vali) VALUES ('$kw_name', '$kw_wert', '$kw_att', '$kw_def', '$kw_gangid', '$kw_stadt', '$datum', '$ip', '$sendeart', '$wut', '$boost', '$vali') ON DUPLICATE KEY UPDATE kw_name = '$kw_name', kw_wert = '$kw_wert', kw_att = '$kw_att', kw_def = '$kw_def', kw_gangid = '$kw_gangid', date = '$datum', ip = '$ip', kw_sendeart = '$sendeart', wut = '$wut', boost = '$boost', vali = '$kw_ausblenden', count_sylt = count_sylt+1";
Vielicht hat da ja noch jemand nen Tip für mich.
Danke wie immer für Eure Top Hilfe!!! -
Trim verwendest du so:
$kw_name = mysql_real_escape_string(trim($_POST['kw_name']), $dbverbindung);
-
also erstmal, nur zur Erklärung
mit dem strtolower() innerhalb der if-Bedingung wird die Variable nicht wirklich geändert / umgewandelt, sondern nur temporär innerhalb der if-Bedingung zum Vergleichen,
danach ist die Groß/Klein-Schreibung noch vorhanden.
$name1 = 'Peter'; $name2 = 'peter'; if ( strtolower($name1) == strtolower($name2) ) { print "<p>Die Namen sind gleich.</p>\n"; } // danach ist $name1 immernoch = 'Peter' also mit Großbuchstaben
zu trim() ... Beispiel:
$kw_name = $_POST['kw_name']; $kw_name = trim($kw_name); $kw_name = mysql_real_escape_string($kw_name);
oder wie @hackyourlife schreibt, gleich in einer Zeile kombinieren :)
Wenn es ein mehrzeiliges Eingabe-Feld ist (textarea)
kann man mit chop() auch Zeilenumbruch am Ende entfernen
$text = $_POST['eingabe_text']; $text = chop($text); $text = trim($text); $text = mysql_real_escape_string($text);
oder direkt die Steuer-Zeichen entfernen, bzw. duch Leerzeichen ersetzen
damit auch innerhalb im Text kein Umbruch ist
$text = str_replace("\r",' ',$text); // --- Zeilenvorschub $text = str_replace("\n",' ',$text); // --- Zeilenumbruch $text = str_replace("\t",' ',$text); // --- Tabulator / Einrückung
Noch ein Tip: ... mehrere Leerzeichen zu einem Leerzeichen machen
wenn Du die Steuerzeichen zu Leerzeichen ersetzt hast oder
wenn Eingabe zB. ist:
dann soll daraus werden:Peter Lustig
Peter Lustig
$name = preg_replace('/ {2,}/', ' ', $name);
und danach noch einzelne Leerzeichen am Anfang oder Ende entfernen mit
$name = trim($name);
und wenn wir schon dabei sind ...
Du kannst auch generell alle Sonderzeichen ausschließen,
und nur Buchstaben und Zahlen im String übrig lassen
$text = preg_replace("/[^0-9a-zA-Z äöüÄÖÜß]/","",$text);
damit bleiben nur nur 0-9 und a-z und A-Z und "Leerzeichen" und äöüÄÖÜß übrig
... bei den Sonderzeichen (äöüÄÖÜß) musst Du evtl aufpassen ob UTF-8 oder ISO
Beitrag zuletzt geändert: 22.11.2012 11:48:14 von juwely -
hackyourlife schrieb:
Trim verwendest du so:$kw_name = mysql_real_escape_string(trim($_POST['kw_name']), $dbverbindung);
So habe ich es jetzt gemacht, danke für die Hilfe, ich habe zwar jede Menge getestet aber so natürlich nicht.
juwely schrieb:
also erstmal, nur zur Erklärung
mit dem strtolower() innerhalb der if-Bedingung wird die Variable nicht wirklich geändert / umgewandelt, sondern nur temporär innerhalb der if-Bedingung zum Vergleichen,
danach ist die Groß/Klein-Schreibung noch vorhanden.
Danke für die Erklärung, das hatte ich dann komplett falsch verstanden. Ich bin davon ausgegangen das die Variable dann auch außerhalb der if-Bedingung geänder ist. Mit nen bissl logisch denken hätte ich das natürlich wissen können, aber naja
manchmal ist halt komisch :)
Danke noch mal an alle für die Hilfe und die ausführlichen Infos,
LG Marco
Beitrag zuletzt geändert: 22.11.2012 12:27:56 von aff3m1tw4ff3 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage