Datum eintragen

  • Themenstarter Themenstarter jaylibII
  • Beginndatum Beginndatum
J

jaylibII

Guten Morgen,

ich komme an dieser Stelle nicht weiter. Ich hab ein Formular das sieht so aus:

PHP:
if(!empty($_POST))
{
		$sql = "INSERT INTO PartyTip 
				(
					name,
					ueberschrift,
					text,
					telefon,
					fax,
					url,
					location,
					verbindung,
					anfang,
					ende,
					datum
				)
				VALUES
				(
					'" . $_SESSION['benutzername'] . "',
					'" . addslashes($_POST["ueberschrift"]) . "',
					'" . addslashes($_POST["text"]) . "',
					'" . addslashes($_POST["telefon"]) . "',
					'" . addslashes($_POST["fax"]) . "',
					'" . addslashes($_POST["url"]) . "',
					'" . addslashes($_POST["location"]) . "',
					'" . addslashes($_POST["verbindung"]) . "',
					'" . addslashes($_POST["anfang"]) . "',
					'" . addslashes($_POST["ende"]) . "',
					NOW()
				)
				";
		mysql_query($sql) OR die(mysql_error());

Jetzt muss ich aber laut ein paar anderen Kollegen das Datum so eintragen lassen, dass dieses Format raus kommt:

20050326000000

wie mussdas machen, dass er mir das so auch einträgt. Die Spalten in der Tabelle heißen auch anfang und ende und haben beide den Typ DATA stimmt das.

Dass ich dann die Daten wieder abrufen kann, habe ich das wie folgt geamcht:

PHP:
<?php
$sql = "SELECT ueberschrift, text
          FROM PartyTip
          WHERE anfang < NOW() AND ende > NOW()
          ORDER BY RAND() LIMIT 1";
$result = mysql_query($sql);
$_data = mysql_fetch_assoc($result);
?>

Ich hoffe mal, dass selbst an Ostern jemand da ist der mir da helfen kann.

Wünsch euch allen noch schöne Ostern.

Gruß jaylibII
 
Moin... klar is hier jemand :-)
jaylibII hat gesagt.:
Jetzt muss ich aber laut ein paar anderen Kollegen das Datum so eintragen lassen, dass dieses Format raus kommt:

20050326000000

wie mussdas machen, dass er mir das so auch einträgt. Die Spalten in der Tabelle heißen auch anfang und ende und haben beide den Typ DATA stimmt das.

Typ DATA is schmarrn, weil php dann nichts mehr mit dem Wert anfangen kann und immer den 01.01.1970 (Beginn der Unix Epoche) anzeigt.

Die Spalte sollte vom Datentyp integer sein (int(11)) eigetragen wird dann einfach die funktion

time()

auslesen und formatieren kannst Du Deinen eingetragenen Wert dann über die date funktion
PHP:
date("j. n. Y  H:i:s", $_data['anfang']); 
date("j. n. Y  H:i:s", $_data['ende']);

Dein eingetragener unixtimestamp (time()) ist vom Wert integer, somit kannst Du in Deinem Script damit auch Berechnungen durchführen.

Dann hast Du imho noch einen Fehler in Deinem Script
PHP:
if(!empty($_POST))
warum negierst Du ? Das würde ja bedeuten, wenn kein $_POST Array vorhanden ist, dann soll er (der Webserver) die Werte aus dem (nicht vorhandenen) Array nutzen und in die DB eintragen.
besser wäre:
PHP:
if(isset($_POST['wert']))
 
Zuletzt bearbeitet:
Hallo,

diesen Typ ( integer ) habe ich leider nicht bei PHPMYADMIN zu verfügung :-(

Das mit dem Auslesen ist ja gar nicht so wichtig. Ich will ja nur, dass dieses Skript uch gehen:

PHP:
<?php
$sql = "SELECT ueberschrift, text
          FROM PartyTip
          WHERE anfang < NOW() AND ende > NOW()
          ORDER BY RAND() LIMIT 1";
$result = mysql_query($sql);
$_data = mysql_fetch_assoc($result);
?>
 
jaylibII hat gesagt.:
Hallo,

diesen Typ ( integer ) habe ich leider nicht bei PHPMYADMIN zu verfügung :-(

Hast Du schon, da er mysql Standart ist. Scroll einfach bei den Datentypen ein Stück weiter hoch, da steht INT ;-)

NOW() ist eine reine sql Funktion und steht Dir in php nicht zur Verfügung.

Du solltest das bereits erwähnte time() nutzen.
 
Hallo,

ok mein Skript sieht nun so aus:

PHP:
<?php
$sql = "SELECT 
			ueberschrift, 
			text
				FROM
				 PartyTip
          WHERE anfang < '.time().' AND '.time().' < ende
		  ORDER BY RAND() LIMIT 1
		  ";
$result = mysql_query($sql);
$_data = mysql_fetch_assoc($result);
?>

aber nun kommt folgende Meldung:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /www/htdocs/v148718/impressum/impressum.php on line 178

in der besagten Zeile steht:

PHP:
$_data = mysql_fetch_assoc($result);

wenn ich dann noch die DB schaue, dann wird aber nur in der Spalte "ENDE" und "Anfang" nur 2005 gespeichert wie kommst das denn?
 
Zuletzt bearbeitet von einem Moderator:
Nun mal immer mit der Ruhe, manche Leute müssen auch noch ein bisschen arbeiten.

jaylibII hat gesagt.:
WHERE anfang < '.time().' AND '.time().' < ende

PHP:
WHERE anfang < '.time().' AND  ende > '.time().'

Was soll die ORDER BY Klausel bewirken? mit rand() generierst Du eine Zufallszahl.

Das in Deiner Tabelle der Wert 2005 steht, rührt daraus das der eingetragene Wert kein time() vom Wert integer ist, sondern der Datentyp DATE|SHORTDATE kontrolliere am besten nochmal den Aufbau Deiner Tabelle und stelle die Konsistenz so her wie Du sie brauchst.
 
Hallo,

OK meine Abfrage sieht nun so aus:

PHP:
<?php
$sql = "SELECT 
			ueberschrift, 
			text
				FROM
				 PartyTip
          WHERE anfang < '.time().' AND '.time().' < ende
		  ";
$result = mysql_query($sql);
$_data = mysql_fetch_assoc($result);
?>

meine Tabelle in der DB sieht dann so aus:

CREATE TABLE `PartyTip` (
`id` int(6) NOT NULL auto_increment,
`ueberschrift` varchar(200) NOT NULL default '',
`text` varchar(200) NOT NULL default '',
`telefon` varchar(200) NOT NULL default '',
`fax` varchar(200) NOT NULL default '',
`url` varchar(200) NOT NULL default '',
`location` varchar(200) NOT NULL default '',
`verbindung` varchar(200) NOT NULL default '',
`anfang` int(11) default NULL,
`ende` int(11) default NULL,
`name` varchar(30) NOT NULL default '',
`datum` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;

Aber wie kann ich nun dem Skript sagen, dass er mir das richtige Datum einträgt?

Das sieht so gerade aus:

PHP:
if(!empty($_POST))
{
        $sql = "INSERT INTO PartyTip
                (
                    name,
                    ueberschrift,
                    text,
                    telefon,
                    fax,
                    url,
                    location,
                    verbindung,
                    anfang,
                    ende,
                    datum
                )
                VALUES
                (
                    '" . $_SESSION['benutzername'] . "',
                    '" . addslashes($_POST["ueberschrift"]) . "',
                    '" . addslashes($_POST["text"]) . "',
                    '" . addslashes($_POST["telefon"]) . "',
                    '" . addslashes($_POST["fax"]) . "',
                    '" . addslashes($_POST["url"]) . "',
                    '" . addslashes($_POST["location"]) . "',
                    '" . addslashes($_POST["verbindung"]) . "',
                    '" . addslashes($_POST["anfang"]) . "',
                    '" . addslashes($_POST["ende"]) . "',
                    NOW()
                )
                ";
        mysql_query($sql) OR die(mysql_error());
 
Mach das Feld datum auf int mit 11 Zeichen

>> datum int(11) <<

Dann machst du beim insert nicht NOW(), sondern einfach time(). Dann wird der aktuelle Timestamp eingetragen und du kannst ihn auch dann erst mit anfang < time() vergleichen.

Ich sehe abwer glaube noch einen Syntaxfehler bei dir im Query, richtig heißt das so
PHP:
$sql = "SELECT ueberschrift, text 
              FROM PartyTip 
           WHERE anfang < '".time()."' AND '".time()."' < ende ";

PHP:
if(!empty($_POST))
warum negierst Du ? Das würde ja bedeuten, wenn kein $_POST Array vorhanden ist, dann soll er (der Webserver) die Werte aus dem (nicht vorhandenen) Array nutzen und in die DB eintragen.
Genau das soll er ja nicht machen. Mit !empty($xy) fragst du ab, ob die Variable NICHT(negiert) leer ist und ist das der Fall, so wird der if Zweig ausgeführt. Wenn es leer ist, wird in den else Zweig gesprungen(insofern einer da ist) oder nicht ausgeführt
 
Zuletzt bearbeitet:
Zurück