Avatar billede haolan Nybegynder
28. september 2005 - 21:54 Der er 28 kommentarer og
2 løsninger

dato med now() og slet efter given tid

Jeg forsøger at få noget datoværk til min blog til at fungere med datetime, men lige nu bruger jeg bare en almindelig varchar som vist herunder:

<?
include("php/config.php");

$dato = date("j/n Y") . " - kl. " . date("H:i:s");

$insert_post = "INSERT INTO `blog_comments` (`id`, `forfatter`, `email`, `site`, `tekst`, `dato`, `ref`) VALUES ('', '{$_POST['forfatter']}', '{$_POST['email']}', '{$_POST['site']}', '{$_POST['tekst']}', '{$dato}', '{$_POST['ref']}')";
mysql_query($insert_post) or die(mysql_error());

$message = "Kommentaren blev tilføjet til databasen.. Takker :)";
?>

<?
echo "$message";
?>

Jeg vil dog gerne have det til at køre med DATETIME, men det eneste jeg ved er at man skal bruge noget med: NOW()

hvordan gør man det?

Iøvrigt vil jeg gerne have det lavet så den automatisk sletter sig selv og sine underliggende kommentarer efter et en bestemt tid fx et halvt år.

de underliggende kommentarer har et ref nummer der har samme værdi som hovedindlæggets id-nummer.
Avatar billede jakobdo Ekspert
28. september 2005 - 21:59 #1
Du retter feltet i din tabel til: DATETIME, og retter din sql til:
$insert_post = "INSERT INTO `blog_comments` (`id`, `forfatter`, `email`, `site`, `tekst`, `dato`, `ref`) VALUES ('', '{$_POST['forfatter']}', '{$_POST['email']}', '{$_POST['site']}', '{$_POST['tekst']}', NOW(), '{$_POST['ref']}')";
Avatar billede haolan Nybegynder
29. september 2005 - 10:53 #2
Yep så virker det :) så er det bare det der med automatisk slet :)
Avatar billede haolan Nybegynder
29. september 2005 - 10:54 #3
I øvrigt hvordan fremkalder man datoen i formatet dd/mm Y - kl. tt:mm:ss ?? hvis det da er lovligt lige at stille et ekstra spørgsmål man har glemt :)
Avatar billede jakobdo Ekspert
29. september 2005 - 11:28 #4
Du kan få datoen fremkaldt du ønsker enten med:
DATO_FORMAT() (den her kan du formattere via mysql)
eller
UNIX_TIMESTAMP() (den kan du formattere i php)

Det med at slette, er alt lave et script som køres hver gang der tilføjes en comment
$query = mysql_query("DELETE comment WHERE tid < DATE_ADD(NOW() INTERVAL 6 month)")
Avatar billede haolan Nybegynder
29. september 2005 - 11:42 #5
ok.. det vil sige at i mit tilfælde kan jeg stille det op sådan:

$deltime = mysql_query("DELETE FROM `blog` WHERE dato < DATE_ADD(NOW() INTERVAL 6 month)")
mysql_query($deltime) or die(mysql_error());

Så vil den jo slette indlægget som jeg har skrevet.. Men kan den ikke også slette de tilhørende kommentarer samtidig?

Kommentarer er kaldt frem ved  ref = id  hvis du forstår..
Altså ref er en række i blog_comments der har angivet sin værdi ud fra indlæggets id nummer..
Avatar billede haolan Nybegynder
29. september 2005 - 11:47 #6
kan ikke få det der dato værk til at virke.. Kan man ikke definere den sådan:

$dato = DATO_FORMAT('dd/mm Y - kl. tt:mm:ss');
Avatar billede haolan Nybegynder
29. september 2005 - 11:53 #7
Jeg får følgende fejl:

Fatal error: Call to undefined function: dato_format() in c:\apache\htdocs\test\comments.php on line 36
Avatar billede Slettet bruger
29. september 2005 - 12:00 #8
date("dd/mm Y - H:i:s", $foo['dato'])
Avatar billede jakobdo Ekspert
29. september 2005 - 12:27 #9
gandso, jeg tror ikke det vil virke?
dato er jo i datetime format, og ikke unixtimestamp.

haolan: date_format og unix_timestamp er SQL funktioner:

SELECT DATE_FORMAT(dato, '%d/%m %Y - %T') AS newTime;

Eller

SELECT UNIX_TIMESTAMP(dato) AS unix;
og så kan du bruge unix i gandso's eksempel:

date("dd/mm Y - H:i:s", $foo['unix'])
Avatar billede haolan Nybegynder
29. september 2005 - 12:56 #10
ok.. men hvordan kalder man det frem? jeg synes at uanset hvordan jeg sætter det ind får jeg fejl..
Avatar billede jakobdo Ekspert
29. september 2005 - 12:59 #11
Vis mig den SQL du trækker data ud af databasen med, så kan jeg måske rette din eksisterende.
Avatar billede haolan Nybegynder
29. september 2005 - 13:03 #12
SELECT * FROM blog_comments WHERE ref='{$_GET['ref']}' order by id
Avatar billede jakobdo Ekspert
29. september 2005 - 13:30 #13
Prøv at test denne:
SELECT DATE_FORMAT(dato, '%d/%m %Y - %T') AS newDate,* FROM blog_comments WHERE ref='{$_GET['ref']}' order by id

Og i stedet for du så printer $row['dato'] så prøv at print: $row['newDate']
Avatar billede haolan Nybegynder
29. september 2005 - 13:35 #14
stadig fejl:

Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\test\comments.php on line 34
Avatar billede jakobdo Ekspert
29. september 2005 - 13:38 #15
Prøv at ret: ref='{$_GET['ref']}'
til:
ref='" . mysql_escape_string($_GET['ref']) . "'
Avatar billede haolan Nybegynder
29. september 2005 - 13:40 #16
stadig samme resultat
Avatar billede haolan Nybegynder
29. september 2005 - 13:46 #17
man kan definere den sådan istedet $dato = date($r['dato'], 'dd/mm Y - hh:mm:ss');
Avatar billede haolan Nybegynder
29. september 2005 - 13:47 #18
men den skriver ikke datoen op på den rigtige måde...
Avatar billede Slettet bruger
29. september 2005 - 13:51 #19
Hvis dit felt er af typen "int" og du skriver til databasen med "now()" eller "time()", så vil du kunne gøre det således:

$query = mysql_query("select dato from `blog_comments` where `ref`='" . $_GET['ref'] . "' order by `id` desc");
if (mysql_num_rows($query) >= "1")
{
    while($foo = mysql_fetch_object($query))
    {
        echo date("dd/mm Y - H:i:s", $r['dato']);
    }
} else {
    echo "ingen";
}
Avatar billede haolan Nybegynder
29. september 2005 - 13:58 #20
Fik hjælp af en anden php freak :) han rettede min tabel til tinytext og definerede datoen med $datenow = time(); ved tilføjelse, og kalder det frem med $dato = date('d/m Y - H:i:s', $r['dato']);

Så virker det :)
Avatar billede jakobdo Ekspert
29. september 2005 - 13:59 #21
Hvad type er dit dato felt?
Avatar billede haolan Nybegynder
29. september 2005 - 14:01 #22
før var mit dato felt DATETIME men nu er det tinytext
Avatar billede jakobdo Ekspert
29. september 2005 - 14:28 #23
Hvis du vil bruge NOW() skal du bruge DATETIME
Avatar billede Slettet bruger
29. september 2005 - 18:31 #24
Haolan: så forklar mig lige hvad forskellen på min løsning og det du skrev er.

Desuden er int beregnet til tal, så int er laaangt bedre end tinytext.
Avatar billede haolan Nybegynder
02. oktober 2005 - 14:15 #25
gandso: det kan vel være ligegyldigt om det er beregnet til tal :)
Men jeg havde ikke nået at læse dit indlæg inden jeg skev så ja din metode er nok meget det samme som det jeg bruger..
Dog er jakobdo's forslag nok det der tilpasser sig bedst til spørgsmålet, da jeg spurgte efter dato med now() og så svarede jakobdo på spørgsmålet med at slette på given tid..

Så mit forslag er at gandso får 50 point og jakobdo får 100 point.. Er det ikke meget rimeligt?
Avatar billede jakobdo Ekspert
03. oktober 2005 - 08:07 #26
Et svar ihf.
Avatar billede haolan Nybegynder
08. oktober 2005 - 19:55 #27
lægger du også et svar gandso?
Avatar billede Slettet bruger
09. oktober 2005 - 13:21 #28
Jojo, fint :)
Avatar billede jakobdo Ekspert
09. oktober 2005 - 14:19 #29
Takker for point!
Avatar billede haolan Nybegynder
09. oktober 2005 - 14:29 #30
takker for hjælpen :)
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