mysql_fetch_row() werkt niet ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • evanraalte
  • Registratie: December 2008
  • Laatst online: 20-09 15:28
Hoi mensen, ik ben tegen een probleem aangelopen toen ik gegevens uit een database wilde halen met een zoekterm, ik probeer er een duidelijk topic van te maken.
wat is het doel van het script?
Ik heb een muziekdatabase, ik wil dat ik een tabel krijg met gegevens van betreffende albums als ik een genre invul. dit heb ik op de volgende manier gedaan:

PHP: album.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


<?php
$genre= "null"
if (!empty($_POST["genre"])){
$genre= $_POST["genre"]; }


$host="mysql3.000webhost.com";
$username="muziek";
$password = "*********";
$dbnaam="muziek";
$fout = "FOUT: openen is mislukt";
$query1=  "SELECT COUNT(*) AS AANTAL_UITVOERINGEN
FROM uitvoering";
$query2=  "SELECT COUNT(*) AS AANTAL_BANDS
FROM artiest_gr";
$query3=  "SELECT COUNT(*) AS AANTAL_EXEMPLAREN_VAN_ALBUMS
FROM exemplaar";
$query4=  "SELECT * FROM album WHERE alb_genre =" . $genre . "));
";


$db=mysql_connect($host, $username, $password) or die ( $fout);
mysql_select_db($dbnaam,$db) or die ( $fout);
$result1 = mysql_query($query1);
$result2 = mysql_query($query2);
$result3= mysql_query($query3);
$result4= mysql_query($query4);
?>



<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta name="description" content="description"/>
<meta name="keywords" content="keywords"/> 
<meta name="author" content="author"/> 
<link rel="stylesheet" type="text/css" href="default.css"/>
<title>Mijn grote muziekdatabase</title>
</head>

<body>

<div id="main">

 <div id="main_left">
  
  <div id="header">
   <h1><a href="index.html">Mijn Grote muziekdatabase</a></h1>
  </div>

  <div id="navigation">
   <ul>
    <li><a href="artiest.php" accesskey="1">Artiest zoeken</a></li>
    <li><a href="album.php" accesskey="2">Album zoeken</a></li>
    <li><a href="leen.php" accesskey="3">wie leent er</a></li>
    <li><a href="track.php" accesskey="4">Muziekstuk zoeken</a></li>
   </ul>
  </div>

  <div id="content">

   <h1>Album zoeken:</h1>
   <div class="descr">14 jan 2011, door Erik</div>

   <div class="post_body">

    <p>Album genre:</p>
    <p> <form name="albumzoeken" action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
         <input type="text" name="genre ">
         <input type="Submit" value="tonen"> 

    <p>
    <table border="1" width="100%" align="center">
    <tr> 
       <th>alb_nr</th> 
       <th>alb_titel</th> 
       <th>alb_genre</th> 
       <th>alb_uitgever</th> 
       <th>alb_EANNR</th> 
    
    </tr>
    <?php
    while (list($alb_nr, $alb_titel, $alb_genre, $alb_uitgever, $alb_EANNR) = mysql_fetch_row($result4)){ 
    echo ("<tr><td>$alb_nr</td><td> $alb_titel</td><td> $alb_genre</td><td> $alb_uitgever</td><td> $alb_EANNR</td></tr>"); 
    
    }?>
    </table>
    </p>

   </div>

   

   

  </div>

 </div>

 <div id="main_right">
  
  <div class="label">Statistieken</div>

  <ul class="block">
   <li><a href="#">Aantal tracks: <?php while (list($aantaltracks)= mysql_fetch_row($result1)){ echo ("$aantaltracks");} ?></a></li>
   <li><a href="#">Aantal artiesten:<?php while (list($aantalartiesten)= mysql_fetch_row($result2)){ echo ("$aantalartiesten");} ?></a></li>
                        <li><a href="#">Aantal albums:<?php while (list($aantalalbums)= mysql_fetch_row($result3)){ echo ("$aantalalbums");} ?></a></li>
   
  </ul>

  <div class="label">Programma's</div>

   
   <ul class="block">

    <li><a href="#" rel="bookmark" >FCO-IM</a></li>
    <li><a href="#" rel="bookmark" >Access</a></li>
    <li><a href="#" rel="bookmark" >Myphpadmin</a></li>
    <li><a href="#" rel="bookmark" >Access to CSV</a></li>
    <li><a href="#" rel="bookmark" >Html-kit</a></li>
   </ul>

   

   

   

 </div>

 <div id="footer">

  <div class="left">&copy; 2011 <a href="index.html">Muziekdatabase</a></div>

  <div class="right"><a href="#" >sdf</a>  </div>

  <div class="clearer"></div>

 </div>

</div>

</body>

</html>

wat er werkt(e) en wat niet

Deze pagina bestaat zoals je ziet uit 4 query's. 3 count query's (die werkten) en 1 invulvariable die zou moeten werken in mijn ogen ( doet ie niet, maar ik ben wel een noob hierin)

Hoe dan ook, ik krijg deze foutmelding:

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/a******/public_html/deep-blue-website-template/album.php on line 91

dit gaat overigens over dit stukkie:

<?php
while (list($alb_nr, $alb_titel, $alb_genre, $alb_uitgever, $alb_EANNR) = mysql_fetch_row($result4)){
echo ("<tr><td>$alb_nr</td><td> $alb_titel</td><td> $alb_genre</td><td> $alb_uitgever</td><td> $alb_EANNR</td></tr>");

}?>


Ik heb al gekeken naar het script en ik kan eerlijk gezegd niet iets fouts ondekken, het fetch_row argument doet het bij de andere querries wel dus ik snap niet wat er nu mis is. De tabel heeft in access ook 5 kolommen dus daar kan het niet aan liggen lijkt mij.


Het zou zo een domme typfout kunnen zijn maar ik zie em niet, weten jullie misschien wat er aan de hand is hier? ik heb al gezocht op google maar daar werd ik niet heel veel wijzer van als php noob :P

bedankt :)

Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Dit is geen SQL:
$query4= "SELECT * FROM album WHERE alb_genre =" . $genre . "));
";

Acties:
  • 0 Henk 'm!

  • Wmm
  • Registratie: Maart 2002
  • Laatst online: 10:40

Wmm

In query4 zal $genre tussen quotes moeten (single or double) aangezien het een string zal zijn (neem ik aan iig). Daarnaast heb je nog )) achter $genre staan wat daar niet hoort te staan (kan gewoon weg, je gebruikt in die query ook niet (( ergens.

Overigens moet je wel rekening houden met het feit dat $genre = "null" waarschijnlijk niet zal gaan werken zoals jij het in gedachten hebt (null wordt dan gezien en gebruikt als string).

Misschien dat het handig is je eerst wat verder in te lezen? Je vergeet ook al om $genre door mysql_real_escape_string te halen (sql injection).

[ Voor 40% gewijzigd door Wmm op 06-02-2011 17:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je controleert de return value van de mysql_query calls niet, je escapte de user input je in $genre stopt niet en het is in het algemeen vreselijk gore code. Wat je fout doet is dus het gevolg van slechte gewoontes. Leer eerst die gewoontes af, leer zo te programmeren dat je er niet vanuit gaat dat alles altijd lukt en breng een beetje meer logica en structuur in je code.

Acties:
  • 0 Henk 'm!

  • skabouter
  • Registratie: Oktober 2000
  • Laatst online: 20-08 08:55

skabouter

Skabouter

Probeer eens

PHP:
1
$result4= mysql_query($query4) or die(mysql_error());


Dan zul je direct zien dat de query fout is.

[ Voor 33% gewijzigd door skabouter op 06-02-2011 17:13 ]

[ Dislect ]


Acties:
  • 0 Henk 'm!

  • evanraalte
  • Registratie: December 2008
  • Laatst online: 20-09 15:28
@Wmm:
hoe moet ik dat dan precies doen? standaard moet de tabel worden weergegeven met alle records erin, en als ik een zoek term doet moet ie de query aanpassen op de zoekterm.

Ik zal nog wel wat lezen over mysql, ik ben er echt net meebegonnen. Ksnap ook veel termen die jullie gebruiken niet, verder heb ik de query al veranderd.

@Cheatah: zou je alsjeblieft makkelijk nederlands kunnen praten? :) Het zal allemaal wel kloppen maar erg veel zin heeft het niet als ik er toch geen bal van snap toch?:P

Acties:
  • 0 Henk 'm!

  • Wmm
  • Registratie: Maart 2002
  • Laatst online: 10:40

Wmm

evanraalte schreef op zondag 06 februari 2011 @ 18:23:
@Wmm:
hoe moet ik dat dan precies doen? standaard moet de tabel worden weergegeven met alle records erin, en als ik een zoek term doet moet ie de query aanpassen op de zoekterm.

Ik zal nog wel wat lezen over mysql, ik ben er echt net meebegonnen. Ksnap ook veel termen die jullie gebruiken niet, verder heb ik de query al veranderd.

@Cheatah: zou je alsjeblieft makkelijk nederlands kunnen praten? :) Het zal allemaal wel kloppen maar erg veel zin heeft het niet als ik er toch geen bal van snap toch?:P
Om ze allemaal te selecteren laat je de where clause weg en plak je die alleen achter de query als er een zoekterm ingevuld is (dat is iig een mogelijkheid, de simpelste).

Dit is allemaal heel erg basic php en mysql, lees dus nog eens eerst je tutorials oid door of koop een goed boek (wat mijn voorkeur heeft).

Acties:
  • 0 Henk 'm!

  • evanraalte
  • Registratie: December 2008
  • Laatst online: 20-09 15:28
Wmm schreef op zondag 06 februari 2011 @ 18:42:
[...]


Om ze allemaal te selecteren laat je de where clause weg en plak je die alleen achter de query als er een zoekterm ingevuld is (dat is iig een mogelijkheid, de simpelste).

Dit is allemaal heel erg basic php en mysql, lees dus nog eens eerst je tutorials oid door of koop een goed boek (wat mijn voorkeur heeft).
Ik snap ongeveer wat je bedoeld en ga er morgen mee verder. Na een tijdje wordt je dit gedoe echt beu als het misgaatxD

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
evanraalte schreef op zondag 06 februari 2011 @ 18:23:
@Cheatah: zou je alsjeblieft makkelijk nederlands kunnen praten? :) Het zal allemaal wel kloppen maar erg veel zin heeft het niet als ik er toch geen bal van snap toch?:P
Begrijp eerst wat hij zegt, lees je erover in en pas daarna ga je verder met code schrijven, dat is een beetje de insteek dus :)

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
evanraalte schreef op zondag 06 februari 2011 @ 18:23:
@Cheatah: zou je alsjeblieft makkelijk nederlands kunnen praten? :) Het zal allemaal wel kloppen maar erg veel zin heeft het niet als ik er toch geen bal van snap toch?:P
Poging:
Verwijderd schreef op zondag 06 februari 2011 @ 17:08:
Je controleert de waarde die de aanroep naar de mysql_query() functie teruggeeft niet, je maakt de gebruikersinvoer die je in de $genre variabele stopt niet veilig en het is in het algemeen vreselijk gore code.
De rest is normaal Neerlandsch, moet te snappen zijn. Ik zou de code zelf niet als 'vreselijk goor' afdoen, heb erger gezien, maar d'r gaat ergens iets fout en het kan beterder.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

evanraalte schreef op zondag 06 februari 2011 @ 18:23:
@Cheatah: zou je alsjeblieft makkelijk nederlands kunnen praten? :) Het zal allemaal wel kloppen maar erg veel zin heeft het niet als ik er toch geen bal van snap toch?:P
Als je Cheatah echt niet snapt, dan zou ik me toch eens gaan echt gaan verdiepen in PHP en MySQL. Je laat MySQL ergens een query uitvoeren en dat lukt niet. Dat het niet lukt en welke foutmelding er bij hoort is eenvoudig te controleren, maar dat doe je helemaal nergens. Zoek de documentatie van de door jouw gebruikt mysql functies eens op en neem die eens door. Je zou dan genoeg informatie moeten hebben om het zelf op te lossen. Dit soort zaken zelf fixen is simpelweg een kwestie van debuggen. En dat is iets wat je als ontwikkelaar echt zelf zou moeten kunnen.

Dat je iets niet snapt is niet erg, maar dat je je er niet in lijkt te willen verdiepen is dat eigenlijk wel.

[ Voor 6% gewijzigd door Creepy op 08-02-2011 16:40 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1