Datetime umformatieren & Link umwandeln

meisti94

Erfahrenes Mitglied
Guten Tag.

Ich arbeite an einer eigenen "Pastebin"-Website und ich komme an einer Stelle nicht mehr weiter.

Wenn man einen Eintrag im Textfeld eingibt und diesen per Knopf oder Enter abschickt, landet dieser Eintrag in der Datenbank und die Seite wird erneut geladen.

Links sieht man dann jeweils die Zeit, wann der Eintrag gepostet wurde.

Dies wird 1:1 von "Datetime" in der MySql DB übernommen. Dieser soll aber umformatiert werden. Ich habe schon sehr viel im Internet gesucht und auch diverse Lösungen gefunden. Ich konnte es aber nur mit der momentan Zeit hinbringen und nicht die Zeit von Datetime umformatieren. Also statt "2012-08-03 11:43:32" soll "3.8.2012; 11:43:32" stehen.

Dies wäre mein erstes Problem.

2. Problem:

Ich will, dass wenn ich einen Link hineinschreibe, dieser dann umgewandelt wird.

Also ich nehme an er wird normal eingetragen, aber als Ausgabe soll er formatiert werden. (<a href="http://www.tutorials.de/php/php/php/.."> </a>) wie bei den meisten Foren zum Beispiel.

So kann ich einen Link "Zwischenspeichern" und diesen später wieder anklicken wenn ich ihn brauche.


Bitte die Datenbank nicht flooden, werde sie dann wenn sie fertig ist noch mit einem Passwort speichern etc.


Danke im Voraus :)
 
Zuletzt bearbeitet:
Hallo meisti,

1.) Mit dem DATETIME-Stringformat kann PHP nicht viel anfangen. PHP arbeitet immer mit UNIX Timestamps.
Entweder du wandelst das DATETIME-Format auf der MySQL-Seite um:
SQL:
SELECT UNIX_TIMESTAMP(column) FROM table
...oder mittels PHP:
PHP:
$timestamp = strtotime($value);

Danach kannst du mit [phpf]date[/phpf] den UNIX Timestamp formatieren:
PHP:
$str = date('d.m.Y; H:i:s', $timestamp);

2.) Das kannst du mittels regulären Ausdrücken erreichen. Hier findet sich z.B. einer: http://stackoverflow.com/questions/...-urls-to-links-but-leave-existing-links-alone
 
Vielen Dank schonmal.

Aber wie krieg ich es hin wenn ich beide Ausgaben aus der Datenbank hole?

Also ich hole sie mit:

PHP:
$abfrage = "SELECT text, postdate FROM pastebin order by Id desc";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   { echo "$row->postdate - $row->text <br>"; }

Also. Hier kommt links die Zeitspalte (postdate) und rechts der text.

Die Zeit an sich konnte ich schon umwandeln. Aber halt nicht mehr mit der selben formatierung etc.

Könntest du mir vielleicht nochmal helfen? :P
 
Zuletzt bearbeitet von einem Moderator:
Mit dem Datum/der Zeit geht das so:
PHP:
$abfrage = "SELECT text, UNIX_TIMESTAMP(postdate) AS `postdate` FROM pastebin order by Id desc";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
  $formattedDate = date('d.m.Y; H:i:s', $row->postdate);

  echo "$formattedDate - $row->text <br>"; }  
}

Ich würde über den Code erst [phpf]htmlspecialchars[/phpf] laufen lassen und danach die URLs in Links umwandeln:
PHP:
function convertURLs_callback($matches) {
  $url = htmlspecialchars($matches[0], ENT_QUOTES);
 
  return "<a href='$url' target='_blank'>$url</a>";
}
 
function convertURLs($s) {
  $pattern = '@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@';
 
  return preg_replace_callback($pattern, convertURLs_callback, $s);
}
 

// In der While-Schleife
$code = htmlspecialchars($row->text, ENT_QUOTES);
$code = convertURLs($code);
 
Also, das mit der Zeit hat Prima geklappt. Werde es mir dann später nochmals genauer ansehen damit ich auch was dabei lerne :)

Beim Link-Umwandeld geht es noch nicht wie gewünscht.

Dazu meine Frage: Wird der Link "normal" in die Datenbank geschrieben und nur als "Klick-Link in neuem Tab" ausgegeben?
 
Dazu meine Frage: Wird der Link "normal" in die Datenbank geschrieben und nur als "Klick-Link in neuem Tab" ausgegeben?
Der Code wird, so wie ihn der Benutzer eingegeben hat, direkt in die Datenbank gespeichert.

Erst bei der Ausgabe werden eventuelle HTML-Tags maskiert und URLs in Links (also mit <a>) umgewandelt.

Du musst es so einbauen:
PHP:
// Funktionen umbedingt irgendwo auslagern!
function convertURLs_callback($matches) {
  $url = htmlspecialchars($matches[0], ENT_QUOTES);
 
  return "<a href='$url' target='_blank'>$url</a>";
}
 
function convertURLs($s) {
  $pattern = '@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@';
 
  return preg_replace_callback($pattern, convertURLs_callback, $s);
}
 


$abfrage = "SELECT text, UNIX_TIMESTAMP(postdate) AS `postdate` FROM pastebin order by Id desc";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
  $formattedDate = date('d.m.Y; H:i:s', $row->postdate);

  $code = htmlspecialchars($row->text, ENT_QUOTES);
  $code = convertURLs($code);  

  echo "$formattedDate - $code <br>";  
}
 
PHP:
function convertURLs($s) {
  $pattern = '@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@';


Jetzt ist mir alles klar. Hab es an den falschen Ort platziert und wurde somit nicht zwischen dem Auslesen und dem Ausgeben formatiert.

Noch meine wirklich letzte frage: Bei dieser Zeile hier oben, wie kann ich da noch einfügen dass der link auch nur mit "www.***" angeklickt werden kann?

Danke. :)
 
Zuletzt bearbeitet:
Du meinst, dass im Link kein http oder https mehr stehen soll?

Ändere die Callback-Funktion:
PHP:
function convertURLs_callback($matches) {
  $url = htmlspecialchars($matches[0], ENT_QUOTES);
 
  $text = str_replace(array('http://', 'https://'), '', $url);

  return "<a href='$url' target='_blank'>$text</a>";
}
 
Nochmal kurz, sorry..

Ehm also "Google"-Links (komplex) funktionieren nie und mit Youtube-Links geht es auch nichts.. Hättest du mir vielleicht noch einen Tipp?
 
Zurück