mysql_num_rows(): supplied argument is not a valid MySQL result resource in..
Dit is de foutmelding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in....
Dit is de regel: } elseif (mysql_num_rows($data) >= 1) {
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
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
<?php
case ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'Zoeken') :
//-- $_POST['zoekterm'] even door beveiliging(etje) halen.
$zoekterm=mysql_real_escape_string($_POST['zoekterm']);
//-- $_POST['zoekterm'] is de naam van het zoekveld in het formulier wat we
//-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
$db->sql_opdracht = ("SELECT * FROM linken WHERE link_omschrijving LIKE '%" . $_POST['zoekterm'] . "%'");
$data = $db->sql_gegevens();
//-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen
//-- kijken of er een resultaat is
//-- EDIT: zo niet een TRIGGER_ERROR weergeven, dan loopt de rest van je code wel gewoon door
//-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet
if (empty($_POST['zoekterm'])) {
echo '<table class="zoek" align="center" width="450" border="0" cellspacing="0" cellpadding="4">';
echo '<tr>';
echo '<td>';
echo '<p align="center"><b>U heeft vergeten iets in te vullen</b><br /><br />';
echo '</td>';
echo '</tr>';
echo '</table>';
} elseif (mysql_num_rows($data) >= 1) {
//-- er is een resultaat gevonden, toon de resultaten via een while () loop
echo '<h1>U zocht op: ' . $_POST['zoekterm'] . '</h1>';
echo '<table width="100%" class="tabelgroot" align="center" cellspacing="0" cellpadding="0">';
echo '<tr>';
$kolommen = 3;
while ($data = $db->sql_gegevens()){
echo '<td valign="top" align="center">';
echo '<table class="kadobon" align="left" width="">';
echo '<tr>';
echo '<td width="120" height="90"><img src="'.$data['link_plaatje'].'" border="0" alt="'.$data['link_naam'].'" /></td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="naam">'.$data['link_naam'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="omschrijving">'.$data['link_omschrijving'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="prijs">'.$data['link_prijs'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="linkbon"><a href="kadobon.php?kadobon=' . $data['link_id'] . '" target="_blank" ><img src="plaatjes/kadobon.gif" border="0" alt="Meteen naar de kadobon" title="Meteen naar de kadobon" /></a> / <a href="website.php?website=' . $data['link_id'] . '" target="_blank" ><img src="plaatjes/website.gif" border="0" alt="Naar de website" title="Naar de website" /></a></td>';
echo '</tr></table>';
$counter++;
if($counter==$kolommen)
{
echo '</td></tr></table>'.PHP_EOL.'<table class="tabelgroot" align="left" cellspacing="0" cellpadding="0"><tr>'.PHP_EOL;
$counter = 0;
}
}//einde while lus
echo '</td></tr></table>';
?>
case ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'Zoeken') :
//-- $_POST['zoekterm'] even door beveiliging(etje) halen.
$zoekterm=mysql_real_escape_string($_POST['zoekterm']);
//-- $_POST['zoekterm'] is de naam van het zoekveld in het formulier wat we
//-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
$db->sql_opdracht = ("SELECT * FROM linken WHERE link_omschrijving LIKE '%" . $_POST['zoekterm'] . "%'");
$data = $db->sql_gegevens();
//-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen
//-- kijken of er een resultaat is
//-- EDIT: zo niet een TRIGGER_ERROR weergeven, dan loopt de rest van je code wel gewoon door
//-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet
if (empty($_POST['zoekterm'])) {
echo '<table class="zoek" align="center" width="450" border="0" cellspacing="0" cellpadding="4">';
echo '<tr>';
echo '<td>';
echo '<p align="center"><b>U heeft vergeten iets in te vullen</b><br /><br />';
echo '</td>';
echo '</tr>';
echo '</table>';
} elseif (mysql_num_rows($data) >= 1) {
//-- er is een resultaat gevonden, toon de resultaten via een while () loop
echo '<h1>U zocht op: ' . $_POST['zoekterm'] . '</h1>';
echo '<table width="100%" class="tabelgroot" align="center" cellspacing="0" cellpadding="0">';
echo '<tr>';
$kolommen = 3;
while ($data = $db->sql_gegevens()){
echo '<td valign="top" align="center">';
echo '<table class="kadobon" align="left" width="">';
echo '<tr>';
echo '<td width="120" height="90"><img src="'.$data['link_plaatje'].'" border="0" alt="'.$data['link_naam'].'" /></td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="naam">'.$data['link_naam'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="omschrijving">'.$data['link_omschrijving'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="prijs">'.$data['link_prijs'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="linkbon"><a href="kadobon.php?kadobon=' . $data['link_id'] . '" target="_blank" ><img src="plaatjes/kadobon.gif" border="0" alt="Meteen naar de kadobon" title="Meteen naar de kadobon" /></a> / <a href="website.php?website=' . $data['link_id'] . '" target="_blank" ><img src="plaatjes/website.gif" border="0" alt="Naar de website" title="Naar de website" /></a></td>';
echo '</tr></table>';
$counter++;
if($counter==$kolommen)
{
echo '</td></tr></table>'.PHP_EOL.'<table class="tabelgroot" align="left" cellspacing="0" cellpadding="0"><tr>'.PHP_EOL;
$counter = 0;
}
}//einde while lus
echo '</td></tr></table>';
?>
Is de query wel gelukt? Oftwel, bevat $data wel de juiste gegevens?
De melding zegt dat $data geen geldig mysql resultaat is, dus of er is wat fout met je query of je gebruikt de methodes uit je klasse niet goed (er vanuit gaande dat $db wel een instantie van je klasse is).
$zoekterm=mysql_real_escape_string($_POST['zoekterm']);
Je gaat namelijk gewoon verder met $_POST['zoekterm'] in de query en in de if().
Eigenlijk werkt de pagina al niet meer goed.
Dit is de classe pagina:
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
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
<?php
class mijn_toegang{
//Variabelen voor toegangsgegevens
var $user=""; //Gebruikersnaam voor MySql
var $password=""; //Wachtwoord
var $host="localhost"; //Naam (ip-adres) van computer met MySql
var $dbname=""; //Naam van de database
//Overige variabelen
var $db_verbinding=false; //Resultaat van verbinding
var $sql_result=false; //Resultaat van uitgevoerde Sql-opdracht
//Constructor definiëren
function mijn_toegang(){
//Functie verbinden wordt uitgevoerd bij aanroepen klasse
$this->verbinden();
}
//Als verbinding niet bestaat,
//verbinding opzetten en database als standaard definiëren
function verbinden(){
if ($this->db_verbinding==false){
$this->db_verbinding = @mysql_connect($this->host, $this->user, $this->password);
if (empty($this->db_verbinding)){
$this->fout("Bij opzetten verbinding");
}
$keuze = @mysql_select_db($this->dbname, $this->db_verbinding);
if(empty ($keuze)){
$this->fout("Bij selecteren van DB");
}
return $this->db_verbinding;
}
}
//Geef foutmelding weer en sluit script af
function fout($foutpunt){
echo $foutpunt . " is een fout opgetreden!<br />";
echo mysql_error() . "<br />"; //beschrijving van fout
echo mysql_errno(); //foutnummer
echo "</body></html>"; //html-tags sluiten
exit;
}
//Sql-opdracht uitvoeren
function sql_opdracht ($sql){
$this->sql_result = @mysql_query($sql, $this->db_verbinding);
if (empty($this->sql_result)){
$this->fout("Bij verzenden query");
}
return $this->sql_result;
}
//Als er al eerder een Sql-opdracht is uitgevoerd,
//wordt hier de array met de records weergegeven
function sql_gegevens(){
if(!empty($this->sql_result)){
$sql_array=@mysql_fetch_array($this->sql_result);
return $sql_array;
}else{
$this->fout ("Bij het weergeven van de records");
}
}
}
//Aan het einde van het script wordt de klasse direct aangeroepen
$db=new mijn_toegang();
?>
class mijn_toegang{
//Variabelen voor toegangsgegevens
var $user=""; //Gebruikersnaam voor MySql
var $password=""; //Wachtwoord
var $host="localhost"; //Naam (ip-adres) van computer met MySql
var $dbname=""; //Naam van de database
//Overige variabelen
var $db_verbinding=false; //Resultaat van verbinding
var $sql_result=false; //Resultaat van uitgevoerde Sql-opdracht
//Constructor definiëren
function mijn_toegang(){
//Functie verbinden wordt uitgevoerd bij aanroepen klasse
$this->verbinden();
}
//Als verbinding niet bestaat,
//verbinding opzetten en database als standaard definiëren
function verbinden(){
if ($this->db_verbinding==false){
$this->db_verbinding = @mysql_connect($this->host, $this->user, $this->password);
if (empty($this->db_verbinding)){
$this->fout("Bij opzetten verbinding");
}
$keuze = @mysql_select_db($this->dbname, $this->db_verbinding);
if(empty ($keuze)){
$this->fout("Bij selecteren van DB");
}
return $this->db_verbinding;
}
}
//Geef foutmelding weer en sluit script af
function fout($foutpunt){
echo $foutpunt . " is een fout opgetreden!<br />";
echo mysql_error() . "<br />"; //beschrijving van fout
echo mysql_errno(); //foutnummer
echo "</body></html>"; //html-tags sluiten
exit;
}
//Sql-opdracht uitvoeren
function sql_opdracht ($sql){
$this->sql_result = @mysql_query($sql, $this->db_verbinding);
if (empty($this->sql_result)){
$this->fout("Bij verzenden query");
}
return $this->sql_result;
}
//Als er al eerder een Sql-opdracht is uitgevoerd,
//wordt hier de array met de records weergegeven
function sql_gegevens(){
if(!empty($this->sql_result)){
$sql_array=@mysql_fetch_array($this->sql_result);
return $sql_array;
}else{
$this->fout ("Bij het weergeven van de records");
}
}
}
//Aan het einde van het script wordt de klasse direct aangeroepen
$db=new mijn_toegang();
?>
@SanThe Geen idee maar iemand heeft me eens geholpen met dit script en heeft dit erin gezet.
Quote:
Wanneer je eenmaal onder de knie hebt en de logica snapt, dan werkt het een stuk eenvoudiger. Ook het onderhoud e.d. is een stuk eenvoudiger. Ga dus niet twijfelen aan jezelf, het is gewoon een lastig onderwerp. Nu even doorbijten en straks heb je daar een hoop plezier van.Het leek me wel makkelijk maar ik begin alweer te twijfelen of het wel iets voor me is.
Succes!
@Frank :) bedankt :)
Ik mis dus iets als:
$db = new mijn_toegang();
Ik ook even je gebruikersnaam en wachtwoord uit bovenstaand voorbeeld halen, dat is niet zo handig om publiekelijk online te zetten ;)
Dat zinnetje staat toch onderaan de pagina mijn_toegang.inc.php ?
Of moet die in de index.php staan.
@Elsy: Edit je password en dergelijke even weg. *******
In het geval van een database connectie: bijvoorbeeld een connectie met 2 verschillende databases.
Een voorbeeld uit de boeken: als ik de klasse 'Fiets' heb, kan ik natuurlijk meerdere fietsen (instanties van de klasse 'Fiets') aanmaken.