intval(mysql_num_rows(): fout op pagina.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\bla\wwwroot\blabla\test.php on line 67
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
$order = $_GET['order'];
$order_by = $_GET['order_by'];
if (!isset($order) || $order != 'ASC' || $order != DESC) {
$order = 'ASC';
}
if (isset($order_by)) {
switch($order_by) {
case 'id':
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY id ' . $order . ', id ASC ';
break;
case 'titel':
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY titel ' . $order . ', id ASC ';
break;
case 'datum':
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY datum ' . $order . ', id ASC ';
break;
case 'download':
$query ='SELECT id, titel, datum, download FROM stm_downloads ORDER BY download ' . $order . ', id ASC ';
break;
default:
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY id ' . $order . ', id ASC ';
break;
}
}
else {
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY titel ASC, datum ASC';
}
mysql_connect('db.local.nl','userbla','wwbla');
mysql_select_db('dbbla');
$result = mysql_query($query);
// html
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"; ?>
<table width="700" border="1">
<tr>
<td><a href="downloads.php?order_by=id&order=ASC">id</a></td>
<td><a href="downloads.php?order_by=titel&order=ASC">Titel</a></td>
<td><a href="downloads.php?order_by=datum&order=ASC">Datum</a></td>
<td><a href="downloads.php?order_by=download&order=ASC">Aantal download</a></td>
</tr>
<?
$numrows = intval(mysql_num_rows($result));
if($numrows > 0) {
while($member = mysql_fetch_array($result)) {
echo '<tr><td>'.$member['id'].'</td><td>'.$member['titel'].'</td><td>'.$member['datum'].'</td><td>'.$member['download'].'</td><tr>';
}}
else {
echo '<tr><td colspan="9">Geen downloads gevonden</td></tr>';
}
?>
</table>
Wel zie ik een tabel en de else Echo.
Maar wat is er nog meer fout.
$order = $_GET['order'];
$order_by = $_GET['order_by'];
if (!isset($order) || $order != 'ASC' || $order != DESC) {
$order = 'ASC';
}
if (isset($order_by)) {
switch($order_by) {
case 'id':
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY id ' . $order . ', id ASC ';
break;
case 'titel':
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY titel ' . $order . ', id ASC ';
break;
case 'datum':
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY datum ' . $order . ', id ASC ';
break;
case 'download':
$query ='SELECT id, titel, datum, download FROM stm_downloads ORDER BY download ' . $order . ', id ASC ';
break;
default:
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY id ' . $order . ', id ASC ';
break;
}
}
else {
$query = 'SELECT id, titel, datum, download FROM stm_downloads ORDER BY titel ASC, datum ASC';
}
mysql_connect('db.local.nl','userbla','wwbla');
mysql_select_db('dbbla');
$result = mysql_query($query);
// html
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"; ?>
<table width="700" border="1">
<tr>
<td><a href="downloads.php?order_by=id&order=ASC">id</a></td>
<td><a href="downloads.php?order_by=titel&order=ASC">Titel</a></td>
<td><a href="downloads.php?order_by=datum&order=ASC">Datum</a></td>
<td><a href="downloads.php?order_by=download&order=ASC">Aantal download</a></td>
</tr>
<?
$numrows = intval(mysql_num_rows($result));
if($numrows > 0) {
while($member = mysql_fetch_array($result)) {
echo '<tr><td>'.$member['id'].'</td><td>'.$member['titel'].'</td><td>'.$member['datum'].'</td><td>'.$member['download'].'</td><tr>';
}}
else {
echo '<tr><td colspan="9">Geen downloads gevonden</td></tr>';
}
?>
</table>
Wel zie ik een tabel en de else Echo.
Maar wat is er nog meer fout.
Echo je query en pleur die 's in phpmyadmin :-)
sorry, even nog iets weggehaald wat voor dit script stond, fout melding word gegenereerd in regel 48
mysql_num_rows returned al het aantal records in recordset of false bij een fout
gewoon moet wezen omdat ik in de database een s te veel had staan.
Echt heel stom
Ik ben er al achter. Echt niet te geloven, gisteren avond hele tijd bezig geweest en net nog een uur. Blijkt dat mijn Echt heel stom
Gewijzigd op 01/01/1970 01:00:00 door Timen kut
En queries uitvoeren zonder foutafhandeling is niet slim, dat is vragen om problemen.
Wedden voor een kratje bier dat $order_by altijd bestaat? Het is zelfs onmogelijk dat deze niet bestaat, je maakt hem net aan... Deze controle is dus zinloos. Het zou handiger zijn om te controleren of $_GET['order_by'] bestaat, daar heb je geen flauw idee van maar je controleert dit helemaal nergens. Ook controleer je niet of deze wel een geldige inhoud heeft en doe je helemaal niets aan beveiliging. Jouw database naar de bliksem helpen, is dan waarschijnlijk ook een fluitje van een cent. SQL-injection.
Ga eens aan de slag met mysql_real_escape_string(), die gaat je behoeden voor grote ellende. Userinput (COOKIE, GET, POST, etc.) mag NOOIT zo in een query terecht komen, ook niet als je jezelf eerst voor de gek gaat houden door deze onbetrouwbare input in een andere variabele te zetten. Daar wordt het echt niet veiliger van, in tegendeel!
pgFrank schreef op 10.10.2008 14:00:
Daar wordt het echt niet veiliger van, in tegendeel!
ik wist dat het Zinloos was om het in een var te zetten en dat het alleen maar tijd kost,
maar wat bedoel je met in tegendeel ? is het dus ook nog gevaarlijk om het tedoen?
rvw schreef op 10.10.2008 14:06:
ik wist dat het Zinloos was om het in een var te zetten en dat het alleen maar tijd kost,
maar wat bedoel je met in tegendeel ? is het dus ook nog gevaarlijk om het tedoen?
pgFrank schreef op 10.10.2008 14:00:
Daar wordt het echt niet veiliger van, in tegendeel!
ik wist dat het Zinloos was om het in een var te zetten en dat het alleen maar tijd kost,
maar wat bedoel je met in tegendeel ? is het dus ook nog gevaarlijk om het tedoen?
Nee, op zich niet. Maar ik denk dat pgFrank bedoelt dat als je $naam in je script gebruikt dat je dan vanzelf aanneemt dat daar een 'naam' in staat. Gebruik je echter $_GET['naam'] dan weet je dat daar van alles in kan staan. Dus het copiëren van $_GET['naam'] naar $naam kan onduidelijkheid verschaffen waardoor je fouten/lekken kunt krijgen.