Avatar billede frustrator Nybegynder
31. juli 2007 - 22:22 Der er 21 kommentarer

Problemer med MySQL og CURDATE

Hey alle

Har prøvet et spørgsmål á la dette før, men uden respons. Nu bygger jeg lidt videre på det.

Skal have lavet en funktion, der på mit site viser "Dagens Sang" hver dag... og hver dag er det en ny, unik sang. Jeg har lavet en prøvetabel med navnet DATOTEST, og den har felterne DATO og TESTTEXT. DATO er et DATE-felt, hvor jeg selv indtaster datoer for de dage, hvor det aktuelle indhold skal vises. TESTTEXT er så bare en løs text for at teste det hele.

Jeg prøver at hive det ud i PHP med dette script:


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <?
mysql_connect("xxxxx","xxxxx","xxxxx");
mysql_select_db("xxxxx");
$query = mysql_query("SELECT testtext FROM datotest WHERE dato = 'CURDATE'");
while($r = mysql_fetch_array($query)) {
$testtext = $r["testtext"];

?>

<title>Untitled Document</title>
</head>
<body>

<? echo "$testtext";
echo ;
?></h1>
<div align="center">
  <?
}
?>
   
</body>
</html>


Jeg får absolut ingenting frem på min testside.... hwo come? Nogen der har nogle gode idéer og hurtige løsningsforslag?
Avatar billede erikjacobsen Ekspert
31. juli 2007 - 22:33 #1
$query = mysql_query("SELECT testtext FROM datotest WHERE dato = CURDATE()");
Avatar billede jakobdo Ekspert
01. august 2007 - 07:07 #2
Nu svarer jeg lidt uden for det du spørger om, men hvis vi f.eks. sagde at 1. april skal have spillet den samme sang hvert år, så kunne du bruge:

$query = mysql_query("SELECT testtext FROM datotest WHERE DAY(dato) = DAY(CURDATE()) AND MONTH(dato) = MONTH(CURDATE())");
Avatar billede frustrator Nybegynder
01. august 2007 - 09:15 #3
Erikjacobsen >> Heeeeyyyy, det virker... næste spørgsmål: Kan man så lave en liste-oversigt over alle de sange, der HAR været vist - dvs. fra og med dags dato og så langt tilbage som der nu er data til?

Jakobdo >> Det skal ikke være samme data år efter år, men husker lige dit input - kan være det bliver handy på et tidspunkt ;o)
Avatar billede erikjacobsen Ekspert
01. august 2007 - 09:49 #4
Du kan finde alt hvor:    dato < CURDATE()
Avatar billede frustrator Nybegynder
01. august 2007 - 10:35 #5
Fantastisk..... det virker.... kom med et svar, så du kan få nogle point :o)
Avatar billede erikjacobsen Ekspert
01. august 2007 - 10:42 #6
Jeg samler slet ikke på point, tak.
Avatar billede frustrator Nybegynder
01. august 2007 - 16:59 #7
Well, fair nok... din hjælp er alligevel stærkt påskønnet :o)
Avatar billede frustrator Nybegynder
11. august 2007 - 14:39 #8
Kom lige til at tænke på.... hvis jeg nu vil oprette en fremtidig oversigt, der inkluderer alt fra og med dags dato og frem, så kan jeg vel bare bruge > CURDATE, går jeg ud fra... men den tager jo ikke den aktuelle dato med. Jeg skal med andre ord bruge syntaksen for hvad der svarer til "større end eller lig med" eller noget i den stil.
Avatar billede erikjacobsen Ekspert
11. august 2007 - 15:00 #9
>=CURDATE()
Avatar billede frustrator Nybegynder
15. august 2007 - 20:08 #10
Thanx... men et andet problem hjemsøger mig i samme forbindelse...

Jeg vil lave et udtræk, der benytter samme funktion, men blot drejer sig om arrangementer. Det skal udelukkende liste de tre nyeste arrangementer, og jeg forsøger at løse det således:

<?
mysql_connect ("xxxxx", "xxxxx", "xxxxx") or die(mysql_error());
mysql_select_db ("xxxxx") or die(mysql_error());

$sqlquery = "SELECT Id, Dato, Titel, By DATE_FORMAT(Dato, '%d/%m/%Y') AS Dato FROM v2_arrangementer WHERE Dato >= CURDATE() ORDER BY Dato ASC LIMIT 0,3";
$result = mysql_query($sqlquery);

while($row = mysql_fetch_array($result)) {
extract($row);
echo "<a href='http://domæne/arrangement.php?Id=$row[Id]'>$Titel<br>$Dato, $By</a>";
}

?>

Dette giver mig dog en fejlmeddelelse:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /domæne/arrangement_3latest.php on line 8

For god ordens skyld: Linje 8 er denne:

while($row = mysql_fetch_array($result)) {

Hvad er der lige gået galt her.... ?
Avatar billede erikjacobsen Ekspert
15. august 2007 - 20:27 #11
Du har fejl i SQL-en, og får det ikke at vide. Du kan

  $result = mysql_query($sqlquery) or die(mysql_error());

Og så vil du se noget med et komma, noget med at "by" er et reserveret ord, og måske mere.  Prøv dine sql-sætninger af i et sql-værktøj først, fx phpmyadmin.
Avatar billede frustrator Nybegynder
16. august 2007 - 20:23 #12
Okay, det viser sig at være et problem omkring dato-syntaksen....

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'By DATE_FORMAT(Dato, '%d/%m/%Y') AS Dato FROM v2_arrangementer
Avatar billede erikjacobsen Ekspert
16. august 2007 - 20:39 #13
Hvorfor står der "By" ?
Avatar billede frustrator Nybegynder
16. august 2007 - 20:55 #14
Never mind, fandt løsningen.... der manglede et komma mellem By og DATE_FORMAT ;o)

Men næste problem: Jeg kan nu agtens hive dataene ud, men de bliver sorteret forkert. Jeg sorterer således:


"SELECT Bla-bla-bla, DATE_FORMAT(Dato, '%d/%m/%Y') AS Dato FROM v2_arrangementer WHERE Dato >= CURDATE() ORDER BY Dato DESC LIMIT 0,4"

Problemet er, at de ikke kommer ud i den rette dato-rækkefølge. Der er fire arrangementer, og de listes efter følgende sortering:


32/08/2007
21/09/2007
14/06/2008
01/09/2007

Det er ikke just den korrekte rækkefølge for arrangementer listet fra dags dato og fremefter.... how come?

erikjakobsen >> du må sgu da snart ryge på min msn ;o)
Avatar billede frustrator Nybegynder
16. august 2007 - 20:56 #15
Ups, der står naturligvis 23/08/2007..... my bad :o)
Avatar billede erikjacobsen Ekspert
16. august 2007 - 21:12 #16
Jo, 23, så 21, så 14, så 01 - aftagende. Det er jo hvad den sorterer efter, og det både skal og gør den. Skal du sortere på "normal" vis, skal du jo nok lade være med at formattere datoen der skal sorteres.
Avatar billede erikjacobsen Ekspert
16. august 2007 - 21:13 #17
(og ja, jeg driller dig - men det er sjovere hvis du selv finder ud af det. Du skal nok få løsningen, hvis begynder at få grå hår af at tænke over det)
Avatar billede frustrator Nybegynder
16. august 2007 - 21:18 #18
Aha, ja... og det er jo logisk nok... men kan det virkelig passe, at man ikke kan sortere efter dato og samtidig beholde formateringen, så det ser nogenlunde normalt ud på siden?

Kan fornemme på dit kryptiske svar at der skal en anden slags formattering til, altså...
Avatar billede erikjacobsen Ekspert
16. august 2007 - 21:27 #19
Du har sikkert set problemet - løsningen er simpel - find på et nyt navn til feltet efter formattering.
Avatar billede frustrator Nybegynder
16. august 2007 - 21:52 #20
Ak, hvor simpelt... yes indeed. Kender du det dér med at man stirrer sig blind på en ting, og bare ikke kan komme videre? Ligesom med kommaet herover...

Bedre bliver det ikke af, at man i bund og grund ikke har en dyt forstand på hvad det er man sidder og laver ;o)
Avatar billede erikjacobsen Ekspert
16. august 2007 - 21:54 #21
Ja, jeg kan heller ikke komme videre - jeg bliver ved med at hjælpe (og drille) folk på eksperten.dk

Hvad med om du fik spørgsmålet afsluttet - som sagt: ingen bananer til mig.
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