Ankündigung

Einklappen
Keine Ankündigung bisher.

Zahlen- und Datumsformat...

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

  • Zahlen- und Datumsformat...

    Hallo zusammen,
    ich habe da ein Problem, dass mir schon einige schlaflose Nächte erbracht hat

    Ich habe eine kleine mysql Datenbank erstellt. Funktioniert auch alles soweit.
    Leider habe ich mit den Formaten ein Problem. Wie kann ich die ausgabe von Zahlen formatieren?

    1. Tabelle in mysql hat eine spalte "wert" Typ "int".
    Darin kann ich ja nur einfache Zahlen speichern z.B. "70", oder???
    Ich möchte mit php die Daten abfragen und "70,00 €" ausgeben.
    Was kann ich machen??????

    2. Frage ist ähnlich.
    Das Datumsformat ist z.Z. "2004-05-22"...
    Kann ich das auch so ausgeben "22.05.2004"?????


    Wäre schön, wenn mir jemand einen Tipp geben kann...
    Danke im Voraus!


  • #2
    1.

    Zahlentypen und Ihre Wertigkeit
    int, float, double long usw. einfach mal nachlesen und du weist warum der typ INT nicht Hallo speichern kann

    zu 1.
    echo $row['preis'].'&euro';

    zu 2.
    speichere einen unixstamp und du kannst die ausgabe formatieren wie du willst

    oder:
    mktime benutzen

    oder
    $var = '2004-05-22';
    $varArray = explode('-', $var);
    echo $varArray[2].'.'.$varArray[1].'.'.$varArray[0];


    mfg

    Kommentar


    • #3
      Hallo,

      Zu1: Also, du kannst zum Beispiel das Feld der DB einfach in ein char oder varchar umwandeln. Dann kannst du Formate der Form 70,00 Euro speichern. oder du gehst folgendermaßen vor.

      class MyClass{

      var feld1; //wichtig; Die Variablennamen müssen genau wie die Felder der
      var feld2; //Tabelle heißen.
      var feld3_id; //Das idFeld aus der DB

      function select() {

      $query = "SELECT * FROM MyTable";
      $id = mysql_query($query); //Führt query aus

      while ($zeile = mysql_fetch_assoc($id)) {

      //solange Abfrage Ergenisse liefert
      //mysql_fetch_assoc() liefert eine Zeile des result Sets als Assoziatives Array
      //mit Feldnamen als keys

      $mc = new MyClass(); // Erzeugen eines Objekts

      foreach ($zeile as $key => $value)
      $mc -> $key = $value;

      $mc -> feld = $mc -> feld.", 00 Euro"; //Falls du beim int bleiben willst
      $mc -> feld = convSQLDate_GermanDate($mc -> feld); //Datumsformat.

      $array[$mc -> feld3_id] = $mc; //ein Array mit den Objekten füllen
      }
      mysql_free_result($id);
      return $array;
      }
      }


      Abrufen der Daten:

      <?php

      include_once("./PfadZurKlasse.php");
      include_once("./tools.php");

      $result = MyClass::select();

      foreach($result as $key => $value) echo $value->feld1."*";

      ?>

      Achso: die Convert Funktion. Schreib sie am besten in eine tools.php

      function convSQLDate_GermanDate($date) {
      splitSQLDate($date, & $day, & $month, & $year);
      $germandate = $day.".".$month.".".$year;
      return $germandate;
      }

      und die split funktion

      function splitSQLDate($date, & $day, & $month, & $year) {
      // Datum aus der DB kommt in der Form Y-m-d
      preg_match("/(\d{4})\-(\d{2})\-(\d{2})/", $date, $matches);

      $day = $matches[3];
      $month = $matches[2];
      $year = $matches[1];
      }

      Kommentar


      • #4
        SELECT * FROM ( prima tipp select mit * )

        MyClass::select(); ( punktnotation ... viel spass in php5 )

        Kommentar


        • #5
          2.
          PHP-Code:
          setlocale(LC_TIME"de_DE");
          echo 
          strftime('%d.%m.%Y,strtotime($DATUM)); 
          http://de2.php.net/manual/de/function.strftime.php
          http://de2.php.net/manual/de/function.strtotime.php

          Zitat von Maltaalataion
          function splitSQLDate($date, & $day, & $month, & $year) {
          // Datum aus der DB kommt in der Form Y-m-d
          preg_match("/(\d{4})\-(\d{2})\-(\d{2})/", $date, $matches);

          $day = $matches[3];
          $month = $matches[2];
          $year = $matches[1];
          }
          1. Warum hier Referenzen?
          2. preg_match ist ein bischen zu viel des guten, es gibt genügend Datum und Zeit Funktionen die alles liefern was man braucht ?

          3. Um die hässliche Wert-Zuweisung bei Split-Funktionen zu umgehen gibt es list();

          Kommentar


          • #6
            SELECT * FROM ( prima tipp select mit * )

            MyClass::select(); ( punktnotation ... viel spass in php5 )
            Wieso? Ist in php5 die Syntax anders? Hatte noch keine Zeit mich damit zu beschäftigen.

            2. preg_match ist ein bischen zu viel des guten, es gibt genügend Datum und Zeit Funktionen die alles liefern was man braucht />
            Das hab ich aus einem alten script. Damals hatte ich noch nicht so den Überblick, kannte mich aber von Java her mit RegEx und Musternvergleichen aus. Das hat hingehauen und ich habs einfach immer übernommen. Irgendwann ist mir dann das mit dem Rad und dem zweimal erfinden in den Sinn gekommen. Wie auch immer.

            Kommentar


            • #7
              aslo ich hatte in php5 immer probleme mit aufruf einer function in einer klasse per punktnotation
              meine Meinung im Moment ist am besten immer ein object erzeugen und per pfeilnotation zugreifen

              ---
              Bei der SQL-Anweisung SELECT * FROM ... muss das Datenbank-Management-System (DBMS) alle Spalten der betreffenden Datensätze selektieren, auch wenn in der anschließenden Verarbeitung nur ein Teil davon wirklich gebraucht wird. Das ist langsam und schlicht und einfach unsinnig, und die unnötigen Spalten verhindern unter Umständen, dass der integrierte Optimizer die Query effizient ausführen kann.
              http://www.php-faq.de/q/q-sql-select.html

              Kommentar


              • #8
                Probleme beim statischen Aufrufen einer Methode (: enstehen nur, wenn du innerhalb der Methoden Beziehungen auf das eigene Objekt nehmen willst ($this).Da ja kein Objekt instanziiert bzw. nicht über dieses auf die Methode zugegriffen wird meckert php.

                Kommentar


                • #9
                  auch wenn in der anschließenden Verarbeitung nur ein Teil davon wirklich gebraucht wird

                  Klar. Aber zb Aufruf

                  $user::selectAll() // Alle Nutzer der DB mit allen Werten der Felder

                  Derjenige, der das template baut, braucht nur $user zu kennen und kann sich darauf verlassen, dass in $user->name immer der Username steht in $user->email immer die Mail usw. Ob ders dann braucht oder nicht ist eine andere Sache. Sicher, wenn der die zb. die mail niemals braucht, dann werde ich sie auch nicht aus der DB holen. Oft stellt sich das dann aber erst später heraus, oder der Kunde kommt mit einem neuen Wunsch. So bin ich flexibeler. Optimieren kann man immer noch.

                  Aber eo etwas ist doch sicher von Vorteil. Wer die Templates baut, muss von der DB und dem php nichts wissen. Er braucht nur die smarty Platzhalter zu setzen.

                  <table>
                  {foreach item=user key=uid from=$user}

                  <tr><td> Username:<td>

                  {if $user->name}
                  <td>{user->name}</td>
                  {else}
                  <td> kein Nutzername vorhanden</td>
                  {/if}</tr>

                  <tr><td> Mail:<td>
                  <td>{user->mail}</td></tr>
                  {/foreach}
                  </table>

                  Kommentar


                  • #10
                    Am besten nimmst du für das Feld wert den Datentype DECIMAL().
                    Ansonsten geht es mit CONCAT

                    Code:
                    SELECT CONCAT(wert,',00 €') wert, DATE_FORMAT(datum,'%d.%m.%Y') datum FROM tabelle

                    Kommentar


                    • #11
                      <table>
                      {foreach item=user key=uid from=$user}

                      <tr><td> Username:<td>

                      {if $user->name}
                      <td>{user->name}</td>
                      {else}
                      <td> kein Nutzername vorhanden</td>
                      {/if}</tr>

                      <tr><td> Mail:<td>
                      <td>{user->mail}</td></tr>
                      {/foreach}
                      </table>


                      ---

                      ja, ja bla bla auf oop wert legen aber immernoch html und php mixen
                      wenn dann richtig und html code von php code trennen ( templatesysteme )
                      desweiteren alle spalten in der select abfrage aufführen warum wurde bereits gesagt
                      und nochwas, wenn man alle spalten braucht dann wäre ein construkt in der art

                      $result = mysql_query("SHOW COLUMNS FROM tabelle");
                      $data = array();
                      while ($row = mysql_fetch_assoc($result))
                      {
                      $sql = mysql_query("SELECT ".$row['Field']." FROM tabelle")or die(mysql_error());
                      $obj = mysql_fetch_object($sql);
                      $data[$row['Field']] = stripslashes($obj->$row['Field']);
                      }

                      nun hast du alle werte + bezeichner in einem array $data

                      mfg

                      Kommentar


                      • #12
                        while ($row = mysql_fetch_assoc($result))
                        {
                        $sql = mysql_query("SELECT ".$row['Field']." FROM tabelle")or die(mysql_error());

                        Du machst wirklich für jedes einzelnes Feld eine SELECT Abfrage?

                        Kommentar


                        • #13
                          ja, ja bla bla auf oop wert legen aber immernoch html und php mixen
                          Wo ist hier bitte php und html gemixt? Dass sind Kontrollstrukturen von smarty.

                          http://smarty.php.net/manual/de/lang...gned.variables

                          Kommentar


                          • #14
                            Re: Zahlen- und Datumsformat...

                            Zitat von filou
                            1. Tabelle in mysql hat eine spalte "wert" Typ "int".
                            Darin kann ich ja nur einfache Zahlen speichern z.B. "70", oder???
                            Ich möchte mit php die Daten abfragen und "70,00 €" ausgeben.
                            RTFM: http://de2.php.net/number_format
                            Code:
                            echo number_format ( $preis, 2, ',', '.') . '&euro;';
                            Das Datumsformat ist z.Z. "2004-05-22"...
                            Kann ich das auch so ausgeben "22.05.2004"?????
                            Ja, sowas kann MySQL:
                            Code:
                            SELECT <spaltenliste>, DATE_FORMAT(datumspalte, '%d.%m.%Y') AS datum FROM tabelle WHERE dies = das
                            RTFM: http://dev.mysql.com/doc/mysql/de/Da...functions.html

                            Kommentar

                            Lädt...
                            X