mysql_num_rows() expects parameter 1 to be resource
ik ben druk in de weer met het maken van een afsprakenkalender zoals deze hier:
http://www.huisartsenpraktijkmontaigne-vromman.be/nl/stap-2?personid=3
Ik heb voorlopig 2 tabellen gemaakt
tblHourList[ID(tinyint), StartTime(varchar), EndTime(varchar)]
tblClosed[ID(tinyint), PeriodStart(date), PeriodEnd(date), Weekday(tinyint), StartTime(tinyint), EndTime(tinyint)]
Ik bouw dus rijen op waarvan de eerste kolom de StartTijd weergeeft vanuit tblHourList en vul dan de volgende 7 kolommen op met een controle in de tabel tblClosed.
Als de weekdag en de start- en eindtijd erin voorkomen dan moet de class van de cell op 'unavailable' komen.
(StartPeriod en EndPeriod heb ik er voorlopig nog uitgelaten)
Toch krijg ik de volgende foutmelding: Warning: mysql_num_rows() expects parameter 1 to be resource
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
//huidige dag
$current_date = date("d-M-Y");
//start, einde en week ophalen
$week_start_end = week_start_end($current_date);
$startday = date("d-M-Y", $week_start_end['start']);
$endday = date("d-M-Y", $week_start_end['end']);
$weeknumber = $week_start_end['number'];
$query_hours = "SELECT * FROM tblHourList";
$result_hours = mysql_query($query_hours);
while ($row = mysql_fetch_array($result_hours))
{
echo "<tr>";
echo "<td class=\"hour\">";
echo $row['StartTime'];
echo "</td>";
$moment = strtotime($startday);
while ($moment <= strtotime($endday))
{
//Kijken of de praktijk op dat moment gesloten is
$query_closed = "SELECT * FROM tblClosed
INNER JOIN tblHourList ON tblHourList.ID = tblClosed.StartTime
INNER JOIN tblHourList ON tblHourList.ID = tblClosed.EndTime
WHERE tblClosed.Weekday = ".strftime(date("w", $moment))."
AND tblHourList.StartTime = '".$row['StartTime']."'
AND tblHourList.EndTime = '".$row['EndTime']."'";
$result_closed = mysql_query($query_closed);
if (mysql_num_rows($result_closed) > 0)
{
$class = "class=\"unavailable\"";
}
else
{
$class = "class=\"normal\"";
}
echo "<td onselectstart=\"return false;\" ".$class."> </td>";
$moment = strtotime('+1 day', $moment);
}
echo "</tr>";
}
?>
//huidige dag
$current_date = date("d-M-Y");
//start, einde en week ophalen
$week_start_end = week_start_end($current_date);
$startday = date("d-M-Y", $week_start_end['start']);
$endday = date("d-M-Y", $week_start_end['end']);
$weeknumber = $week_start_end['number'];
$query_hours = "SELECT * FROM tblHourList";
$result_hours = mysql_query($query_hours);
while ($row = mysql_fetch_array($result_hours))
{
echo "<tr>";
echo "<td class=\"hour\">";
echo $row['StartTime'];
echo "</td>";
$moment = strtotime($startday);
while ($moment <= strtotime($endday))
{
//Kijken of de praktijk op dat moment gesloten is
$query_closed = "SELECT * FROM tblClosed
INNER JOIN tblHourList ON tblHourList.ID = tblClosed.StartTime
INNER JOIN tblHourList ON tblHourList.ID = tblClosed.EndTime
WHERE tblClosed.Weekday = ".strftime(date("w", $moment))."
AND tblHourList.StartTime = '".$row['StartTime']."'
AND tblHourList.EndTime = '".$row['EndTime']."'";
$result_closed = mysql_query($query_closed);
if (mysql_num_rows($result_closed) > 0)
{
$class = "class=\"unavailable\"";
}
else
{
$class = "class=\"normal\"";
}
echo "<td onselectstart=\"return false;\" ".$class."> </td>";
$moment = strtotime('+1 day', $moment);
}
echo "</tr>";
}
?>
Waar faalt mijn query?
Gewijzigd op 17/11/2012 10:50:15 door Bart C
Tip: Gebruik single quotes voor je php en double quotes voor je html
Gewijzigd op 17/11/2012 11:48:36 door Nick Dijkstra
Bart C op 17/11/2012 10:32:30:
StartTime(varchar), EndTime(varchar)]
Weekday(tinyint), StartTime(tinyint), EndTime(tinyint)]
Weekday(tinyint), StartTime(tinyint), EndTime(tinyint)]
StartTime en Endtime: waarom twee verschillende types? En waarom tijd niet als zodanig opslaan?
Weekday; dat kun je toch ook in een query ophalen/bepalen?
Nick Dijkstra op 17/11/2012 11:46:17:
Dag Nick, zal ik idd doen en bedankt voor de tijd. Moet ik dan geen " meer escapen?
Obelix en Idefix op 17/11/2012 12:12:12:
StartTime en Endtime: waarom twee verschillende types? En waarom tijd niet als zodanig opslaan?
Weekday; dat kun je toch ook in een query ophalen/bepalen?
Weekday; dat kun je toch ook in een query ophalen/bepalen?
in tblClosed zou ik ze beter StartTime_ID en EndTime_ID noemen. Die hebben dan een relatie met de ID in tblHourList.
Ik heb ervoor gekozen om de tijd niet op te slaan als Time omdat ik er ook niet mee moet gaan rekenen. Het is een vaste lijst van tijdstippen.
Wat Weekday betreft: de bedoeling is om een vast schema op te bouwen waar bv de praktijk elke dinsdag (weekday=2) open is op tijdstippen met StartTime_ID 10,11 en 12. Daarom heb ik geen datum opgeslagen waar ik dan de weekday uithaal.
Maar ik kijk het toch even na of het niet interessanter is om het anders te doen.
Toevoeging op 17/11/2012 15:04:35:
Er zat inderdaad een stommiteit in de db.
tblHourList [ID, STartTime, EndTime] de endtime en starttime heb ik als varchar gelaten omdat ik er toch niet meer reken
tblClose [ID, PeriodStart, PeriodEnd, Weekday, HourList_ID]
Het lijkt wel of je er van uit gaat dat je queries altijd goed gaan. Ik zou daar niet op vertrouwen en foutafhandeling inbouwen. ook zou ik geen * in je query zetten maar velden benoemen.
dus SELECT veldnaam, veldnaam FROM .. etc etc
Wat betreft het opslaan van een datum: is opslaan van een timestamp als varchar of int een goeie optie of geeft dat beperkingen?
Nooit een VARCHAR.