explode(), implode() - Fehler

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • explode(), implode() - Fehler

    Was stimmt an meinem Code nicht???
    Wenn es nur einen einzelnen Ort gibt, alle Buchstaben lower, dann den ersten in upper umwandeln. strtolower funktioniert, ucfirst allerdings nicht.

    Ist ein Ort ein zusammengesetzter Name Bad-Bertrich, dann wie oben verfahren. Klappt aber nicht, es wird nichts in die DB geschrieben. Oder kann ich alles zusammen machen?

    Wer hilft mir weiter???

    Hier der Code:
    PHP-Code:
    function setPersonalData(){
        
            
    $city $_POST['city'];
            
    $city strtolower($city);
            
    $city ucfirst($city);
            
    $city str_replace(array('ä','ö','ü'),array('ae','oe','ue'),$city);
            
    //$pieces = explode(" ", "-",$city);
            //$pieces[0] = ucfirst($pieces[0]);
            //$pieces[1] = ucfirst($pieces[1]);
            //$city = implode(" ", "-",$pieces);
            
            
                
    $query "INSERT INTO users ( user_lname,
                                          user_fname,
                                          user_address1,
                                          user_address2,
                                          user_zip,
                                          user_city,
                                          user_phone,
                                          user_mail 
                                          )                                             
                      
                      VALUES            ( '"
    .mysql_escape_string(stripslashes($_POST['lname']))."',
                                          '"
    .mysql_escape_string(stripslashes($_POST['fname']))."',
                                          '"
    .mysql_escape_string(stripslashes($_POST['address1']))."',
                                          '"
    .mysql_escape_string(stripslashes($_POST['address2']))."',
                                          '"
    .mysql_escape_string(stripslashes($_POST['zip']))."',
                                          '
    $city2',
                                          '"
    .mysql_escape_string(stripslashes($_POST['phone']))."',
                                          '"
    .mysql_escape_string(stripslashes($_POST['mail']))."'
                                            )
                                            "
    ;
            
            
    mysql_query($query);
        
        } 

  • #2
    ordentlicher coding-style, nett

    das escapen aller POST-werte würde ich mit foreach machen.

    fügt vor der ausführung der query mal ein echo($query); ein und poste die query hier.

    Kommentar


    • #3
      Re: explode(), implode() - Fehler

      Original geschrieben von bmaas
      PHP-Code:
      $pieces explode(" ""-",$city);
      $pieces[0] = ucfirst($pieces[0]);
      $pieces[1] = ucfirst($pieces[1]);
      $city implode(" ""-",$pieces); 
      mach mal so: (Tipp: schau mal nach www.php.net oder selfPHP )
      PHP-Code:
      $pieces explode(" ",$city);
      $pieces[0] = ucfirst($pieces[0]);
      $pieces[1] = ucfirst($pieces[1]);
      $city implode(" ",$pieces);

      $pieces explode("-",$city);
      $pieces[0] = ucfirst($pieces[0]);
      $pieces[1] = ucfirst($pieces[1]);
      $city implode("-",$pieces); 
      ... und dann solltest du die einzelnen Pieces noch mit 'ner foreach-Schleife bearbeiten (wer weiß wie viele das sind )
      Zuletzt geändert von Meillo; 03.10.2004, 18:30.
      [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

      [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

      [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
      (from here)

      Kommentar


      • #4
        wieso noch bearbeiten?

        habe im moment echt eine blockade.

        was ist mit meinem esrten teil, d.h. wenn ein ort kein zusammengesetzter name ist?

        ausserdem funzt ucfirst() nicht. woran kann das liegen??

        Kommentar


        • #5
          oki nochmal langsam

          Mit "die Pieces mit 'ner foreach-Schleife bearbeiten" meinte ich, du sollst eine solche Schleife nutzen, da es ja nicht nur 2 Teile sein können, sondern evtl. auch 3 oder mehr. z.B. "Ulm an der Donau" << 4 Teile!!
          (wg. foreach solltest du dich mal bei selfphp schlau machen - IMHO ist das die verständlichste Referenz)

          Man sollte grundsätzlich immer allg. proggen

          --

          du musst 2x explode verwenden, da es ja auch "Bad Irgend-Was" geben könnte.
          also erst wird
          aus "bad irGend-waS"
          $pieces[0]="Bad"
          $pieces[1]="Irgend-was"
          dann wird es wieder zusammengesetzt zu
          "Bad Irgend-was"
          und dann wieder zerlegt
          $pieces[0]="Bad-Irgend"
          $pieces[1]="Was"
          und erneut zusammen gefügt - kappiert?

          --

          ucfirst() hab ich mir noch nie angeschaut, aber kuck doch selbst! z.B. unter
          selfPHP- ucfirst() da steht doch alles toll beschrieben.
          oder du benutzt die off. Ref. unter ucfirst

          Also wenn es um die korrekte Anwendung von Fkten geht, da must du schon einiges Selbstengagement zeigen - sonst wirst du nicht sehr viel Unterstützung finden.
          [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

          [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

          [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
          (from here)

          Kommentar


          • #6
            Da ich selbst gerne eine Lösung hierfür hätte, habe ich mal eben fix ein Skript entwickelt. Ist vielleicht ganz nützlich, wenn man mal wieder eine Adress-Datei bekommt, in der alles in Großbuchstaben gehalten ist.

            Zwar habe ich nicht alle Ortsnamen in Deutschland durchgetestetn, aber die meisten werden korrekt umgesetzt. Getestet habe ich mit den Orten aus OpenGeoDB.

            Womit ich nicht zufrieden bin ist der rechenintensive Teil des Ersetzens im Town-String, da ich nicht mitprotokolliere, ob ein die Trennung an einem Leerzeichen oder an einem Bindestrich erfolgt ist.

            Für eine intelligentere/performantere Lösung wäre ich natürlich dankbar. :-)

            EDIT:
            Noch dieser Hinweis aus der PHP-Doku:
            "Beachten Sie, dass die Zeichen des Alphabets abhängig sind vom Wert des gesetzten locale. Ist dieser (Voreinstellung) "C", werden die deutschen Umlaute nicht erkannt. "



            PHP-Code:
            $towns = array("ROTHENBURG OB DER TAUBER","BAD-BERTRICH","BADEN-BADEN","KOBLENZ","ZELL IM ECK");

            for(
            $i=0;$i<count($towns);$i++){
                echo 
            uc_towns($towns[$i])."<br>";
            }

            function 
            uc_towns($town){
                
            $ignore_words = array("ob","der","am","an","in","im","bei");
                
                
            $town strtolower($town);
                
            $words preg_split("/ |-/",$town);
                
                for(
            $i=0;$i<count($words);$i++){
                    if(!
            in_array($words[$i],$ignore_words)){
                        
            $town preg_replace("/".$words[$i]."/",ucfirst($words[$i]),$town);
                    }
                }
                return 
            $town;

            Zuletzt geändert von Cymon; 04.10.2004, 10:19.
            Happiness is an empty error log

            Kommentar


            • #7
              Und mit Umlauten

              Okay, das mit den Umlauten hat mich dann doch gewurmt. Hier die Lösung, die zumindest mit deutschen Umlauten arbeitet, unabhängig von "locale".

              Das war'sdann aber für heute. ;-)

              PHP-Code:
              $towns = array("KÖLN","ÖTZTAL","Straßburg","ROTHENBURG OB DER TAUBER","BAD-BERTRICH","BADEN-BADEN","KOBLENZ","ZELL IM ECK");

              for(
              $i=0;$i<count($towns);$i++){
                  echo 
              uc_towns($towns[$i])."<br>";
              }

              function 
              uc_towns($town){
                  
              $ignore_words = array("ob","der","die","am","in","im","bei","an");
                  
                  
              $town strtolower($town);
                  
                  
              $town strtr($town,"ÄÖÜ","äöü");
                  
                  
              $words preg_split("/ |-/",$town);
                  
                  for(
              $i=0;$i<count($words);$i++){
                      if(!
              in_array($words[$i],$ignore_words)){
                          if(
              preg_match("/^ä|^ö|^ü/",$town)){ $town{0} = strtr($town{0},"äöü","ÄÖÜ"); }
                          
              $town preg_replace("/".$words[$i]."/",ucfirst($words[$i]),$town);
                      }
                  }
                  return 
              $town;

              Happiness is an empty error log

              Kommentar


              • #8
                Super vielen Dank.

                Klappt prima.

                Was allerdings noch zu bedenken wäre ist, dass unterschiedliche Schreibweise von Städten aber Inkonsistenz in der DB einführen kann (z.B. Köln vs- Koeln)?

                Also wäre es doch eigentlich besser alle äöe durch aeoeue zu ersetzen oder sehe ich das falsch??

                Kommentar


                • #9
                  Wieso "Inkonsistenz", wird der Ortsname als Schlüssel verwendet? Würde ich nicht empfehlen, denn es gibt zB. mehrere Orte mit dem Namen "Hagen" oder "Neustadt". Hierfür verwendet man besser die PLZ. Auch als Suchkriterium eignet sie sich besser.

                  Zudem sollte mit der beschriebenen Version für Umlaute das Problem nicht mehr auftreten.
                  Happiness is an empty error log

                  Kommentar

                  Lädt...
                  X