Avatar billede mulles.tk Nybegynder
05. oktober 2003 - 22:22 Der er 30 kommentarer og
1 løsning

vis "nyt indlæg" ved nyt svar

Det drejer sig om flg. forum:
www.zapp.dk/forum_/

Hvordan laver man en if sætning, der skriver nyt indlæg, hvis et svar er mindre end fx 3 dage gammelt?

Forummet har to tabeller:
forum_body (selve tråden)
forum_msg (indlæggene)

forum_msg har en kolonne der hedder spm, som svarer til forum_body id!

Kan nogen hjælpe?
Avatar billede bigo Nybegynder
05. oktober 2003 - 22:24 #1
du bliver nødt til at have en record der angiver svarets /indlægets dato

derfra kan du lave noget tidsberegning.
Avatar billede mulles.tk Nybegynder
05. oktober 2003 - 22:25 #2
Ved forum_msg har jeg også en kolonne med dato!
Avatar billede mulles.tk Nybegynder
05. oktober 2003 - 22:25 #3
Men kan ikke helt hitte ud af hvordan den skal se ud?
Avatar billede bigo Nybegynder
05. oktober 2003 - 22:31 #4
prøv lige og lav et tabledump af forum_msg
Avatar billede mulles.tk Nybegynder
05. oktober 2003 - 22:33 #5
CREATE TABLE zapp_forum_msg (
  id int(11) NOT NULL auto_increment,
  navn tinytext NOT NULL,
  email tinytext NOT NULL,
  dato tinytext,
  txt text NOT NULL,
  spm tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Avatar billede bigo Nybegynder
05. oktober 2003 - 22:46 #6
dato skal du nok sørge for at der kommer noget ala date("Y-m-d h:i:s");

og så kan du lave noget ala

$now = date("Y-m-d h:i:s");
og så en select hvor du vælger de poster der er ......
Avatar billede avminarm Juniormester
06. oktober 2003 - 14:34 #7
Jeg ville lave mit datofelt om til et "DATE" felt i databasen - så kan man direkte selecte via MySQL - if datoetellerandet er mindre end dato idag minus f.eks 3. Hvis du forstår.
Avatar billede bigo Nybegynder
06. oktober 2003 - 17:22 #8
god ide der..
Avatar billede mulles.tk Nybegynder
06. oktober 2003 - 20:51 #9
Sådan nu ser zapp_forum_msg sådan her ud:

CREATE TABLE zapp_forum_msg (
  id int(11) NOT NULL auto_increment,
  navn tinytext NOT NULL,
  email tinytext NOT NULL,
  dato datetime NOT NULL default '0000-00-00 00:00:00',
  txt text NOT NULL,
  spm tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Kan I hjælpe mig videre?
Avatar billede bigo Nybegynder
06. oktober 2003 - 22:15 #10
$today = date("Y-m-d");
$sql = "SELECT * FROM zapp_forum_msg
        WHERE
          DATE ('".$today."', INTERVAL -3 DAY)
      ";
Avatar billede mulles.tk Nybegynder
06. oktober 2003 - 22:29 #11
...og så skal vi have den til at skrive nyt indlæg ved den "body", som den passer til :D (sætter pointene til 100)
Avatar billede bigo Nybegynder
07. oktober 2003 - 10:06 #12
så skal forum_body vist også lige vises..

men det kunne være noget ala:

$today = date("Y-m-d h:i:s");
$sql = "INSERT INTO etellerandet (id, user, message) values ('', 'brian', 'Ting med triks') WHERE id = '$id'";
Avatar billede mulles.tk Nybegynder
07. oktober 2003 - 12:48 #13
hmm... hvorfor skal der indsættes noget?? Den skal jo bare skrive "nyt indlæg" ud fra den overskrift, som indeholder svar der er mindre end tre dage gamle!
Avatar billede bigo Nybegynder
07. oktober 2003 - 12:53 #14
så du vil have at der skal stå "nyt indlæg" hvis den er mindre end 3 dage gammel.. ok..

$res = mysql_query($sql);
$num_rows = mysql_num_rows($res);
if ($num_rows > 0) echo "nyt indlæg";
Avatar billede mulles.tk Nybegynder
07. oktober 2003 - 13:14 #15
Jeg kan ikke lige tjekke om det virker, da min ftp-adgang ikke lige virker :/

Men jeg skal bruge dette, ik'?:

$today = date("Y-m-d");
$sql = "SELECT * FROM zapp_forum_msg WHERE DATE ('".$today."', INTERVAL -3 DAY)";
$res = mysql_query($sql);
$num_rows = mysql_num_rows($res);
if ($num_rows > 0) echo "nyt indlæg";
Avatar billede mulles.tk Nybegynder
07. oktober 2003 - 13:34 #16
Sådan nu har jeg testet det, og der er et eller andet galt!

Kig her: www.zapp.dk/forum_/

Jeg har indsat flg.:
$today = date("Y-m-d");
$sql = "SELECT * FROM zapp_forum_msg WHERE DATE ('".$today."', INTERVAL -3 DAY)";
$res = mysql_query($sql);
$num_rows = mysql_num_rows($res);
if ($num_rows > 0) {
    $ny = "nyt indlæg";
} else {
    $ny = "";
}
Avatar billede bigo Nybegynder
07. oktober 2003 - 20:20 #17
prøv: $res = mysql_query($sql) or die (mysql_error());
evt.: echo $sql; lige efter $sql = ......
Avatar billede mulles.tk Nybegynder
07. oktober 2003 - 21:29 #18
ny fejl... :D

www.zapp.dk/forum_/
Avatar billede bigo Nybegynder
08. oktober 2003 - 07:14 #19
ups.. hvilken version af mysql kører du. prøv evt med en phpinfo();

mener at jeg faktisk læste noget om at DATE tingen kun virker i 4.1 ++
Avatar billede mulles.tk Nybegynder
08. oktober 2003 - 12:33 #20
Hmm... min php version er 4.3.3?

Du kan evt. selv se her:
www.wildness.dk/info.php
Avatar billede bigo Nybegynder
08. oktober 2003 - 17:09 #21
øv.. den viser jo kun client versionen (3.23.55) Min client er version (3.23.49) så det skulle jo ikke være det.

Jeg laver lige en test selv.. 2 sek.
Avatar billede bigo Nybegynder
08. oktober 2003 - 17:18 #22
SELECT * FROM zapp_forum_msg WHERE
DATE_SUB('".$today."', INTERVAL 3 DAY)
Avatar billede mulles.tk Nybegynder
08. oktober 2003 - 19:12 #23
Nu skriver den i hvert fald nyt indlæg... :D

www.zapp.dk/forum_/

Men desværre ved allesammen???
Avatar billede bigo Nybegynder
08. oktober 2003 - 22:54 #24
har du checket datoen i databasen. .hvordan ser den ud i forhold til din select.

check evt. http://www.mysql.com/doc/en/Date_and_time_functions.html for DATE_SUB.
Avatar billede mulles.tk Nybegynder
09. oktober 2003 - 11:54 #25
CREATE TABLE zapp_forum_msg (
  id int(11) NOT NULL auto_increment,
  navn tinytext NOT NULL,
  email tinytext NOT NULL,
  dato datetime NOT NULL default '0000-00-00 00:00:00',
  txt text NOT NULL,
  spm tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Datoen i datebasen ser sådan her ud:
0000-00-00 00:00:00

Derfor har jeg ændret koden en smule, så den ser sådan her ud:
$today = date("Y-m-d H-i:s");
$sql = "SELECT * FROM zapp_forum_msg WHERE DATE_SUB('$today', INTERVAL 3 DAY)";
$res = mysql_query($sql) or die (mysql_error());
$num_rows = mysql_num_rows($res);
if ($num_rows > 0) {
    $ny = "nyt indlæg";
} else {
    $ny = "";
}

Men den skriver det stadig ved allesamen??? Har jeg lavet noget forkert i if-sætningen, som gør at den ikke kan forstå den rigtigt?
Avatar billede bigo Nybegynder
09. oktober 2003 - 12:39 #26
$sql = "SELECT * FROM zapp_forum_msg WHERE DATE_SUB('$today', INTERVAL 3 DAY)";

skal det ikke være

$sql = "SELECT * FROM zapp_forum_msg WHERE DATE_SUB('$today', INTERVAL -3 DAY)";

tror selv jeg har skrevet forkert.. men nu er jeg ikke helt sikker..
testet:
det skal være:

$sql = "SELECT * FROM zapp_forum_msg WHERE dato > DATE_SUB('$today', INTERVAL 3 DAY)";
Avatar billede mulles.tk Nybegynder
09. oktober 2003 - 13:16 #27
Har rettet det til:
$sql = "SELECT * FROM zapp_forum_msg WHERE dato > DATE_SUB('$today', INTERVAL 3 DAY)";

Men den viser det stadig ved alle sammen :(
Avatar billede mulles.tk Nybegynder
09. oktober 2003 - 13:28 #28
Heh he... jeg fandt ud af hvorfor den skrev det ved alle sammen!

Denne leder jo i hele zapp_forum_msg, hvor datoen er mindre end tre dage gammel:
$sql = "SELECT * FROM zapp_forum_msg WHERE dato > DATE_SUB('$today', INTERVAL 3 DAY)";

Men den skal jo gøre det ud fra hvert enkelt spørgsmål, så jeg tilføjede lige noget:
$sql = "SELECT * FROM zapp_forum_msg WHERE dato > DATE_SUB('$today', INTERVAL 3 DAY) AND spm=$r[id]";

Så nu virker det i hvert fald. Jeg har testet! Grunden til at den så skriver det ved alle sammen nu, er at datoerne tilsyneladende tog skade, da jeg lavede dato feltet i min database automatisk, så ved nogen af indlægene står der at de er skrevet i år 2030 :/ Men hva' fanden :D
Avatar billede mulles.tk Nybegynder
09. oktober 2003 - 13:30 #29
Så hvis du lige opretter et svar...
Avatar billede bigo Nybegynder
09. oktober 2003 - 14:28 #30
Dejligt du fik det til at virke.. (endelig phew..)
Avatar billede mulles.tk Nybegynder
09. oktober 2003 - 14:41 #31
Ja ik'! Det synes jeg også :P
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