Datum: Tag zweistellig anzeigen ($day) -> statt 1 --> 01

Hast du phpMyAdmin nicht installiert? Also in Zeile 103 deines ersten Scripts ist schon mal ein Syntax-Fehler drin.

- Führe zunächst das SQL von oben in phpMyAdmin aus, erstelle dann vom Ergebnis einen Screenshot und hänge ihn hier an. Das ist, damit wir hier erfahren, was für ein Spalten-Typ die Spalte 'date' hat. Wenn es ein String ist, wäre das SQL etwas umfangreicher, wenn es ein Date, Datetime oder Timestamp ist, kann man einfach die Funktion DATE_FORMAT anwenden.
- Dein Script läuft nicht mehr wegen dieser Zeile:

PHP:
$format = function ( $i ) {

Welche IDE/Editor verwendest du? Du solltest dir einen zulegen, der Syntax-Highlighting für PHP beherrscht. Notepad++ wäre da ein Beispiel. Dann hättest du gesehen, dass dort etwas nicht stimmen kann. Denn die geschweifte Klammer wird nicht geschlossen und semantisch macht die Zeile auch nicht unbedingt Sinn.
 
ich komme nochmal auf Deinen ersten Beitrag und die eigentliche Frage zurück:
[Null vor] 1.12.2014
Du zerteilst dieses String in die Einzeldaten mit explode(). Danach gibst Du der ersten Zahl eine Null, wenn sie kleiner als 10 ist. Übrigens kann das auch für die Monatszahl geschehen.. Dann wieder zusammensetzen.
PHP:
$datum = "1.5.2014";
$einzelteile = explode( ".", $datum );

if($einzelteile[0]<10) $einzelteile = "0".$einzelteile[0];
if($einzelteile[1]<10) $einzelteile = "0".$einzelteile[1];

$datumNeu = implode( ".", $einzelteile );
// -> 01.05.2014
Das wäre eine Lösung. Die ist nicht schön. Vor Allem hantierst Du mit Code, den Du scheinbar kaum verstehst - und dann macht Programmieren keinen Spaß. Wir sind dann nur Erste-Hilfe-Problemlöser.. Wirklich lernen tust Du mit Tipps, wie sie @saftmeister schreibt.

mfg chmee
 
Hallo,
m.E. müsste der PHP-Schnpsel von chmee so aussehen:
PHP:
$datum = "1.5.2014";
$einzelteile = explode( ".", $datum );

if($einzelteile[0]<10) $einzelteile[0] = "0".$einzelteile[0];
if($einzelteile[1]<10) $einzelteile[1] = "0".$einzelteile[1];

$datumNeu = implode( ".", $einzelteile );
// -> 01.05.2014
Es geht aber auch einfacher:
PHP:
date_default_timezone_set('Europe/Berlin');

$date = new DateTime('1.5.2014');
echo $date->format('d.m.Y');
// -> 01.05.2014
 
Der Code in #9 ist mal wieder ein Beispiel, in dem nahezu jeder Standardfehler gemacht wird.

EVA-Prinzip, SQL-Injections, XSS, veraltete mysql-Erweiterung, unnötige HTML-Entities, Redundanz, kaputtes HTML, …

Das würde ich mal dringend überarbeiten.

PS: Die fehlenden oder willkürlichen Code-Einrückungen würde ich auch verbessern.
 
Zuletzt bearbeitet:
Außerdem würde ich bei jeder Ausgabe von Daten im HTML die Funktion htmlspecialchars() verwenden. Die einzige Ausnahme bildet im obigen Code (Beitrag #9) wohl die ID von der DB, da diese garantiert eine Zahl ist und kein HTML enthalten kann.

Ich sehe gerade, dass mermshaus auch schon XSS angesprochen hatte, deswegen hier noch ein ergänzendes Code-Beispiel, wie man dagegen vorgehen kann:
PHP:
echo '<td valign="top" class="description">', htmlspecialchars($row['description'], ENT_HTML5), '</td>';

Das Attribut 'valign' ist übrigens auch veraltet und als obsolet gekennzeichnet: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td
 
Ich hätte auch Hintergründe dazu verlinkt oder erklärt (sorry, dass ich es nicht habe), wenn das nicht auf Dauer so unglaublich mühsam wäre, weil man es (mit jeweiligen Abweichungen) eben ständig machen muss, wenn man in Foren unterwegs ist. Es ist – meiner Erfahrung nach – leider nicht so ganz einfach, die Erklärung für derlei Dinge zu formulieren.

SQL-Injections und XSS gehören etwa zum Bereich „Kontextwechsel“. Da gibt es etwa diesen Artikel: http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel (und http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel/erkennen_und_behandeln). Das ist nur leider auch schon nicht mehr wirklich prägnant…

Gerade bei htmlspecialchars existieren dann noch Unterschiede zwischen noch gebräuchlichen PHP-Versionen, die man eigentlich auch erklären müsste, und allgemein ist für die richtige Anwendung auch das Thema Encoding/Zeichensätze von Bedeutung. Da ist man dann schnell hier: http://www.joelonsoftware.com/articles/Unicode.html. Bei Encoding gibt es dann dieses klassische Problem: http://php-de.github.io/jumpto/faq/#html-charset. Dann ist man mit der Erklärung schon auf HTTP-Ebene, also beim Protokoll.

Auch bei SQL-Injections kommt dann immer schnell ein „Softwaredesign“-Aspekt mit rein, weil mysqli (im Grunde) und PDO (eindeutig) etwa objektorientiert sind und es dann schon um Klassen geht und schnell auch Prepared Statements erwähnt werden sollten. Zudem muss auch bei DB-Adaptern das Encoding etwa der Verbindung und der Tabelle beachtet werden. Dann gibt es die Problematik, warum etwa addslashes als Escaping-Funktion nicht ausreicht oder warum es ungünstig ist, vor dem Eintragen in die DB bereits htmlspecialchars anzuwenden und dergleichen.

Beim EVA-Prinzip ist es dasselbe. Wenn man das erklären will, landet man früher oder später bei Front-Controllern, Routing und MVC (also bei Frameworks) und auch bei Template Engines wie Smarty, Twig, PHPTAL, XSLT oder Blade.

Es ist meines Erachtens sehr schwierig, simple Erklärungen zu formulieren, von denen man erwarten kann, dass sie wirklich verstanden werden, weil einerseits ein gewisses Lowlevel-Wissen (Zeichensätze, Protokolle, Formate, EDV-Grundlagen) notwendig ist und weil man andererseits dem Leser auch keinen Gefallen tut, Highlevel-Softwaredesign-Konzepte wie Frameworks unerwähnt zu lassen.

Dazu kommen dann noch Aspekte wie Interpretation von MVC, bei denen sich auch gestandene Entwickler alles andere als einig sind. :D
 
Zuletzt bearbeitet:
Zurück