Php probleem waardoor data niet uit database wordt gehaald

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Voor mijn site gebruik ik aan de rechterkant een menu. Hij haalt de de pagina titels uit de database met de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
 <? 
  echo "<table>";
    $xx=mysql_query("SELECT * FROM pagina WHERE pub='2' ORDER BY id asc LIMIT 0,16");
    while ($row = mysql_fetch_array($xx))
    {
        $id = $row["id"];
        $titel = $row["titel"];
        echo "\n<tr><td>&nbsp;<a href=\"/wieis.php?id=$id\">$titel</a></td></tr>";
    }

  echo "</table>";

?>


Het weergeven van de pagina gebeurt in de 'div' naast het menu :

PHP:
1
2
3
4
5
6
7
8
<?
    $body2=mysql_query("SELECT * FROM pagina WHERE id='$id'");
    $row = mysql_fetch_array($body2);
    $inhoud = $row["inhoud"];
    $titel = $row["titel"];

    echo "\n<tr><td>$inhoud</td></tr>";
?>


Nu is het gekke dat dit niet werkt, hij pakt op 1 of andere manier wel een id met de daarbijbehorende gegevens maar niet de juiste. Klik ik een ander menu item aan dan gebeurt er helemaal nix.

Als ik het menu gedeelte weg laat .. dan kan ik de pagina's aan de hand van de 'id' wel bekijken. Ik heb al even gezocht en getest de eerste query af te sluiten alvorens ik de 2e query start maar zonder resultaat.

Pura Vida


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 15:16
Heb je al gekeken wat nu precies de inhoud van $row is als je de body probeert op de vragen? (Met bijvoorbeeld print_r()). Deze kan namelijk FALSE opleveren als de query is mislukt, en ik zie hier geen enkele afhandeling in het geval dat de query mis gaat.

Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Marcj schreef op vrijdag 23 maart 2007 @ 19:08:
Heb je al gekeken wat nu precies de inhoud van $row is als je de body probeert op de vragen? (Met bijvoorbeeld print_r()). Deze kan namelijk FALSE opleveren als de query is mislukt, en ik zie hier geen enkele afhandeling in het geval dat de query mis gaat.
De query's werken afzonderlijk prima.. maar niet samen op 1 pagina.

Pura Vida


Acties:
  • 0 Henk 'm!

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:15
misschien klein dingetje dat je over het hoofd heb gezien. Bij beide query's gebruik je de variabele $row

code:
1
2
3
4
5
while ($row = mysql_fetch_array($xx)) 

en

$row = mysql_fetch_array($body2);


Wat is $row dan nu? ik denk dat het daarbij fout gaat ;)

Strava


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 15:16
Wacht: ik zie het al. Je gebruikt zo te zien $id op twee plekken, in de loop en (ik gok) globaal om de id van de pagina aan te geven. Als je de loop hebt doorlopen dan staat $id op een hele andere waarde :)

Acties:
  • 0 Henk 'm!

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:15
Precies zoals ik inderdaad ook al zei. Maverick2001 heeft namen dubbel gebruikt, en dat wilt niet werken natuurlijk. Wanneer hij unieke namen voor iedere query gebruikt zal zijn probleem wel opgelost worden.

Strava


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
denyos schreef op vrijdag 23 maart 2007 @ 19:30:
Precies zoals ik inderdaad ook al zei. Maverick2001 heeft namen dubbel gebruikt, en dat wilt niet werken natuurlijk. Wanneer hij unieke namen voor iedere query gebruikt zal zijn probleem wel opgelost worden.
Misschien ga ik nu helemaal de fout in.. maar ik heb nu de namen aangepast bijv. row2

Maar ik krijg nog steeds dan niet de output. Ja ik zit vandaag te lang achter mijn pc.. misschien zie ik echt iets over het hoofd.

Pura Vida


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Het is niet $row dat dubbel is, maar $id.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
is gewoon een kwestie van een regel voordat je een mysql query uitvoert die die pagina uit de database haalt het volgende neer te zetten:

PHP:
1
$id = $_POST["id"];

of
PHP:
1
$id = $_GET["id"];

Acties:
  • 0 Henk 'm!

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
Janoz schreef op vrijdag 23 maart 2007 @ 19:42:
Het is niet $row dat dubbel is, maar $id.
Dat maakt niet uit, het word wel dubbel gebruikt maar ook dubbel gedefinieerd.


offtopic: hmm, niet helemaal goed gedaan, dit zou bij m'n vorige post moeten staan ^^

[ Voor 26% gewijzigd door Mental op 23-03-2007 19:49 ]


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 15:16
In php kun je niet namen hergebruiken of opnieuw definieren omdat het niet strong-typed is. Dus het dubbel gebruik van $id is waarschijnlijk jouw probleem. Probeer maar eens de SQL statement de echo'en, dan zul je zien dat de id niet de goede is.

Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Maverick2001 schreef op vrijdag 23 maart 2007 @ 18:52:
PHP:
1
    $body2=mysql_query("SELECT * FROM pagina WHERE id='$id'");
Was zoiets niet gevoelig voor sql-injection?

Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Marcj schreef op vrijdag 23 maart 2007 @ 19:58:
In php kun je niet namen hergebruiken of opnieuw definieren omdat het niet strong-typed is. Dus het dubbel gebruik van $id is waarschijnlijk jouw probleem. Probeer maar eens de SQL statement de echo'en, dan zul je zien dat de id niet de goede is.
Ik heb nu id2 gedefinieerd.. echter dat heeft geen effect...

Pura Vida


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Heb je al geprobeerd wat L4m0r heeft gezegd? Namelijk net voordat je de 2de querie opbouwd de volgende code te zetten:
PHP:
1
2
3
<?php 
$id = $_GET["id"]; 
?>


En je mag de variabele gewoon $id blijven noemen, je moet alleen wel zorgen dat de variabele de juiste inhoud heeft op het moment dat die gebruikt word.

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
echo "\n<tr><td>$inhoud</td></tr>";

en
PHP:
1
echo "\n<tr><td>&nbsp;<a href=\"/wieis.php?id=$id\">$titel</a></td></tr>";


Hoe je vars buiten de quotes dus zo

PHP:
1
echo "\n<tr><td>".$inhoud."</td></tr>";

en
PHP:
1
echo "\n<tr><td>&nbsp;<a href=\"/wieis.php?id=".$id."\">".$titel."</a></td></tr>";


Kan al helpen
En de rest wat er hier al in topic staat

[ Voor 5% gewijzigd door Verwijderd op 24-03-2007 11:01 ]


Acties:
  • 0 Henk 'm!

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Verwijderd schreef op zaterdag 24 maart 2007 @ 11:00:
PHP:
1
echo "\n<tr><td>$inhoud</td></tr>";

en
PHP:
1
echo "\n<tr><td>&nbsp;<a href=\"/wieis.php?id=$id\">$titel</a></td></tr>";


Hoe je vars buiten de quotes dus zo

PHP:
1
echo "\n<tr><td>".$inhoud."</td></tr>";

en
PHP:
1
echo "\n<tr><td>&nbsp;<a href=\"/wieis.php?id=".$id."\">".$titel."</a></td></tr>";


Kan al helpen
En de rest wat er hier al in topic staat
Vertel eens: Waarom zou dit beter werken?

Acties:
  • 0 Henk 'm!

Verwijderd

Dat is beter leesbaar :)

Acties:
  • 0 Henk 'm!

Verwijderd

Daos schreef op vrijdag 23 maart 2007 @ 20:03:
[...]

Was zoiets niet gevoelig voor sql-injection?
Als $id direct uit de $_GET array wordt gehaald wel ja :).

Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
WormLord schreef op zaterdag 24 maart 2007 @ 10:54:
Heb je al geprobeerd wat L4m0r heeft gezegd? Namelijk net voordat je de 2de querie opbouwd de volgende code te zetten:
PHP:
1
2
3
<?php 
$id = $_GET["id"]; 
?>


En je mag de variabele gewoon $id blijven noemen, je moet alleen wel zorgen dat de variabele de juiste inhoud heeft op het moment dat die gebruikt word.
Dat is het inderdaad! Thnx

Pura Vida

Pagina: 1