Ankündigung

Einklappen
Keine Ankündigung bisher.

Geht das auch eleganter? (Anfängerfrage)

Einklappen

Neue Werbung 2019

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

  • Geht das auch eleganter? (Anfängerfrage)

    Hallo,
    eine SQL Abfrage wird mit "mysql_fetch_row" in ein bestimmtes Format (attribut="value") gebracht, um von einem anderen Datenbanksystem weiter bearbetet zu werden. Die eigene Funktion "str_replace" ersetzt Anführungszeichen und Zeilenumbrüche in \" und >cr< um auf dem Zielsystem wieder umgewandelt zu werden)

    Es hat sich herausgestellt, dass die Daten je nach Zeichenkodierung mit utf8_encode umgewandelt werden müssen. Ob utf8_encode ausgeführt werden soll, wird per Parameter übergeben.

    Folgender Code funktioniert, aber der Aufruf von utf8_encode (und auch von str_replace) in jeder Zeile wird bei 50 Zeilen sehr aufwendig da jede Zeile ja 2x vorhanden sein muss. Ich befürchte auch Geschwindigkeitsnachteile, wenn jede Zeile einzeln umgewandelt wird.

    Geht das (später mit 50 sql Feldern) nicht eleganter?

    PHP-Code:
        while( $row mysql_fetch_row ($result)){
                if (
    $encoding == "UTF-8") {
                    echo 
    "orders_id=\"$row[0]\"\n";
                    echo 
    "customers_id=\"$row[1]\"\n";
                    echo 
    "customers_name=\"".utf8_encode (str_replace$find$replace$row[2]))."\"\n";
                    echo 
    "customers_company=\"".utf8_encode (str_replace$find$replace$row[3]))."\"\n";
                    echo 
    "Encoding=UTF-8\n";
                }
                else
                {
                    echo 
    "orders_id=\"$row[0]\"\n";
                    echo 
    "customers_id=\"$row[1]\"\n";
                    echo 
    "customers_name=\"".str_replace$find$replace$row[2])."\"\n";
                    echo 
    "customers_company=\"".str_replace$find$replace$row[3])."\"\n";
                    echo 
    "Encoding=none\n";
                }
                echo 
    "-----\n"
    Ich stell mir vor, "utf8_encode und str_replace" 1 x auf alles anzuwenden.

    Berücksichtigt werden muss auch, dass str_replace IMMER, aber utf8_encode nur ausgeführt werden soll, wenn $encoding == "UTF-8" ist.

    Gruß
    Eviandem


  • #2
    Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
    Choosing an API
    Warum man mysql* generell nicht (mehr) nutzen sollte.
    Wie man von mysql* auf PDO umsteigt
    Wissenswertes zum Thema SQL-Injection

    Du kannst bei der Verbindung zu PDO angeben, mit welchen Zeichensatz gearbeitet werden soll. Dann brauchst du nichts mehr "übersetzen".
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Sag' mal, rkr, wird dir das nicht langsam selber zu affig, immer wieder deinen Standard-Text zu posten?
      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

      Kommentar


      • #4
        Ist nur ein Knopfdruck. Eigentlich nicht, nein. Was stört dich denn daran?
        Standards - Best Practices - AwesomePHP - Guideline für WebApps

        Kommentar


        • #5
          Naja, hier hast du ja noch einen Hinweis zum Thema gegeben, aber manchmal postest du nur deinen Standard-Text. Das sollte man sich dann auch schenken, wenn man nicht helfen will.
          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

          Kommentar


          • #6
            Wenn in einem Eingangspost 5 Fehler sind ist es doch Ok mal auch nur einen davon zu fixen. Ich habe nun mal nicht für jedes Problem ein Bookmarklet
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar


            • #7
              Manche Fehler haben nichts mit MySQL, MySQLi oder PDO zu tun, dann hilft dein Text herzlich wenig.
              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar


              • #8
                Es wird dem TE aber auch wenig helfen, seine App mit mysql_* großwerden zu lassen und dann später vor Problemen zu stehen, die man im Vorfeld hätte vermeiden können. Anfängern fehlt es an vielen Stellen noch am notwendigen Wissen für viele Dinge.
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  Sag mal Uha, stört es Dich nicht, den Thread jetzt mit Deiner Paralleldiskussion zu stören? Offensichtlich kommt ja das Thema mysqli nicht in den Köpfen an, dann ist es auch legetim darauf hinzuweisen.

                  Und wenn hier schon - in einem selten dämlichen Threadtitel btw. - nach "Eleganz" gefragt wird, sollte man vielleicht erst mal aufs Wesentliche hinweisen.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Sag mal Uha, stört es Dich nicht, den Thread jetzt mit Deiner Paralleldiskussion zu stören?
                    Nicht im geringsten!
                    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                    Kommentar


                    • #11
                      tl;dr, zum Thema:

                      Wozu zum Teufel willst du utf8_encode auf Daten anwenden die bereits in UTF8 vorliegen? Stell alles komplett auf UTF-8 um dann kannst du dir solche spielereien Sparen.

                      Und wozu das str_replace? Das klingt verdächtig.
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar


                      • #12
                        Zitat von tkausl Beitrag anzeigen
                        tl;dr, zum Thema:

                        Wozu zum Teufel willst du utf8_encode auf Daten anwenden die bereits in UTF8 vorliegen? Stell alles komplett auf UTF-8 um dann kannst du dir solche spielereien Sparen.
                        Manche Kunden haben Shop Datenbanken auf UTF-8 Basis, andere auf Latin1. Zum Import in FileMaker Pro müssen die Daten als UTF-8 vorliegen.

                        Zitat von tkausl Beitrag anzeigen
                        tl;dr, zum Thema:
                        Und wozu das str_replace? Das klingt verdächtig.
                        Die Daten werden gleich so aufbereitet, wie ich sie in FileMaker brauche.

                        Kommentar


                        • #13
                          Manche Kunden haben Shop Datenbanken auf UTF-8 Basis, andere auf Latin1. Zum Import in FileMaker Pro müssen die Daten als UTF-8 vorliegen.
                          Tja, so funktioniert das Thema Zeichensatz aber nicht.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Naja, doch. Wichtig ist nur, dass man außerhalb der DB mit einem einheitlichen Zeichensatz arbeitet. Das ist in diesem Fall natürlich Latin1 (ISO 8859-1), da es der kleinste gemeinsame Nenner ist und die Umgebung sonst Eingaben erlauben würde, die eine der Datenbanken nicht darstellen kann.

                            Der Datenbank bei der Verbindung zu sagen, welcher Zeichensatz da ankommen wird, würde das Problem im Bootstrapping-Stadium der Applikation lösen.
                            Standards - Best Practices - AwesomePHP - Guideline für WebApps

                            Kommentar


                            • #15
                              Du kannst aber nicht beliebig UTF-8 nach ISO ANSI mappen.
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X