Lite kod du får justera:
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE datumField BETWEEN $datum1 AND $datum2
ORDER BY position ASC")
20 svar · 513 visningar · startad av dahlgren
Jag har skapat en sida som vissar nyheter. Nu vill jag att de bara ska visas mellan vissa datum. Datumen finns att tillgå genom $r['start'] och $r['slut']. Hur ska jag göra för att nyheten bara visas när det är ok med datumen?
<?PHP
$objConn = mysql_connect ('localhost', 'root', '');
mysql_select_db('test');
$strQuery = mysql_query("
SELECT * FROM nyhet
ORDER BY position ASC
") or exit(mysql_error());
while ($r = mysql_fetch_array($strQuery))
{
echo "<b>",$r['rubrik'],"</b><br/>", $r['text'] . "<br/><hr/>";
}
mysql_close($objConn);
?>
Lite kod du får justera:
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE datumField BETWEEN $datum1 AND $datum2
ORDER BY position ASC")
Förstår inte riktigt hur det ska fungera datumen ligger i 2 fält vilka jag antar ska stå istället för $datum1 och $datum2. Men vad ska jag ersätta datumField med?
dahlgren skrev:
Men vad ska jag ersätta datumField med?
Jag fattade som så att du hade en datumkolumn att jämföra med. Nu i efterhand ser jag att det inte var så självklart. Vad är det du vill jämföra med? Är det kanske dagens datum som ska ligga mellan dina andra två datum?
Precis det är dagens datum jag vill jämföra mot.
Du borde kunna skriva så här under förutsättning att dina datumvärden är utformade på följande vis: YYYY-MM-DD eller YYYYMMDD.
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE CURDATE() BETWEEN $datum1 AND $datum2
ORDER BY position ASC")
Det är rätt format på dumen så det borde funka men ger ändå följande felmeddelande.
Parse error: parse error, unexpected '"' in C:\Server root\int\index.php on line 7
Rad 7 innehåller:
") or exit(mysql_error());
Hur ser hela koden ut?
Vad skrivs ut om du skriver ut sql-strängen?
Visa kod, ser ut som du skrivit fel någonstans.
Parse error får man när man missat en ; eller dyl.
Hela koden
<?PHP
$objConn = mysql_connect ('localhost', 'root', '');
mysql_select_db('test');
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE CURDATE() BETWEEN $start AND $slut
ORDER BY position ASC")
") or exit(mysql_error());
while ($r = mysql_fetch_array($strQuery))
{
echo "<b>",$r['rubrik'],"</b><br/>", $r['text'] . "<br/><hr/>";
}
mysql_close($objConn);
?>
Är helt ny på php så jag lyckkas inte riktigt skriva ut sql-satsen. Hur gör man det?
Du hade en ") förmycket. Testa detta:
<?PHP
$objConn = mysql_connect ('localhost', 'root', '');
mysql_select_db('test');
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE CURDATE() BETWEEN " . $start . " AND " . $slut . "
ORDER BY position ASC") or exit(mysql_error());
while ($r = mysql_fetch_array($strQuery))
{
echo "<b>",$r['rubrik'],"</b><br/>", $r['text'] . "<br/><hr/>";
}
mysql_close($objConn);
?>
:)
<?PHP
$objConn = mysql_connect ('localhost', 'root', '');
mysql_select_db('test');
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE CURDATE() BETWEEN $start AND $slut
ORDER BY position ASC")
or exit(mysql_error());
while ($r = mysql_fetch_array($strQuery))
{
echo "<b>",$r['rubrik'],"</b><br/>", $r['text'] . "<br/><hr/>";
}
mysql_close($objConn);
?>
Nu får jag istället att variablerna start och slut är odefinerade trots att de finns i databasen.
Nu ser jag lite fler fel. Strängkonkatinering sker i PHP med punkt inte komma:
<?PHP
$objConn = mysql_connect ('localhost', 'root', '');
mysql_select_db('test');
$strQuery = mysql_query("SELECT * FROM nyhet
WHERE CURDATE() BETWEEN " . $start . " AND " . $slut . "
ORDER BY position ASC") or exit(mysql_error());
while ($r = mysql_fetch_array($strQuery))
{
echo "<b>" . $r['rubrik'] . "</b><br/>" . $r['text'] . "<br/><hr/>";
}
mysql_close($objConn);
?>
Fråga från en lekman: Bör man inte ha apostrofer runt datumvärden i sin SQL-fråga? :)
Det ger fortfarande samma felmeddelande.
Notice: Undefined variable: start in C:\Server root\int\index.php on line 5
Notice: Undefined variable: slut in C:\Server root\int\index.php on line 5
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 'AND ORDER BY position
Databasen innehåller förjande
id rubrik text position start slut
2 Min rubrik 1 Testar ltie 5 2004-12-27 2005-01-01
3 Min rubrik 3 2004-12-27 2005-01-01
4 Test $start =$\_POST\['start_ar'\] . $\_POST\['start_manad'\]... 2 2008-03-08 2006-05-06
5 Dagens Nu borde det mesta funka. 1 2004-12-26 2005-02-05
Aha, det är fältnamnen, inga variabler. I så fall, byt:
WHERE CURDATE() BETWEEN " . $start . " AND " . $slut . "
mot:
WHERE CURDATE() BETWEEN start AND slut
mvh
@nders skrev:
Fråga från en lekman: Bör man inte ha apostrofer runt datumvärden i sin SQL-fråga? :)
Så rätt, så rätt, miss av mig. Man ska aldrig göra många sysslor samtidigt. :)
Tack för all hjälp nu funkar det som jag vill.
Kan du vara snäll och markera tråden som löst.
Tryck på "Accepetera som slutgiltligt svar", som ligger i nedre högra hörnan av varje inlägg.