Ik ben bezig met een script dat een titel van een produkt uit een database haalt, maar PHP is zo (on)vriendelijk om de titel vaker dan één keer uit de database haalt, namelijk eindeloos. Ik heb het script enkele malen gechekt, maar kon geen fouten vinden. Zijn er mensen die mij alstjeblieft willen helpen???
Hieronder zie je het script.

Alvast hartelijk bedankt!!!

///// script.php?werk=1 /////
<?
$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);
?>
Doe het eens rustig in kleine stapjes in plaats van alles in één keer...

<?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>'
}
?>

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:

<?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';
}
}
?>

Anders trek ik binnen 3 seconden je hele database leeg, en dat vind jij vast niet leuk.
Arjan Kapteijn schreef op 23.04.2006 15:20
Doe het eens rustig in kleine stapjes in plaats van alles in één keer...

<?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>'
}
?>

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:

<?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';
}
}
?>

Anders trek ik binnen 3 seconden je hele database leeg, en dat vind jij vast niet leuk.

Hoe trek je dan mijn database leeg????????????????????????????????????????????????????????
Jou query;

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!!!
Ik heb je 2 werkende goede voorbeelden gegeven... ik denk dat je daar een heel eind moet komen.

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...
Wat is er dan fout aan
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...
Kijk eens naar mijn en jou script...

Debuggen is ook een vak, echo je query en je ziet het snel genoeg.
Nu werkt het wel:
<?
$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:
<?
$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:
<?
$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);
?>
echo $query, en copy past dat eens in phpmyadmin. Vergelijk dat is met wat je op wilt halen.

Reageren