MySQL print herhaling
Hieronder zie je het script.
Alvast hartelijk bedankt!!!
///// script.php?werk=1 /////
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
<?
$username = "X";
$password = "X";
$hostname = "X";
$database = "X";
$connection = mysql_connect($hostname,$username,$password);
$db = mysql_select_db($database,$connection);
while ($row = mysql_fetch_array(mysql_query("SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\""))){
extract($row);
print("<h1>".$titel."</h1>");
}
$connection = mysql_close($connection);
?>
$username = "X";
$password = "X";
$hostname = "X";
$database = "X";
$connection = mysql_connect($hostname,$username,$password);
$db = mysql_select_db($database,$connection);
while ($row = mysql_fetch_array(mysql_query("SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\""))){
extract($row);
print("<h1>".$titel."</h1>");
}
$connection = mysql_close($connection);
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$query = "SELECT * FROM werken WHERE id = ".$werk." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
?>
$query = "SELECT * FROM werken WHERE id = ".$werk." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
?>
En waar komt die $werk vandaan? Is dat een ID uit een get? Waarom zie ik dan nergens een $_GET en een controle? maak er dus maar dit van:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if(isset($_GET['werk']))
{
if(is_numeric($_GET['werk']))
{
$query = "SELECT * FROM werken WHERE id = ".mysql_real_escape_string($werk)." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
}else{
echo 'Dit is onacceptable';
}
}
?>
if(isset($_GET['werk']))
{
if(is_numeric($_GET['werk']))
{
$query = "SELECT * FROM werken WHERE id = ".mysql_real_escape_string($werk)." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
}else{
echo 'Dit is onacceptable';
}
}
?>
Anders trek ik binnen 3 seconden je hele database leeg, en dat vind jij vast niet leuk.
Arjan:
Doe het eens rustig in kleine stapjes in plaats van alles in één keer...
En waar komt die $werk vandaan? Is dat een ID uit een get? Waarom zie ik dan nergens een $_GET en een controle? maak er dus maar dit van:
Anders trek ik binnen 3 seconden je hele database leeg, en dat vind jij vast niet leuk.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$query = "SELECT * FROM werken WHERE id = ".$werk." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
?>
$query = "SELECT * FROM werken WHERE id = ".$werk." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
?>
En waar komt die $werk vandaan? Is dat een ID uit een get? Waarom zie ik dan nergens een $_GET en een controle? maak er dus maar dit van:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if(isset($_GET['werk']))
{
if(is_numeric($_GET['werk']))
{
$query = "SELECT * FROM werken WHERE id = ".mysql_real_escape_string($werk)." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
}else{
echo 'Dit is onacceptable';
}
}
?>
if(isset($_GET['werk']))
{
if(is_numeric($_GET['werk']))
{
$query = "SELECT * FROM werken WHERE id = ".mysql_real_escape_string($werk)." AND status = 'on'";
$resultaat = mysql_query($query);
if ($resultaat && (mysql_num_rows($resultaat) == 1))
{
$rij = mysql_fetch_array($resultaat);
$titel = ucfirst($rij['titel']);
echo '<h1>'.$titel.'</h1>'
}
}else{
echo 'Dit is onacceptable';
}
}
?>
Anders trek ik binnen 3 seconden je hele database leeg, en dat vind jij vast niet leuk.
Hoe trek je dan mijn database leeg????????????????????????????????????????????????????????
SELECT * FROM werken WHERE status = "on" AND id = $werk
Ik kan in de GET die $werk meegeven. Stel dat ik daar invul: OR a = a. Dan krijg je:
SELECT * FROM werken WHERE status = "on" AND id = $werk OR a = a
Dan krijg je dus alles in beeld. Nog leuker word als ik die query afkap, en er vervolgens een drop table ingooi.
Maar Arjan, wat is er fout aan mijn script, want dát is wat ik wil leren!!!
Basicly komt het neer op 2 dingen: Je Query is niet helemaal correct, voer hem maar eens los uit en echo de query dan eens.
En je gebruikt een while (een soort loopje) terwijl je maar één regel op wil halen. Opzich kan dat wel, maar dan heb je wel een correcte query nodig...
SELECT * FROM werken WHERE status = "on" AND id = "1"
???
Verder ben ik blij dat je me twee scripts geeft, maar ik wil eigenlijk wel weten wat mijn fout is, want daar leer ik van...
Debuggen is ook een vak, echo je query en je ziet het snel genoeg.
Gewijzigd op 01/01/1970 01:00:00 door Arjan Kapteijn
Gewijzigd op 01/01/1970 01:00:00 door Arjan Kapteijn
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<h1>".$titel."</h1>");
}
?>
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<h1>".$titel."</h1>");
}
?>
Ik weet niet hoe. Maar nu, het volgende probleem:
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
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
<?
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><img src=\"jpg/".$id."hq.jpg\"></p>");
$query = "SELECT * FROM serie WHERE status = \"on\" AND id = \"".$serie."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Serie:</b> ".$serie."</p>");
}
$query = "SELECT * FROM materiaal WHERE status = \"on\" AND id = \"".$materiaal."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Materiaal:</b> ".$materiaal."</p>");
}
print("<p><b>Jaar:</b> ".$jaar."</p>");
print("<p><b>Formaat:</b> ".$lengte." X ".$hoogte." c.m.</p>");
if ($prijs=="decimaalprijs"){
print("<p><b>Prijs:</b> € ".$decimaalprijs."</p>");
}
else{
print("<p><b>Prijs:</b> ".$prijs."</p>");
}
}
?>
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><img src=\"jpg/".$id."hq.jpg\"></p>");
$query = "SELECT * FROM serie WHERE status = \"on\" AND id = \"".$serie."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Serie:</b> ".$serie."</p>");
}
$query = "SELECT * FROM materiaal WHERE status = \"on\" AND id = \"".$materiaal."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Materiaal:</b> ".$materiaal."</p>");
}
print("<p><b>Jaar:</b> ".$jaar."</p>");
print("<p><b>Formaat:</b> ".$lengte." X ".$hoogte." c.m.</p>");
if ($prijs=="decimaalprijs"){
print("<p><b>Prijs:</b> € ".$decimaalprijs."</p>");
}
else{
print("<p><b>Prijs:</b> ".$prijs."</p>");
}
}
?>
Ik krijg deze foutmelding:
Serie: Testserie 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jonathan/domains/jonathanhogervorst.com/public_html/liesbeth/pags/werk.php on line 36
Jaar: 1111
Formaat: 1.00 X c.m.
Prijs: € 11.00
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jonathan/domains/jonathanhogervorst.com/public_html/liesbeth/pags/werk.php on line 25
Het lukt hem dus niet om twee dingen tegelijk uit de database te halen. Maar hoe moet het dan? Ik ben een beginnende phpper en mysqler, ik ben met mysql nog maar een paar maanden bezig, en met php al zo'n jaar. Wil je me alsjeblieft helpen? Hieronder zie je het volledige script:
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
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
<?
$username = "X";
$password = "X";
$hostname = "X";
$database = "X";
$connection = mysql_connect($hostname,$username,$password);
$db = mysql_select_db($database,$connection);
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<h1>".$titel."</h1>");
}
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><img src=\"jpg/".$id."hq.jpg\"></p>");
$query = "SELECT * FROM serie WHERE status = \"on\" AND id = \"".$serie."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Serie:</b> ".$serie."</p>");
}
$query = "SELECT * FROM materiaal WHERE status = \"on\" AND id = \"".$materiaal."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Materiaal:</b> ".$materiaal."</p>");
}
print("<p><b>Jaar:</b> ".$jaar."</p>");
print("<p><b>Formaat:</b> ".$lengte." X ".$hoogte." c.m.</p>");
if ($prijs=="decimaalprijs"){
print("<p><b>Prijs:</b> € ".$decimaalprijs."</p>");
}
else{
print("<p><b>Prijs:</b> ".$prijs."</p>");
}
}
$connection = mysql_close($connection);
?>
$username = "X";
$password = "X";
$hostname = "X";
$database = "X";
$connection = mysql_connect($hostname,$username,$password);
$db = mysql_select_db($database,$connection);
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<h1>".$titel."</h1>");
}
$query = "SELECT * FROM werken WHERE status = \"on\" AND id = \"".$werk."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><img src=\"jpg/".$id."hq.jpg\"></p>");
$query = "SELECT * FROM serie WHERE status = \"on\" AND id = \"".$serie."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Serie:</b> ".$serie."</p>");
}
$query = "SELECT * FROM materiaal WHERE status = \"on\" AND id = \"".$materiaal."\"";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
extract($row);
print("<p><b>Materiaal:</b> ".$materiaal."</p>");
}
print("<p><b>Jaar:</b> ".$jaar."</p>");
print("<p><b>Formaat:</b> ".$lengte." X ".$hoogte." c.m.</p>");
if ($prijs=="decimaalprijs"){
print("<p><b>Prijs:</b> € ".$decimaalprijs."</p>");
}
else{
print("<p><b>Prijs:</b> ".$prijs."</p>");
}
}
$connection = mysql_close($connection);
?>
Gewijzigd op 01/01/1970 01:00:00 door - -
echo $query, en copy past dat eens in phpmyadmin. Vergelijk dat is met wat je op wilt halen.
HUH???
Arjan:
echo $query, en copy past dat eens in phpmyadmin. Vergelijk dat is met wat je op wilt halen.
Dit snap ik echt helemaal niet...........
Uitleg waarom dit eeuwig duurt.
While blijft doorgaan zolang hetgeen tussen de haakjes een waarde geeft. En aangezien de hele regel dus steeds wordt uitgevoerd wordt ook mysql_select(...) steeds uitgevoerd en die geeft een (hetzelfde) resultaat. Dus mysql_fetch_array(..) krijgt ook steeds (dezelfde) waardes. Dus ook $row krijgt steeds (dezelfde) waarde.
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 = "SELECT .....";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
$query = "SELECT ......";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
}
$query = "SELECT ......";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
}
}
?>
$query = "SELECT .....";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
$query = "SELECT ......";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
}
$query = "SELECT ......";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
}
}
?>
ja thnx;)