Willkommen in der Webstatt Zum Webstatt Blog und Stories
Al3x0r Al3x0r am 14.04.06 00:05

Guten Tag,
ich bins nochmal :D

Also folgendes: Ich wandle ein eingegebenes Datum ( Form: TT.MM.JJJJ ) in einen Timestamp um.

Das sieht so aus.

//unix_timestamp aus Datum erstellen//
$datumpart = explode(".", $datum);
$tag = $datumpart[0];
$monat = $datumpart[1];
$jahr = $datumpart[2];
$unix_timestamp = mktime(0,0,0,$monat,$tag,$jahr); /


Ist da ein Fehler drin ?

Dann gehts weiter und ich trage den Timestamp so in die Mysql Datenbank ein ...
Das Problem ist, dass später beim auflisten (Order by datum) der Kram (, der eig. nach Datum geordnet ausgegeben werden soltle ) wild durcheinander ausgegeben wird, aber nicht so wie er ausgegeben werden müsste, eben nicht chronologisch.

Und in welche Form muss ich ein Datum in die Mysql Datenbank eingeben, wenn ich daraus mit der in mysql vorgesehen Funktion einen Timestamp erstellen will ?
TT.MM.JJ od. TT.MM.JJJJ od. MM.TT.JJ od. MM.TT.JJJJ ?

Danke schonmal

mfg Alex

edit:// um diesen Posts vorzubeugen , Ja ich habe vorher Google bemüht, und Ja ich habe nichts (was mir wirklich weiterhilft) gefunden.

Ok ich habe doch was bei Google gefunden und ich habe das Gefühl, dass ich hier mal gewaltig was durcheinander gebracht habe, was den Unix_Timestamp und die von Mysql bereitgestellten Zeit- und Datentypen angeht.

netcup.de Warum gibt es hier Werbung?
Michael Michael am 14.04.06 12:07

Morgen,

MySQL erwartet für das eigene Datumsformat eine Angabe der Form JJJJ-MM-TT SS:MM:SS - die Angabe der Uhrzeit ist dabei optional und die Trennzeichen sind irrelevant (also JJJJMMTT oder JJJJ/MM/TT klappen genauso).

Eine Frage am Rande: Warum benutzt du keine Spalte des Typs DATE. Dann klappt das Sortieren wunderbar. Das Rechnen ist einfacherer... Außerdem ist die Rückumwandlung quasi ohne Zeitaufwand mit UNIX_TIMESTAMP rückverwandelbar.

Zu deinem Sortierungsproblem: In welchem Format speicherst du den Timestamp? TIMESTAMP, INTEGER oder VARCHAR

Michael

Al3x0r Al3x0r am 14.04.06 13:28

Ich habe nun meine Eingaben einfach noch neu gemacht und mein eigegebenes Datum in der Form: TT.MM.JJJJ schon vorher mit mktime in einen unix-timestamp umgewandelt und das dann in meine Datumfeld (integer (wahrweise auch mal varchar, je nachdem was klappt ;-))) eingetragen.
so funzt es auch nun so weit...

mfg Alex

Michael Michael am 14.04.06 13:40

Halb-schön aber wenn es so klappt ;)

Noch ein kurzes Wort zu dem Feldtyp: Ob VARCHAR oder INTEGER ist in diesem Fall insbesondere für die Sortierung wichtig, da ein String und eine Zahl unterschiedlich sortiert werden.

Michael

Al3x0r Al3x0r am 14.04.06 13:46

zu früh gefreut.

Habe mir gerade mal die Daten ausgeben lassen und das ist absoluter Bullshit.
Ich habe nun, wie du vorgeschlagen hast, das Feld auf date umgestellt und die Daten wie angegeben in der Form: JJJJ-MM-TT eingegeben.

Wie formatiere ich diesen Datum nun, das es in dieser Form ausgegeben wird:

TT.MM.JJ ?

Muss ich es dazu vorher in einen Unix-Timestamp umwandeln ?

danke
mfg Alex

Sven Sven am 14.04.06 13:51

http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Am Besten alles durchlesen. Für dein Vorhaben strg+f -> DATE_FORMAT

Michael Michael am 14.04.06 13:54

Nein du musst es nicht umwandeln - das ist ja der große Vorteil ;)

Der Syntax für die Datumsformatierung ist so:
SELECT DATE_FORMAT(datumsfeld,'%e.%c.%y') bezeichner FROM tabelle;
datumsfeld ist dein Datumsfeld, tabelle deine Tabelle. Bezeichner ist ein beliebiger von dir gewählter Bezeichner, über den du später auf das formatierte Datum zugreifst.


Der Zugriff in PHP erfolgt dann über
$row = mysql_fetch_assoc($query);
print $row['bezeichner'];
analog mit mysql_fetch_object

Michael

Al3x0r Al3x0r am 14.04.06 14:14

Danke für den Link, hab mir das gerade mal durchgelesen und danke für das Beispiel.

Nun klappt alles wunderbar :D

Eine Frage noch:
Ich schreibe statt row['bezeichner']; immer row->bezeichner;
Sind das gleiche "Bezeichnungsarten" oder ist eine vorteil - oder nachteilhafter ?

mfg Alex

Michael Michael am 14.04.06 14:19

Nein das ist reine Geschmackssache.
Wenn du $row->name schreibst musst du natürlich mysql_fetch_object verwenden, ansonsten mysql_fetch_assoc. Aber keine der beiden Methoden ist besser als die andere.

Al3x0r Al3x0r am 14.04.06 14:22

ok danke, nun weiss ich bescheid.

mfg Alex

sili sili am 14.04.06 14:52

Quote
Original von Michael
Nein das ist reine Geschmackssache.
Wenn du $row->name schreibst musst du natürlich mysql_fetch_object verwenden, ansonsten mysql_fetch_assoc. Aber keine der beiden Methoden ist besser als die andere.


Hat Hoffie (glaub ich) nicht mal eine Diskussion darüber geführt? Er meint mit Objekten sei das ganze viel langsamer.
Seitdem verwende ich zumindest nur noch mysqli_fetch_assoc() :)

Michael Michael am 14.04.06 14:57

Hmm ich habe die Diskussion nicht mitbekommen aber es würde mich verwundern. Ist der gute Herr eigentlich auch hier in dem Forum? Wenn nicht könnte den ja mal jemand einladen.

Ich persönlich bevorzuge mysql_fetch_assoc, da die Objekt mit "echten" Objekten nicht viel mehr als die Syntax gemein haben. Man sollte allgemein ja gerade nicht direkt auf die Attribute zugreifen.

sili sili am 14.04.06 15:04

http://www.jex-treme.de/forum/thread.php?threadid=1023406234
Ich habs gefunden =)

Ob Hoffie hier aktiv ist, weiss ich leider nicht. Hat jemand noch Kontakt zu ihm? :)

Sven Sven am 14.04.06 15:12

Ich machs immer so :
<?php
$query = 'SELECT * FROM `bla`';
$sql = mysql_query ($query) or die ('Datenbankfehler in Zeile ' . __LINE__ . ' : <div class="error">' . mysql_error () . '</div>');

while($row = mysql_fetch_array($sql, MYSQL_ASSOC) {
}
?>


Allerdings kann ich nicht mehr sagen, wo der Vorteil daran ist :(
Habe irgendwo was mal gelesen und seit dem nutze ich das.

Al3x0r Al3x0r am 14.04.06 19:31

Habe wieder ein Problem was indirekt hiermit zu tun hat...

es geht um dieses Codesegment:

//mysql-datums-format aus Datum erstellen//
$datumpart = explode(".", $datum);
$date_format_datum = datumpart[2]."-".datumpart[1]."-".datumpart[0];


Der Fehler.

Parse error: parse error in .....galleryeintrag.php on line 16

Die beiden Zeilen oben sind Zeile 15 und Zeile 16.

Was habe ich falsch gemacht... Ich weiss einfach nicht woran es liegt.

mfg Alex

Sven Sven am 14.04.06 19:51

Zeig mal noch so +-10 Zeilen drumrum.

Al3x0r Al3x0r am 14.04.06 19:57

Zeile 1- 19:

<?php
session_start();
if (!isset($_SESSION['userlevel'])) {
$_SESSION['userlevel'] = 0;
}
if (!$_SESSION['userlevel'] >= 5) {
echo "Du hast kein Recht diesen Bereich zu sehen.";
}
else {

require "./php/database.php";
if ($action) {

//mysql-datums-format aus Datum erstellen//
$datumpart = explode(".", $datum);
$date_format_datum = datumpart[2]."-".datumpart[1]."-".datumpart[0];

$sql1="INSERT INTO $table_gallery_beschreibung (ueberschrift, beschreibung, datum, data) VALUES ('$ueberschrift', '$beitrag', '$date_format_datum', '$file')";
$senden=mysql_query($sql1) or die(mysql_error());


darauf folgt eine abgeschlossene Funktion an der es nicht liegen kann.


Sobald ich Zeile 15 u. 16 auskommentiere funktioniert die Seite.

Sven Sven am 14.04.06 20:19

Werd ich nicht drauß schlau :/
Poste mal den gesamten Code.

Al3x0r Al3x0r am 14.04.06 20:34

<?php
session_start();
if (!isset($_SESSION['userlevel'])) {
$_SESSION['userlevel'] = 0;
}
if (!$_SESSION['userlevel'] >= 5) {
echo "Du hast kein Recht diesen Bereich zu sehen.";
}
else {

require "./php/database.php";
if ($action) {

//mysql-datums-format aus Datum erstellen//
$datumpart = explode(".", $datum);
$date_format_datum = datumpart[2]."-".datumpart[1]."-".datumpart[0];

$sql1="INSERT INTO $table_gallery_beschreibung (ueberschrift, beschreibung, datum, data) VALUES ('$ueberschrift', '$beitrag', '$date_format_datum', '$file')";
$senden=mysql_query($sql1) or die(mysql_error());


function thumb($file, $save, $width, $height, $prop = TRUE) {
@unlink($save);
$infos = @getimagesize($file);
if($prop) {
// Proportionen erhalten
$iWidth = $infos[0];
$iHeight = $infos[1];
$iRatioW = $width / $iWidth;
$iRatioH = $height / $iHeight;
if ($iRatioW < $iRatioH)
{
$iNewW = $iWidth * $iRatioW;
$iNewH = $iHeight * $iRatioW;
} else {
$iNewW = $iWidth * $iRatioH;
$iNewH = $iHeight * $iRatioH;
} // end if
} else {
// Strecken und Stauchen auf Größe
$iNewW = $width;
$iNewH = $height;
}

if($infos[2] == 2) {
// Bild ist vom Typ jpg
$imgA = imagecreatefromjpeg($file);
$imgB = imagecreatetruecolor($iNewW,$iNewH);
imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW,
$iNewH, $infos[0], $infos[1]);
imagejpeg($imgB, $save);
} elseif($infos[2] == 3) {
// Bild ist vom Typ png
$imgA = imagecreatefrompng($file);
$imgB = imagecreatetruecolor($iNewW, $iNewH);
imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW,
$iNewH, $infos[0], $infos[1]);
imagepng($imgB, $save);
} else {
return FALSE;
}
}

///////////////////////////////////////////////////
echo '<table align="center"><tr><td>';

if (!file_exists($_POST['file']."/th"))
{
if (mkdir($_POST['file'].'/th', 0700))
echo '<font class="fontsmall">Verzeichnis /th erstellt!</font><br><br>';
}
else
{
echo '<font class="fontsmall">Verzeichnis /th existiert bereits.</font><br><br>';
}
////////////////////////////////////////////////
$file = $_POST['file'];


$hDir = opendir($file);

while($sFilename = readdir($hDir)) {
$sFilepath = $sDirpath.'/'.$sFilename;
if (($sFilename != ".") && ($sFilename != "..") && ($sFilename != "th"))
{
# jpeg, gif und png rausfiltern
$aPicinfo = @getimagesize($sFilepath);
if(in_array($aPicinfo[2], array(1,2,3), true))
$aPics[] = $sFilename;
$count++;


////////////////////////////////////////////
// Quelldatei
$from = $_POST['file'].'/'.$sFilename;
// Ziel 1+2
$to1 = $_POST['file'].'/th/'.$sFilename;
// Funktionsaufruf mit Einbehaltung der Proportionen
thumb($from, $to1, 150, 150, TRUE);
echo '<font class="fontsmall">Thumbnail von '.$sFilename.' erfolgreich erstellt.</font><br>';
}
}
echo '</td></tr></table>';
}

?>
<form name="eintrag" action="index.php?param=galleryeintrag&action=true" method="post">
<br>
<table align="center" class="tableinborder" cellpadding="4" cellspacing="1" style="width:80%;">
<tr>
<td class="table_b"><label class="fontnormal">Überschrift:</label></td>
<td colspan="3" class="table_b"><input style='width:390px;' type="text" name="ueberschrift" class="input"></td>
</tr>
<tr>
<td class="table_a"><label class="fontnormal">Datum:</label></td>
<td colspan="3" class="table_a"><input style='width:390px;' type="text" name="datum" class="input"></td>
</tr>
<tr>
<td class="table_b" valign="top"><label class="fontnormal">Beschreibung:</label></td>
<td class="table_b" colspan="3"><textarea name="beitrag" class="textarea" rows="8" cols="60"></textarea></td>
</tr>
<tr>
<td class="table_a">Pfad zu den Bildern.</td>
<td class="table_a"><input style='width:390px;' name="file" value="./gallery/pics/galleriename" type="text" class="input"></td>
</tr>
<tr>
<td class="table_b" colspan="3" align="center">
<input name="Send" type="submit" value="Abschicken" class="input">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="Reset" type="reset" value="L&ouml;schen" class="input">
</td>
</tr>
</table>
</form>

<?php
}
?>

sili sili am 14.04.06 22:54

Variablen beginnen mit einem Dollarzeichen ;-)
$date_format_datum = $datumpart[2] . "-" . $datumpart[1] . "-" . datumpart[0];

Al3x0r Al3x0r am 14.04.06 22:57

Quote
Original von sili
Variablen beginnen mit einem Dollarzeichen ;-)
$date_format_datum = $datumpart[2] . "-" . $datumpart[1] . "-" . datumpart[0];


Oh Gott wie blöd und ich sitze hier und wunder mich ... boah scheisse wie doof ... Ohh grr das kommt davon wenn man 10 Stunden vorm Rechner sitzt ...

danke
mfg Alex

Sven Sven am 14.04.06 23:43

Hrm, Asche auch über mein Haupt :/

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt