Ankündigung

Einklappen
Keine Ankündigung bisher.

Tabelle Werte kleiner 0 einfärben

Einklappen

Neue Werbung 2019

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

  • Tabelle Werte kleiner 0 einfärben

    Hallo zusammen,

    ich sitze jetzt nun schon ewig davor und versuche einfach eine Tabelle die Zahlen in der Spalte $row['credit'] enthält bei kleiner 0 rot einzufärben.

    PHP-Code:
    <table id="tbl_kunden" class="table tablesorter">
        <thead>
            <tr>
                <th># ID</th>
                <th><?php echo $customers['firstname']; ?></th>
                <th><?php echo $customers['lastname']; ?></th>
          <th><?php echo $customers['tagid1']; ?></th>
          <th><?php echo $customers['tagid2']; ?></th>
          <th><?php echo $customers['admin']; ?></th>
          <th><?php echo $customers['credit']; ?></th>
                <th><?php echo $customers['actions']; ?></th>
            </tr>
        </thead>
        <tbody>
            <?php
            
    include("inc/db_connect.php");

            
    $stmt $dbh->prepare("SELECT * FROM customers");
            
    $stmt->execute();
           while(
    $row $stmt->fetch())
            {

        if (
    $row['admin']==1)
        {
          
    $row['admin'] = "ja";
        }
        else 
        {
          
    $row['admin'] = "Nein";
        }

                  echo 
    "<tr>";
            echo 
    "<td>" $row['k_id'] . "</td>";
                    echo 
    "<td>" $row['firstname'] . "</td>";
            echo 
    "<td>" $row['lastname'] . "</td>";
            echo 
    "<td>" $row['tagid1'] . "</td>";
            echo 
    "<td>" $row['tagid2'] . "</td>";
            echo 
    "<td>" $row['admin'] . "</td>";
                    echo 
    "<td>" $row['credit'] . "</td>";
                    echo 
    "<td><a href="#"><span class="glyphicon glyphicon-pencil" aria-hidden="true" data-toggle="modal" data-target="#modal_kunde_bearbeiten" data-id="".$row['k_id'].""></span></a> 
                    
    <a href="kunden/loeschen/".$row['k_id']."" onclick="return confirm('" $customers['delete'] . "');"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
               <
    a href="kunden/loeschen/".$row['k_id']."" onclick="return confirm('" $customers['delete'] . "');"><span class="glyphicon glyphicon-euro" aria-hidden="true"></span></a>
               <
    a href="kunden/loeschen/".$row['k_id']."" onclick="return confirm('" $customers['delete'] . "');"><span class="glyphicon glyphicon-signal" aria-hidden="true"></span></a></td>";
                echo "
    </tr>";
            }
            ?>
        </tbody>
    </table>
    Wie gesagt es geht um die Splate "credit". theoretisch müsste ich direkt nach der while schleifen abfragen wenn der wert kleiner 0 ist.

    PHP-Code:
      if ($row['creidt']<0)
        {
         echo 
    color:"red";
        }
        else 
        {
          echo 
    color:"green";
        } 
    Aber ich noch nicht herausgefunden wie die Tabelle ansprechen muss das sich die Farbe der Zahl ändert.

    Bestimmt total einfach, ich habe nur ein Brett vor dem Kopf

    Danke euch

  • #2
    Ganz Quick und Dirty:

    PHP-Code:
    echo "<td style='" . ($row['credit'] < 'color: red' 'color: green') . "'> . $row['credit'] . "</td>"; 
    Etwas schöner wäre es wenn du in Deinem CSS-File eine Klasse green und red erstellst und dann das auf dieselbe Art und Weise der Tabellenspalte zuweist.

    Kommentar


    • #3
      Zitat von jonas3344 Beitrag anzeigen
      Etwas schöner wäre es wenn du in Deinem CSS-File eine Klasse green und red erstellst und dann das auf dieselbe Art und Weise der Tabellenspalte zuweist.
      Jein. Das ganze über class-Attribute zu lösen ist die einzig richtige Lösung (inline-CSS ist böse[tm]) - allerdings sollten die Klassen nicht nach dem Aussehen sondern der Funktion benannt werden, "green" und "red" sind also falsch.
      Im Originalcode sind noch weitere Fehler: das onclick-Attribut gehört nicht in den Code sondern per Event-Handler nachträglich eingehängt, zudem fehlt die Behandlung des Kontextwechsels!

      Kommentar


      • #4
        Wie gesagt es geht um die Splate "credit". theoretisch müsste ich direkt nach der while schleifen abfragen wenn der wert kleiner 0 ist.
        Wieso nach ?

        das eva prinzip macht den code lesbarer und wartbarer, select * ist pfui , inline css sowei onclick im element ist auch nicht so toll.
        ich würde das einfärben danach mit hilfe von js machen.

        Kommentar


        • #5
          jonas3344

          Danke Dir, habe ich versucht aber dann wird gar nichts mehr angezeigt. Laut Apache LOG folgender Fehler:
          PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

          Code sieht jetzt so aus:

          PHP-Code:
          <table id="tbl_kunden" class="table tablesorter">
              <thead>
                  <tr>
                      <th># ID</th>
                      <th><?php echo $customers['firstname']; ?></th>
                      <th><?php echo $customers['lastname']; ?></th>
                <th><?php echo $customers['tagid1']; ?></th>
                <th><?php echo $customers['tagid2']; ?></th>
                <th><?php echo $customers['admin']; ?></th>
                <th><?php echo $customers['credit']; ?></th>
                      <th><?php echo $customers['actions']; ?></th>
                  </tr>
              </thead>
              <tbody>
                  <?php
                  
          include("inc/db_connect.php");

                  
          $stmt $dbh->prepare("SELECT * FROM customers");
                  
          $stmt->execute();
                 while(
          $row $stmt->fetch())
                  {

              if (
          $row['admin']==1)
              {
                
          $row['admin'] = "ja";
              }
              else 
              {
                
          $row['admin'] = "Nein";
              }

                        echo 
          "<tr>";
                  echo 
          "<td>" $row['k_id'] . "</td>";
                          echo 
          "<td>" $row['firstname'] . "</td>";
                  echo 
          "<td>" $row['lastname'] . "</td>";
                  echo 
          "<td>" $row['tagid1'] . "</td>";
                  echo 
          "<td>" $row['tagid2'] . "</td>";
                  echo 
          "<td>" $row['admin'] . "</td>";
                          echo 
          "<td style='" . ($row['credit'] < 'color: red' 'color: green') . "'> . $row['credit'] . "</td>"; 
                          echo "
          <td><a href="#"><span class="glyphicon glyphicon-pencil" aria-hidden="true" data-toggle="modal" data-target="#modal_kunde_bearbeiten" data-id="".$row['k_id'].""></span></a
                          <
          a href="kunden/loeschen/".$row['k_id']."" onclick="return confirm('" $customers['delete'] . "');"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
                     <
          a href="kunden/pay/".$row['k_id'].$_SESSION['user']."" onclick="return confirm('" $customers['pay'] . "');"><span class="glyphicon glyphicon-euro" aria-hidden="true"></span></a>
                     </
          td>";
                      echo "
          </tr>";
                  }
                  ?>
              </tbody>
          </table>

          Kommentar


          • #6
            Zitat von tk1234 Beitrag anzeigen
            Jein. Das ganze über class-Attribute zu lösen ist die einzig richtige Lösung (inline-CSS ist böse[tm]) - allerdings sollten die Klassen nicht nach dem Aussehen sondern der Funktion benannt werden, "green" und "red" sind also falsch.
            Wie jemand seine Klassen bennent darf er/sie glaub ich selbst entscheiden. Da von richtig und falsch zu sprechen find ich dann doch eher bescheiden ...

            Kommentar


            • #7
              habe den Fehler selbst gefunden, hat ein " gefehlt. Funktioniert nun

              Danke vielmals!

              Kommentar


              • #8
                Zitat von TheOnlyOne Beitrag anzeigen
                jonas3344

                Danke Dir, habe ich versucht aber dann wird gar nichts mehr angezeigt. Laut Apache LOG folgender Fehler:
                PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
                Syntax-Fehler solltest du schon selbst beheben können, nicht? Ich habs im Browser getippt, da fehlt ein " nach dem Abschluss von <td>.

                Kommentar


                • #9
                  Wenn wir schon dabei sind, wie füge ich ein € Zeichen hinterhalb des Betrages ein? Das muss doch ein bestimmte Schreibweise haben damit es dargestellt werden kann?

                  Kommentar


                  • #10
                    Zitat von jonas3344 Beitrag anzeigen
                    Wie jemand seine Klassen bennent darf er/sie glaub ich selbst entscheiden. Da von richtig und falsch zu sprechen find ich dann doch eher bescheiden ...
                    Was ist denn wenn die Zahlen irgendwann mal nicht mehr rot und grün dargestellt werden sollen sondern z.B. fett bzw. kursiv? Dann ist der Name der Klasse völlig falsch - deswegen sollten Klassen generell nach dem Zweck benannt werden, nie nach der Darstellung.

                    Zitat von TheOnlyOne Beitrag anzeigen
                    Wenn wir schon dabei sind, wie füge ich ein € Zeichen hinterhalb des Betrages ein? Das muss doch ein bestimmte Schreibweise haben damit es dargestellt werden kann?
                    Einfach reinschreiben - setzt natürlich voraus dass du immer und überall UTF-8 verwendest.

                    Kommentar


                    • #11
                      Zitat von jonas3344 Beitrag anzeigen

                      Wie jemand seine Klassen bennent darf er/sie glaub ich selbst entscheiden. Da von richtig und falsch zu sprechen find ich dann doch eher bescheiden ...
                      stimmt, namings conventions nerven sooo .
                      und ist ja auch irgendwie schön, ne class red überall im code zu haben, auch wenn die inzwischen schon längst ne andere farbe hat.

                      Kommentar


                      • #12
                        Zitat von tk1234 Beitrag anzeigen
                        Was ist denn wenn die Zahlen irgendwann mal nicht mehr rot und grün dargestellt werden sollen sondern z.B. fett bzw. kursiv? Dann ist der Name der Klasse völlig falsch - deswegen sollten Klassen generell nach dem Zweck benannt werden, nie nach der Darstellung.
                        Wie gesagt, das muss und darf jeder selbst entscheiden wie er das machen will. Wenn ich an verschiedenen Orten rote Schrift brauche mache ich eine Klasse red und wenn ich an verschiedenen Orten kursiv brauche mach ich eine Klasse italic. Und wenn ich dann was rotes, kursives brauche hab ich red italic.

                        Kommentar


                        • #13
                          Zitat von jonas3344 Beitrag anzeigen

                          Wie gesagt, das muss und darf jeder selbst entscheiden wie er das machen will.
                          Stimmt.
                          wenn rot dem nutzer was sagen soll (warning/error ) wieso vorher eine warnigcolor deffinieren ?
                          beim ändern des layoutes wird das ganze so ein heiden spass, TE freut sich sicher - mal abgesehen davon, dass es wirklich schwer ist mit syleangebane wie red, green ein stimmiges harmoniescheslayout zu bauen.
                          aber ja, jeder kann wie er will; und offensichtliche ffallstricke werden hier halt angemekt.

                          Kommentar


                          • #14
                            TheOnlyOne
                            Dein Code hat gleich mehrere Schwachstellen auf die ich kurz eingehen möchte:
                            PHP-Code:
                            <tbody>
                                    <?php
                                    
                            include("inc/db_connect.php");

                                    
                            $stmt $dbh->prepare("SELECT * FROM customers");
                                    
                            $stmt->execute();
                                   while(
                            $row $stmt->fetch())
                            Hier schreibst du die Datenbankabfrage in die Ausgabe von HTML, diese gehört aber nach oben, vor dem Beginn von HTML. Siehe dazu in der Wissenssammlung den Abschnitt EVA-Prinzip.
                            SELECT * sollte vermieden werden, siehe https://php-de.github.io/jumpto/faq/#select-star
                            Du verwendest prepared statement ohne Platzhalter, dann kannst du auch ganz normal und gefahrlos query benutzen.

                            Zum eigentlichen Problem:
                            Das man die Darstellung mit einer CSS-Klasse bequem erledigen kann, darauf wurde ja jetzt schon hingewiesen.
                            In deinem Bild in Beitrag #9 sieht man zudem weitere Probleme. Die Zahlen stehen nicht in einer Reihe gleichmässig untereinander. Das Euro-Symbol für die Währung fehlt und die Zahlen sind im amerikanischen Format.
                            Hier hast du mal ein Beispiel wie man das geschickt umsetzen kann.
                            PHP-Code:
                            <?php
                            $array 
                            = ["-82.21"0"-1.75","-3.40","-1.72"2.59,"-0.008"];

                            $html_tbody null;
                            $currency = new \NumberFormatter("de-DE", \NumberFormatter::CURRENCY);

                            foreach ( 
                            $array as $number => $value ){
                                
                            $class 'currency';
                                if ( 
                            > (float)$value ) { $class 'currency negative'; }
                                
                            $html_tbody .= '<tr><td>' $number '</td><td class="' $class'">' $currency->format($value) . '</td></tr>';
                            }
                            ?>

                            <!DOCTYPE html>
                            <html lang="de">
                            <head>
                            <meta charset="UTF-8">
                            <title>Währungsdarstellung in einer Tabelle mit CSS</title>
                            <style>
                                table#slip { border-collapse: separate; border-spacing: 10px;}
                                .currency {
                                    font-family: monospace;
                                    color: green;
                                    text-align: right;
                                    font-size: 1.25em;
                                }
                                .negative { color: red;}
                            </style>
                            </head>
                            <body>
                            <table id="slip">
                                <thead>
                                    <tr><th>lfd.Nr</th><th>Guthaben</th></tr>
                                </thead>
                                <tbody>
                                    <?= $html_tbody?>
                                </tbody>
                            </table>
                            </body>
                            </html>
                            Für die Währungsausgabe eignet sich die Klasse NumberFormatter ganz besonders, alle Formatierungen werden von der Klasse in Abhängigkeit von der Sprachwahl automatisch vorgenommen Das € Zeichen wird richtig angehängt, zudem beinhaltet die Klasse eine Rundungsfunktion.
                            Die Farbe und Schrifteinstellungen wird in der CSS Klasse currency vorgenommen.
                            Diese CSS-Klasse wird in der foreach Schleife als Standard angenommen und in der nächsten Zeile wird nur geschaut ob der Betrag kleiner 0 ist. Ist das der Fall wird die Variable $class ersetzt. In der CSS-Klasse negative wird lediglich die Farbe überschrieben, die anderen Einstellungen zu Schriftauswahl, Grösse, etc. bleiben unangetastet.

                            Auf den Kontextwechsel bin ich nicht eingegangen, den solltest du dir aber auch ansehen.

                            Versuche nun, das auf dein Script umzusetzen.

                            Kommentar


                            • #15
                              Zitat von jonas3344 Beitrag anzeigen
                              Wie jemand seine Klassen bennent darf er/sie glaub ich selbst entscheiden. Da von richtig und falsch zu sprechen find ich dann doch eher bescheiden ...
                              Klassen nach dem Aussehen zu benennen ist absurd. Da kann man gleich Inline-Styles verwenden. Genau für so einen Fall sind sie da.

                              Ich hatte mal einen Kollegen, der hatte Klassen wie font-size-14, text-color-red, usw. benannt. Da kann man doch gleich style="font-size: 14px" und style="color: red" schreiben. Wo ist der Vorteil die selbe Information in Klassennamen zu verwursten und hinterher dann noch überflüssige CSS-Styles dafür zu erstellen? Hat man doppelte Arbeit aber alle Nachteile.

                              Kommentar

                              Lädt...
                              X