kostenloser Webspace werbefrei: lima-city


variblen vergleichen ohne Groß/kleinschrift

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    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.
    Peter ≠ peter
    , so sollte es aber sein.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
    3
    und
    §
    ....... oder
    +
    und
    *
    .... etc. ?



    Beitrag zuletzt geändert: 22.11.2012 10:28:39 von juwely
  4. juwely schrieb:
    Was ist mit Zahlen / Sonderzeichen die auf der gleichen Taste (mit Shift) liegen ?
    ... als Bsp 3 und § ....... oder + und * .... etc. ?


    Die werden nicht geändert. Das hängt ja auch vom Tastaturlayout ab, auf englischen Tastaturen sind die Belegungen für Sonderzeichen ganz anders.
  5. ja, das ist klar
    aber wird nicht über Setzen der Werte für locale auch das (Tastaturlayout) festgelegt ?!

    mit
    setlocale(LC_ALL, "en_US");
    ist das $ (Dollar-Zeichen) auf SHIFT+2
    mit
    setlocale(LC_ALL, "de_DE");
    ist das $ (Dollar-Zeichen) auf SHIFT+4

    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) ?
  6. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    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
    trim ()
    machen kann, allerdings kriege ich das einfach nicht hin.
    Wo setze ich das
    trim ()
    denn an?

    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 )
    kw_name
    ist das Feld um was es geht.
    <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!!!
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Trim verwendest du so:
    $kw_name = mysql_real_escape_string(trim($_POST['kw_name']), $dbverbindung);
  8. 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:
    Peter      Lustig
    dann soll daraus werden:
    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
  9. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    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
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!