Yaxxe
(7.560 point. Point ude: 30)
Gem data til database med dato med ét script
Hej alle.
Jeg har ligget med et problem her de foreløbende dage som jeg ikke har kunnet få til at fungere ordenligt.
Hvordan gemmer man data til en database hvori datoen for oprettelsen af dataen også bliver gemt?
Jeg er nemlig igang med at lave en side, hvor man skal kunne indtaste informationer i 2 tekstfelter (titel, besked), hvor man derefter trykker på submit knappen. (Ligesom når man opretter en post på et forum fx.)
Fik det til at virke førhen (dog på nær dato funktion), men her skulle den gå ind på et eksternt php dokument for at gemme i databasen, da formen var således:
<form action="insert.php" method="post">
Mit spørgsmål er så hvordan man laver ét script, som tillader en at gemme informationer til sin database og også tilføjer datoen og tidslettet for oprettelsen af disse informationer?
Min tabel i MySQL ser således ud:
-------------------------------------------
Navn: Datatype: Ekstra:
id int Auto_Increment
header text
message mediemtext
date int
-------------------------------------------
Håber nogle kunne tænke sig at hjælpe mig :)
Skrevet man. d. 17. september 2012 kl. 11:51:52| #1
For det første skal dit date-felt være datatype=DATE og ikke INT.
Dernæst skal du blot lave en variabel der ser således ud:
$dato = date(Y/m/d);
Den henter dags dato og gemmer i en variabel. Så skal du jo bare sørge for at den gemmer værdien af $dato i feltet date, når du udfører din query.
Skrevet man. d. 17. september 2012 kl. 12:20:45| #2
Hvorfor ikke bare angive default værdi for date til dagsdato og undlade at udfylde det?
Skrevet man. d. 17. september 2012 kl. 13:29:38| #3
Jeg har selv lavet en gæstebog, hvor jeg har brugt dato. Jeg har som KHHP siger, skrevet det ind som en variabel.
Jeg har så bare sat min dato i MySQL til at være TEXT.
//Husk databaseforbindelse
$header = $_POST["header"];
$message = $_POST["message"];
$dato = date(Y/m/d);
$query = "INSERT INTO tabelnavn (header, message, date) VALUES ('$header', '$message', '$dato');";
mysql_query($query);
Skrevet man. d. 17. september 2012 kl. 13:48:09| #4
<ole>
#1 og #3 er en skidt løsning. Brug løsning #2 i stedet. Så bruger du databasen, som den er tænkt =)
Hvad enten man vælger den ene eller anden løsning, er en endnu vigtigere ting at bruge MySQLI i stedet for det forlængst forældede MySQL-API
/mvh
</bole>
Skrevet man. d. 17. september 2012 kl. 13:56:42| #5
PS: Formatet for et felt med typen date er: yyyy-mm-dd - ikke med / som delimiter.
Dags dato findes med MySQL-funktionen CURDATE =)
Skrevet man. d. 17. september 2012 kl. 15:11:40| #6
#2
Hvordan er det nu man gør det?
Længe siden at jeg har siddet med PHP og MySQL :)
Skrevet man. d. 17. september 2012 kl. 15:21:28| #7
#6: Som sagt med CURDATE() som værdi, når du indsætter i feltet =)
Skrevet man. d. 17. september 2012 kl. 15:27:27| #8
$header = $_POST["header"];
$message = $_POST["message"];
$dato = CURDATE();
$query = "INSERT INTO tabelnavn (header, message, date) VALUES ('$header', '$message', '$dato');";
mysql_query($query);
Sådan ikke?
Skrevet man. d. 17. september 2012 kl. 15:37:02| #9
Hidtil har mit script set sådan ud:
$sql="INSERT INTO news (header, message, date)
VALUES
('".$_POST[header]."','".$_POST[message]."',NOW())";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "<script type='text/javascript'>
alert('Nyhed Tilføjet');
</script>";
mysql_close($con);
Skrevet man. d. 17. september 2012 kl. 16:09:17| #10
Kan se i databasen at den gemmer som 0000-00-00
Men jeg kan ikke få den til at skrive 17-09-2012
Skrevet man. d. 17. september 2012 kl. 18:42:26| #11
Jo, hvis du gør som foreslået: Brug DATE som datatype på feltet. Og igen som foreslået: Brug CURDATE() - ikke NOW()
Skrevet tir. d. 09. oktober 2012 kl. 15:55:05| #12
kan af jer forklare hvorfor det er en dårlig idé at gemme time() i databasen?
Jeg har aldrig selv brugt mysql's default dato felt, men med time() kan jeg om formatere, bruge sekunder osv. som det passer mig.
Kan man også det med løsning #2 ? Spørger af ren nysgerrighed :)
Skrevet tir. d. 09. oktober 2012 kl. 16:09:39| #13
Der er vist ingen i denne tråd, der har påstået, at time() er en decideret dårlig idé =)
Det sagt, så er det som oftetst en fordel at bruge MySQL's egne funktioner, når det kan lade sig gøre. Når du bruger et felt med en eller anden dato/tid type, kan MySQL udregne en masse tidsrelaterede opgaver. Det kan den ikke, når du bruger et INT-felt
Skrevet fre. d. 12. oktober 2012 kl. 01:49:19| #14
Er klaret.
Delen med hvor jeg kun ville have ét script, løste jeg ved at efterlade action med action="" og i php delen tilføjede jeg et if(isset($_POST['submit']))
Delen med tid bruge jeg time() som olebole også snakkede om, hvor den så bliver gemt i databasen som varchar.
For at printe tiden ud tilføjede jeg denne kode i php-delen før jeg henter daten fra databasen:
date_default_timezone_set('Europe/Copenhagen');
dette laver tiden om til dansk tid.
For at vise tiden i DD-MM-ÅÅÅÅ, T:M skrev jeg simpelt bare denne kode:
date("d-m-Y, H:i",$result["date"])
Skrevet fre. d. 12. oktober 2012 kl. 01:49:51| #15
...og tak til alle dem der brugte tid på at hjælpe :)