Dag if else
In mijn text gedeelte heb ik een [dag] staan, hier komt de aantal dagen te staan. Maar nu wilde ik met een if het volgende, als de dag nog niet geweest is moet hij de text laten zien uit de tabel en als de dag verstreken is de else
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$query = mysql_query("SELECT text, dag, maand, jaar FROM personal WHERE zichtbaar = 1 ORDER BY ID ASC LIMIT 3");
for ( ;$r = mysql_fetch_assoc($query); )
{
$day = $r['dag']; // dag van de countdown
$month = $r['maand']; // maand van de countdown
$year = $r['jaar']; // jaar van de countdown
$r[text] = str_replace("[dag]", (int)((mktime (0,0,0,$month,$day,$year) - time(void))/86400), $r[text]);
if (??????)
{
echo "<img src=\"../images/link.gif\" alt='' title=''> <span class='normal'>".nl2br($r['text'])."</span><br><br>";
}
else
{
echo "There's no gig right now";
}
?>
$query = mysql_query("SELECT text, dag, maand, jaar FROM personal WHERE zichtbaar = 1 ORDER BY ID ASC LIMIT 3");
for ( ;$r = mysql_fetch_assoc($query); )
{
$day = $r['dag']; // dag van de countdown
$month = $r['maand']; // maand van de countdown
$year = $r['jaar']; // jaar van de countdown
$r[text] = str_replace("[dag]", (int)((mktime (0,0,0,$month,$day,$year) - time(void))/86400), $r[text]);
if (??????)
{
echo "<img src=\"../images/link.gif\" alt='' title=''> <span class='normal'>".nl2br($r['text'])."</span><br><br>";
}
else
{
echo "There's no gig right now";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - wes -
@wes: Huh??
Wes bedoelt dat wij een 'Frank' op dit forum hebben die je direct zal wijzen op je datamodel. Een datum sla je namelijk niet op in drie losse tabellen maar in één tabel met als type DATE of DATETIME.
Dat doet dan ook niemand...
Daarnaast moet je natuurlijk zelf weten hoe je datums opslaat in sql, maar aan te raden is natuurlijk DATE voor dit geval: YYYY-MM-DD
verder kun je beter een while gebruiken, aangezien je het eerste en laatste deel van de for toch niet gebruikt
Hebben jullie gelijk in
Had ik geprobeerd alleen kreeg ik foutmeldingen dat het niet doe was
Gewijzigd op 01/01/1970 01:00:00 door Richard
En dan trek je daar de datum van de countdown uit, en dan vervolgends:
if(date(vandaag) == date(tabel))
{
link
}
else
{
het is nog niet de goede dag
}
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
veld,
veld,
veld,
CASE datum
WHEN > NOW()
THEN 1
ELSE 0
END CASE AS later
FROM tabel;
veld,
veld,
veld,
CASE datum
WHEN > NOW()
THEN 1
ELSE 0
END CASE AS later
FROM tabel;
Dan kan je makkelijk controleren:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\Website\hypermusic\personal.php on line 66
Maar ik zie niet de fout.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = mysql_query("SELECT CASE date WHEN > NOW() THEN 1 ELSE 0 END CASE AS later, text FROM personal WHERE zichtbaar = 1 ORDER BY ID ASC LIMIT 3");
for ( ; $row = mysql_fetch_assoc($sql);)
{
if($row['later']) {
echo "xxxxxxx";
} else {
echo $row['text'];
}
}
?>
$sql = mysql_query("SELECT CASE date WHEN > NOW() THEN 1 ELSE 0 END CASE AS later, text FROM personal WHERE zichtbaar = 1 ORDER BY ID ASC LIMIT 3");
for ( ; $row = mysql_fetch_assoc($sql);)
{
if($row['later']) {
echo "xxxxxxx";
} else {
echo $row['text'];
}
}
?>
WHEN > NOW()
WHEN wat is groter dan NOW()? Daar mist een gegeven.
Foutafhandeling had natuurlijk niet mogen ontbreken, dat is de basis van je systeem. Alles wat fout kan gaan, zál ook fout gaan. Die zekerheid heb je!
IK mis dus wat tusteen de WHEN en de > teken?, Moet daar nog een keer date??
Dan wil ik ook eens weten wat er fout aan is, ook met wat testen kreeg ik hem niet goed..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
CASE
WHEN date > NOW() THEN 1
ELSE 0
END CASE AS later,
text
FROM
personal
WHERE
zichtbaar = 1
ORDER BY
id ASC
LIMIT 3
CASE
WHEN date > NOW() THEN 1
ELSE 0
END CASE AS later,
text
FROM
personal
WHERE
zichtbaar = 1
ORDER BY
id ASC
LIMIT 3
Over de END zijn de meningen verdeeld. WillemJan heeft hier een END CASE gebruikt, wanneer ik dat gebruik, loopt de boel altijd in de soep. Ik gebruik dus altijd END en niet meer dan dat. Test dus even wat er bij jou werkt, één van beide zal ongetwijfeld werken.
En let even op de notatie van de query, dus over meerdere regels en keurig inspringen, dat maakt de boel 100x beter leesbaar, beter te onderhouden en te debuggen. Alles op 1 regel zetten, is vragen om problemen.
Edit: Was nog niet helemaal wakker, de date hoort ná de WHEN te staan... WJ bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Maar ik had toch precies hetzelfde :S Behalve dan dat jij date een regel later hebt gezet. Ook met datum werkte het niet (reserved woord vergeten :))
<shame_on_me>Zie de wijziging van 17.11.2006 11:36 ...</shame_on_me>
Code (php)
1
2
3
4
5
2
3
4
5
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Wat bedoelen ze hier dan met case_value?
Had het gedeelte eronder gemist, heb namelijk wel dit geprobeerd:
Voortaan beter lezen WIllem-Jan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = mysql_query("SELECT CASE WHEN date > NOW() THEN 1 ELSE 0 END CASE AS later, text FROM personal WHERE zichtbaar = 1 ORDER BY ID ASC LIMIT 1");
for ( ; $r = mysql_fetch_assoc($sql) or mysql_error;)
{
if($row['later']) {
echo "boe";
} else {
echo $r['text'];
}
}
?>
$sql = mysql_query("SELECT CASE WHEN date > NOW() THEN 1 ELSE 0 END CASE AS later, text FROM personal WHERE zichtbaar = 1 ORDER BY ID ASC LIMIT 1");
for ( ; $r = mysql_fetch_assoc($sql) or mysql_error;)
{
if($row['later']) {
echo "boe";
} else {
echo $r['text'];
}
}
?>
foutmelding:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\Website\hypermusic\personal.php on line 66
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$query = "
SELECT
CASE
WHEN date > NOW() THEN text
ELSE 'boe'
END CASE AS output
FROM
personal
WHERE
zichtbaar = 1
ORDER BY
id ASC
LIMIT 1"; // Dit is leesbaar! De query is overigens anders omdat nu de query bepaalt wat de output zal zijn. 'boe' staat dus in de query, niet in een if-je in jouw php-code.
$result = mysql_query($query); // $result, het is tenslotte een result
if($result){ // hoera! de query is gelukt
while($row = mysql_fetch_assoc($sql)){ // $row is wat anders dan $r
echo $row['output'];
}
}
else {
echo 'mislukt: '.mysql_error();
}
?>
$query = "
SELECT
CASE
WHEN date > NOW() THEN text
ELSE 'boe'
END CASE AS output
FROM
personal
WHERE
zichtbaar = 1
ORDER BY
id ASC
LIMIT 1"; // Dit is leesbaar! De query is overigens anders omdat nu de query bepaalt wat de output zal zijn. 'boe' staat dus in de query, niet in een if-je in jouw php-code.
$result = mysql_query($query); // $result, het is tenslotte een result
if($result){ // hoera! de query is gelukt
while($row = mysql_fetch_assoc($sql)){ // $row is wat anders dan $r
echo $row['output'];
}
}
else {
echo 'mislukt: '.mysql_error();
}
?>
(niet getest!)
if($result && mysql_num_rows($result) >= 1){ // hoera! de query is gelukt
while($row = mysql_fetch_assoc($sql)){ // $row is wat anders dan $r
echo $row['output'];
}
}