Dynamische Tabelle erstellen

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Dynamische Tabelle erstellen

    Hey erneut :D

    Ich möchte gerne auf meiner Website eine dynamische Tabelle erstellen.
    Die Daten sollen aus meiner Datenbank gelesen werden.
    Das alles klappt auch eigentlich schon, nur sieht das halt unübersichtlich aus.

    Mein Code:

    PHP-Quellcode

    1. <?php
    2. $result = mysql_query("SELECT buyTime, untilTime FROM users WHERE userName='".$_SESSION["user"]."';");
    3. $num_rows = mysql_num_rows($result);
    4. echo("Buy Date"."|Expire Date");
    5. echo "<br />";
    6. echo "<br />";
    7. while ($row = mysql_fetch_array($result)) {
    8. echo '<th>'.$row['buyTime'].'</th>'."|".'<th>'.$row['untilTime'].'</th>';
    9. echo "<br />";
    10. }
    11. ?>


    Ergebnis:



    Ja.. Wie kriege ich das in eine richtige Tabelle mit Trennlinien?

    Danke :)

    Lg
    Wieso wird dieser mysql_* Mist noch benutzt, das wird doch in aktuellen PHP Versionen gar nicht mehr unterstützt ... Siehe hier, da steht's ja groß und in einem roten Kasten.

    - Der Code ist anfällig für XSS (einschleusen von Fremdcode möglich) weil HTML direkt und ungefiltert ins Dokument gelangen kann
    - Außerdem anfällig für SQL-Injections, wenn z.B. der Benutzername single Quotes enthält ist dein SQL-Statement am Arsch - ein kleines DROP TABLE users vermiest dir möglicherweise den Tag.
    - Bitte Tabellen- und Feldnamen in SQL-Statements in Backticks setzen (unter anderem deswegen).


    PHP-Quellcode

    1. <?php
    2. # Sitzung starten
    3. session_start();
    4. # Ich knall da gleich mal irgendwas rein weil ich in meiner Tabelle den Benutzer "test" hab
    5. $_SESSION['user'] = 'test';
    6. # Fehlerausgabe aktivieren - bevor die Seite Live geht natürlich auf false setzen
    7. $debug = true;
    8. if ($debug) {
    9. ini_set('display_errors', true);
    10. error_reporting(E_ALL);
    11. }
    12. /**
    13. * Sichere Ausgabe von HTML (ne simple XSS prevention quasi)
    14. *
    15. * @param $value
    16. *
    17. * @return string
    18. */
    19. function e($value) {
    20. return htmlspecialchars($value, ENT_QUOTES, 'utf-8');
    21. }
    22. ?>
    23. <html>
    24. <head>
    25. <title>Test</title>
    26. <style>
    27. /**
    28. * Den ganzen Shit ein wenig stylen
    29. */
    30. * {
    31. padding : 0px;
    32. margin : 0px;
    33. }
    34. html {
    35. background-color : #444444;
    36. }
    37. body {
    38. font-family : "Verdana", "Arial", sans-serif;
    39. background-color : #ffffff;
    40. padding : 24px;
    41. margin : 32px auto;
    42. max-width : 90%;
    43. }
    44. table {
    45. border-collapse : collapse;
    46. border : 1px solid #cccccc;
    47. background-color : #f4f4f4;
    48. font-size : 14px;
    49. }
    50. table tr td,
    51. table tr th {
    52. padding : 8px;
    53. border : 1px solid #cccccc;
    54. color : #444444;
    55. }
    56. table tr th {
    57. font-weight : bold;
    58. text-align : center;
    59. }
    60. table tr td {
    61. background-color : #eeeeee;
    62. font-weight : normal;
    63. }
    64. /* Damit jede zweite Tabellenzeile einen etwas dunkleren Hintergrund hat */
    65. table tr:nth-child(even) td {
    66. background-color : #dddddd;
    67. }
    68. </style>
    69. </head>
    70. <body>
    71. <?php
    72. $db = null;
    73. try {
    74. # Datenbankverbindung herstellen mit dem Data Source Name, Benutzername,
    75. # Kennwort und einem Array mit Optionen
    76. $db = new PDO('mysql:host=localhost;dbname=test', 'xored', 'xored', [
    77. # UTF8 aktivieren
    78. PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
    79. # Standardmäßig die Ergebnisse als assoziatives Array fetchen - geht auch numerisch oder als Objekt
    80. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    81. ]);
    82. } catch (\PDOException $e) {
    83. echo "Da ist was schiefgelaufen:<br>" . $e->getMessage();
    84. }
    85. # Daten abrufen - das geht über die query() methode der PDO Klasse.
    86. # Die gibt ein PDOStatement object zurück, dessen Daten du mit fetchAll() abrufen kannst
    87. $Daten = $db->query("SELECT `buyTime`, `untilTime` FROM `users` WHERE `userName` = " . $db->quote($_SESSION['user']))->fetchAll();
    88. # Checken ob's Daten gibt
    89. if ($Daten !== false) {
    90. echo "<table>";
    91. echo "<thead>";
    92. echo "<tr>";
    93. echo "<th>Kaufdatum</th>";
    94. echo "<th>Ablaufdatum</th>";
    95. echo "</tr>";
    96. echo "</thead>";
    97. echo "<tbody>";
    98. # Die Daten in einer Schleife durchlaufen
    99. foreach ($Daten as $row) {
    100. echo "<tr>";
    101. # Hier mit der e() function die in diesem Dokument oben deklariert wurde Daten sicher ausgeben
    102. echo "<td>" . e($row['buyTime']) . "</td>";
    103. echo "<td>" . e($row['untilTime']) . "</td>";
    104. echo "</tr>";
    105. }
    106. echo "</tbody>";
    107. echo "</table>";
    108. }
    109. ?>
    110. </body>
    111. </html>


    Sieht dann exakt so aus das Ganze:


    Hinweis: fetchAll() gibt ein Array zurück (das Werte enthalten kann oder auch nicht, schließlich kann es ja sein dass für die gewählte Condition kein Ergebnis gefunden wird) oder aber false bei einem Fehler. Wie du im Code siehst kannst du mit dem !== Operator checken dass das Ergebnis kein Fehler ist.

    Lies dich doch mal ein in die Themen PDO, XSS, SQL-Injection und als erstes vielleicht auch mal generell in PHP, wenigstens die Basics. Ne Webapplikation sicher zu machen ist keine große Sache und geht ganz nebenbei wenn man's einmal drin hat. Aber mit deinem Code den du oben gepostet hast, kann dir jeder deine komplette Anwendung in Null Komma nix crashen und löscht / erstellt dir auch gleich noch beliebig Datenbanken oder Tabellen wenn der user GRANT permissions besitzt (ein beliebter Fehler bei Anfängern). Und selbst wenn nicht ist es sicher dennoch unerfreulich wenn dir jemand aus Spaß alle Tabellen leert oder sie mit Daten füttert bis dein Serverspeicher voll ist ^^

    //Edit "unerwünschte" Äußerungen wurden auf Bitte von @Marcus Gräfe entfernt :huh:

    Link :thumbup:


    www.marius-gerum.de
    PHP lernen | Programmierung | Sonstiger Krempel
    Zum Blog | PHP lernen | GitHub | Gists | List of awesome

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Link“ ()

    @Link Bitte bearbeite deinen Post umgehend und entferne die ganzen Kraftausdrücke. Das muss doch nun wirklich nicht sein.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum