Avatar billede TheYaXxE Juniormester
17. september 2012 - 11:47 Der er 14 kommentarer og
1 løsning

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 :)
Avatar billede KHHP Juniormester
17. september 2012 - 11:51 #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.
Avatar billede mireigi Novice
17. september 2012 - 12:20 #2
Hvorfor ikke bare angive default værdi for date til dagsdato og undlade at udfylde det?
Avatar billede konnerup Nybegynder
17. september 2012 - 13:29 #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);
Avatar billede olebole Juniormester
17. september 2012 - 13:48 #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>
Avatar billede olebole Juniormester
17. september 2012 - 13:56 #5
PS: Formatet for et felt med typen date er: yyyy-mm-dd - ikke med / som delimiter.

Dags dato findes med MySQL-funktionen CURDATE  =)
Avatar billede TheYaXxE Juniormester
17. september 2012 - 15:11 #6
#2
Hvordan er det nu man gør det?

Længe siden at jeg har siddet med PHP og MySQL :)
Avatar billede olebole Juniormester
17. september 2012 - 15:21 #7
#6: Som sagt med CURDATE() som værdi, når du indsætter i feltet  =)
Avatar billede TheYaXxE Juniormester
17. september 2012 - 15: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?
Avatar billede TheYaXxE Juniormester
17. september 2012 - 15:37 #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);
Avatar billede TheYaXxE Juniormester
17. september 2012 - 16:09 #10
Kan se i databasen at den gemmer som 0000-00-00

Men jeg kan ikke få den til at skrive 17-09-2012
Avatar billede olebole Juniormester
17. september 2012 - 18:42 #11
Jo, hvis du gør som foreslået: Brug DATE som datatype på feltet. Og igen som foreslået: Brug CURDATE() - ikke NOW()
Avatar billede KimK1703 Nybegynder
09. oktober 2012 - 15:55 #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 :)
Avatar billede olebole Juniormester
09. oktober 2012 - 16:09 #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
Avatar billede TheYaXxE Juniormester
12. oktober 2012 - 01:49 #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"])
Avatar billede TheYaXxE Juniormester
12. oktober 2012 - 01:49 #15
...og tak til alle dem der brugte tid på at hjælpe :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester