[PHP&Mysql] While loops

Pagina: 1
Acties:

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
Beste,

Vandaag ben ik bezig om een overzichts pagina te maken

Het uiteindelijke resultaat moet er zo uit zien:

- Main (vb Home)
- Subpagina Title
- Subpagina Title

- Main (vb Het bedrijf)
- Subpagina Title
- Subpagina Title

Ik heb al geprobeerd om op verschillende manieren while loops & foreach loops te werken. Helaas komt dan soms 1 regel uit, maar meestal helemaal niets.

Mijn code op het moment:

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
<html>
<head>
<title></title>
</head>

<body>
<div id="newstop">
Pagina overzicht
</div>
<div id="newsmain">
      <br />
<?php 
$sql        ="SELECT * FROM cms_main";
$query      = mysql_query($sql);
$rows       = mysql_num_rows($query);
$data       = mysql_fetch_array($query);
$i = 0;
while($row > $i) {
      ?>
      <table width="500" border="0" align="center">
        <tr>
          <td><strong><?php echo $data['main']; ?></strong></td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><em>Titel</em></td>
          <td width="192"><em>Inhoud</em></td>
          <td width="152"><em>Permissions</em></td>
        </tr>
 <?php 
$sql        ="SELECT * FROM cms_pages WHERE mid='".$data['mid']."'";
$query      = mysql_query($sql);
$rows       = mysql_num_rows($query);
while($sub  = mysql_fetch_array($query)) {
?>
        <tr>
          <td><?php echo $sub['title']; ?></td>
          <td>/</td>
          <td><?php if($user_lvl >= $sub['lvl']){ echo 'Wijzigen/Deleten'; }
                    if($user_lvl < $sub['lvl']){ echo 'Geen'; } ?></td>
        </tr>
<?php 
} 
?>
      </table>
      <br />
      <br />
<?php 
$i = $i + 1;
}
?>
    <br />

</div>
</body>
</html>

[ Voor 58% gewijzigd door Mud op 10-07-2007 13:19 ]


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
je code kan je beter in dit topic plaatsen tussen [ code=php][/code ] tags

ontopic:
mysql_fetch_array werkt iets anders dan jij denkt.
zoek de handleiding eens op. Dan kom je er wel uit.
Op php.net staan ook genoeg voorbeeldjes

verder kan je dit natuurlijk prima zelf oplossen. Een beetje debuggen laat al heel gauw zien wat de oorzaak is.
gebruik hier en daar eens een print_r($var) in je script om te kijken of de variablen ook echt de data bevatten die jij denkt dat ze bevatten.

[ Voor 37% gewijzigd door BasieP op 10-07-2007 13:15 ]

This message was sent on 100% recyclable electrons.


  • Marcj
  • Registratie: November 2000
  • Laatst online: 16:59
Daarnaast gebruik je een aantal variabelen meerdere keren, hierdoor wordt de buitenste loop waarschijnlijk maximaal 1x uitgevoerd (zoals hij er nu staat misschien wel vaker, maar met verkeerde data). Op regel 33 en 34 overschijf je de data van regel 14 en 15. ;)

Begin maar eens met de volgende dingen door te lezen:

Hoe variabelen te gebruiken.
Hoe werkt een while-loop etc...

En daarna maar eens de documentatie van mysql_fetch_array nog eens goed doorlezen

[ Voor 42% gewijzigd door Marcj op 10-07-2007 13:21 ]


  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
BasieP schreef op dinsdag 10 juli 2007 @ 13:13:
je code kan je beter in dit topic plaatsen tussen [ code=php][/code ] tags

ontopic:
mysql_fetch_array werkt iets anders dan jij denkt.
zoek de handleiding eens op. Dan kom je er wel uit.
Op php.net staan ook genoeg voorbeeldjes
Zelf heb ik geleerd dat je met while loop & mysql_fetch_array meerde resultaten(rijen) echo'd uit tabel

- edit:
Code erbij gezet

[ Voor 116% gewijzigd door Mud op 10-07-2007 13:19 ]


  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
Marcj schreef op dinsdag 10 juli 2007 @ 13:15:
Daarnaast gebruik je een aantal variabelen meerdere keren, hierdoor wordt de buitenste loop waarschijnlijk maximaal 1x uitgevoerd (zoals hij er nu staat misschien wel vaker, maar met verkeerde data). Op regel 33 en 34 overschijf je de data van regel 14 en 15. ;)
Zal ik eens proberen!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
Mud schreef op dinsdag 10 juli 2007 @ 13:16:

Zelf heb ik geleerd dat je met while loop & mysql_fetch_array meerde resultaten(rijen) echo'd uit tabel
nou dat heb je mooi fout geleerd.

mysql_fetch_array echot niks. lees die handleiding nou maar. Daar heb je echt veel meer aan.

This message was sent on 100% recyclable electrons.


  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
BasieP schreef op dinsdag 10 juli 2007 @ 13:18:
[...]

nou dat heb je mooi fout geleerd.

mysql_fetch_array echot niks. lees die handleiding nou maar. Daar heb je echt veel meer aan.
while($data = mysql_fetch_array($query)) {
echo $data['namen'];
}
Zo is mij geleerd om vb meerdere namen(resultaten) onder elkaar te laten echo'n

  • Marcj
  • Registratie: November 2000
  • Laatst online: 16:59
Standaard doe je iets als:

PHP:
1
2
3
4
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
  echo $row['naam']; // of zoiets
}


Maar als ik jou was zou ik eerst wat verdiepen in de basis-syntax van php, zoals de linkjes die ik boven geef ;)

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
Inmiddels is het duidelijk mysql_fetch_array een array terug geeft en mysql_fetch_object een object ;)

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
Marcj schreef op dinsdag 10 juli 2007 @ 13:26:


PHP:
1
2
3
4
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
  echo $row['naam']; // of zoiets
}
Deze code werkt wel :? inclusief de 2e loop, raar. Ik zal even me oude code terug kijken toen ik probeerde 2 while loops te gebruiken ;)

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
even over je naamgeving:
je var $sql is goed
je var $query is niet goed. een query is namelijk geschreven in $sql. wat uit de functie mysql_query() komt is een resultset. meestal wordt $res of $result gebruikt daarbij.
$rows heb je praktisch nooit nodig, aangezien je while gebruikt, en geen for loop.
$data is niet data, maar 1 ROW (daar ga je qua code ook de mist in) het is wel een array/object maar dan wel van 1 row. $row is dus de logische naam

This message was sent on 100% recyclable electrons.


  • Marcj
  • Registratie: November 2000
  • Laatst online: 16:59
Mud schreef op dinsdag 10 juli 2007 @ 13:40:
[...]

Deze code werkt wel :? inclusief de 2e loop, raar. Ik zal even me oude code terug kijken toen ik probeerde 2 while loops te gebruiken ;)
Pas je wel op dat je verschillende variabelen gebruik in de 2e loop? Want anders ga je alsnog de mist in. Dus iets als:

PHP:
1
2
3
4
5
6
7
8
9
10
<?php 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result)) { 
  $otherquery = "SELECT * FROM xxx WHERE x = " . $row['naam'];
  $result = mysql_query($otherquery);
  while($row = mysql_fetch_array($result)) {
    echo $row['test'];
  }
}
?>


Gaat natuurlijk niet werken (zoals je nu hoop ik ook zelf in zal zien). Hiervoor moet je dus de binnenste variabellen anders noemen:

PHP:
1
2
3
4
5
6
7
8
9
10
<?php 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result)) { 
  $otherquery = "SELECT * FROM xxx WHERE x = " . $row['naam'];
  $result2 = mysql_query($otherquery);
  while($row2 = mysql_fetch_array($result2)) {
    echo $row2['test'];
  }
}
?>


Of iets zinvollere namen 8)7

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
BasieP schreef op dinsdag 10 juli 2007 @ 13:48:
even over je naamgeving:
je var $sql is goed
je var $query is niet goed. een query is namelijk geschreven in $sql. wat uit de functie mysql_query() komt is een resultset. meestal wordt $res of $result gebruikt daarbij.
$rows heb je praktisch nooit nodig, aangezien je while gebruikt, en geen for loop.
$data is niet data, maar 1 ROW (daar ga je qua code ook de mist in) het is wel een array/object maar dan wel van 1 row. $row is dus de logische naam
Bedankt voor de heldere uitleg! :)

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 30-11 22:52
Marcj schreef op dinsdag 10 juli 2007 @ 13:55:
[...]

Pas je wel op dat je verschillende variabelen gebruik in de 2e loop? Want anders ga je alsnog de mist in.
Dat heb ik nu wel toegepast :)
Pagina: 1