[php] While loop geeft max 2 resultaten

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey mensen,

Ik heb het volgende probleem.
Ik Heb een database connectie en vraag in mn code daar alle resultaten van een klant te geven. De klant selecteer je door op een andere pagina aan te geven van wie je de resultaten wilt zien.
Nu heb ik de volgende code:

code:
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
$klwk = "SELECT * FROM klantwk WHERE klant = '$klant'";
$res = mysql_query ($klwk);
$row = mysql_fetch_array($res);

//blabla blabla

if ("$row[ma]" == "" && "$row[di]" == "" && "$row[wo]" == "" && "$row[do]" == "" )
{
echo "<table border=\"1\"><tr><td width=\"500\">Geen data geselecteerd! 
<br><a href=\"communicatie.php\">Terug</a></td></tr></table>";
}
else
{  
while ($row = mysql_fetch_object($res)) 
   {
echo "<table border=\"1\">
    <tr>
    <td width=\"100\"></td>
    <td width=\"75\">$row->wk</td>
    <td width=\"75\">$row->ma</td>
    <td width=\"75\">$row->di</td>
    <td width=\"75\">$row->wo</td>
    <td width=\"75\">$row->do</td>
    
  </tr>    
</table>";
}
echo "<br><br><a href=\"communicatie.php\">Terug</a>";
}
?>


Het probleem is dat ie maar max 2 resultaten weer geeft.
Heb al veel gezocht maar kan het probleem niet vinden. :?

Wie weet waar het fout gaat.

Bettings

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

je gebruikt $row = mysql_fetch_array($res); en $row = mysql_fetch_object($res) en die noem je allebei $row. Als je een van beiden nu eens een andere naam geeft wat gebeurt er dan? En je moet er natuurlijk zeker van zijn dat er meer dan twee resultaten zouden moeten zijn!

[ Voor 21% gewijzigd door TwoR op 16-07-2004 10:11 ]


Acties:
  • 0 Henk 'm!

  • Jacco Swart
  • Registratie: Mei 2003
  • Laatst online: 20-09 07:05
Hoe ziet de DB eruit? (Met andere woorden zit er wel meer dan 2 tupels in de tabel? >:) )

www.ya-calendar.com - Gratis online agenda


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu van

code:
1
while ($row = mysql_fetch_object($res))

gemaakt
code:
1
2
3
while ($row = mysql_fetch_array($res)) 
//bla bla
<td width=\"75\">$row[wk]</td>


maar het resultaat is hetzelfde..

Voor een klant waarvan ik zeker weet dat er 4 tupels in de tabel zitten geeft hij als resultaat max 2 resultaten.

De tabel is als volgt

klant
wk
ma
di
wo
do

En ik haal alles op uit de tabel ==>

code:
1
2
3
$klwk = "SELECT * FROM klantwk WHERE klant = '$klant'";
$res = mysql_query ($klwk);
$row = mysql_fetch_array($res);

[ Voor 8% gewijzigd door Verwijderd op 16-07-2004 10:34 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

PHP:
1
if ("$row[ma]" == "" && "$row[di]" == "" && "$row[wo]" == "" && "$row[do]" == "" )
Dit is ook wel vreemd, die quotes om de $row[]'s, volgens mij horen die daar niet.

Je kunt wellicht ook beter iets doen als volgt (zoals al gezegd):

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
$klwk = "SELECT wk, ma, di, wo, do FROM klantwk WHERE klant = '$klant'";
$res = mysql_query ($klwk);
$row = mysql_fetch_array($res);

if ($row[ma] == "" && $row[di] == "" && $row[wo] == "" && $row[do] == "" )
{
echo "<table border=\"1\"><tr><td width=\"500\">Geen data geselecteerd! 
<br><a href=\"communicatie.php\">Terug</a></td></tr></table>";
}
else
{  
while ($data = mysql_fetch_object($res)) 
   {
echo "<table border=\"1\">
    <tr>
    <td width=\"100\"></td>
    <td width=\"75\">$data->wk</td>
    <td width=\"75\">$data->ma</td>
    <td width=\"75\">$data->di</td>
    <td width=\"75\">$data->wo</td>
    <td width=\"75\">$data->do</td>
    
  </tr>    
</table>";
}
echo "<br><br><a href=\"communicatie.php\">Terug</a>";
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is nu zo dat ie alleen het eerste resultaat niet weer geeft.

Zet je meer resultaten in de DB dan geeft ie alleen de eerste niet weer.

Rarara hoe kan dat?

Dat met die quotes om die code met if($row[ma] bla bla geeft een error maar dnek ook niet dat daar het probleem zit

[ Voor 27% gewijzigd door Verwijderd op 16-07-2004 10:43 ]


Acties:
  • 0 Henk 'm!

  • AquilaDus
  • Registratie: Januari 2004
  • Laatst online: 25-01-2019
Is het niet een beetje vreemd dat je de table sluit in elke iteratie van de whileloop?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zo werkt t ook niet
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo "<table border=\"1\">";
while ($row = mysql_fetch_array($res)) 
   {
echo "<tr>
    <td width=\"100\"></td>
    <td width=\"75\">$row[wk]</td>
    <td width=\"75\">$row[ma]</td>
    <td width=\"75\">$row[di]</td>
    <td width=\"75\">$row[wo]</td>
    <td width=\"75\">$row[do]</td>
    
  </tr>";    

}
echo "</table>";

geeft nog steeds het eerste resultaat niet

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Ik geloof dat het te maken heeft met de positie van de pointer in $res. Zet die eens naar het begin voor je begint aan de while-loop.

Edit: of in $row, dat is waarschijnlijker, want dat is een array :)

[ Voor 22% gewijzigd door X-Lars op 16-07-2004 10:51 ]


Acties:
  • 0 Henk 'm!

  • Jacco Swart
  • Registratie: Mei 2003
  • Laatst online: 20-09 07:05
weet niet of het werkt bij dit maar als je nu eens het volgende toevoegd onderaan:

echo "<pre>";
print_r($res);
echo "</pre>";

dan geeft hij keurig weer wat er in het array zit. Zit er dan wel het eerste resultaat in?

[ Voor 22% gewijzigd door Jacco Swart op 16-07-2004 10:52 ]

www.ya-calendar.com - Gratis online agenda


Acties:
  • 0 Henk 'm!

  • Jacco Swart
  • Registratie: Mei 2003
  • Laatst online: 20-09 07:05
oeps verkeerde knopje

[ Voor 93% gewijzigd door Jacco Swart op 16-07-2004 10:51 ]

www.ya-calendar.com - Gratis online agenda


Acties:
  • 0 Henk 'm!

  • Jacco Swart
  • Registratie: Mei 2003
  • Laatst online: 20-09 07:05
------- :'( :'(

[ Voor 98% gewijzigd door Jacco Swart op 16-07-2004 10:52 ]

www.ya-calendar.com - Gratis online agenda


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bij de code
echo "<pre>";
print_r($res);
echo "</pre>";
geeft hij als resultaat:

Resource id #3

Dit doet hij ook als een klant maar 2 tupels in de tabel heeft staan
dus denk dat het niet werkt

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

X-Lars schreef op 16 juli 2004 @ 10:49:
Edit: of in $row, dat is waarschijnlijker, want dat is een array :)
Dat is dus wat ik ook zei maar volgens mij heeft de TS dat nog niet geprobeerd.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Jacco Swart schreef op 16 juli 2004 @ 10:50:
weet niet of het werkt bij dit maar als je nu eens het volgende toevoegd onderaan:

echo "<pre>";
print_r($res);
echo "</pre>";

dan geeft hij keurig weer wat er in het array zit. Zit er dan wel het eerste resultaat in?
$res is geen array, maar een resultset :)

[ Voor 7% gewijzigd door X-Lars op 16-07-2004 11:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Kom nou mensen... een basic database loopje... dit hoeft toch geen problemen te vormen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$res = mysql_query("SELECT * FROM klantwk WHERE klant = '$klant' ORDER BY wk ASC");
if (mysql_num_rows($res)) {
  echo "<table>";
  while ($row = mysql_fetch_array($res)) {
    echo "<tr><td>$row[wk]</td>";
    if ($row["ma"] || $row["di"] || $row["wo"] || $row["do"]) {
      echo "<td>$row[ma]</td><td>$row[di]</td>";
      echo "<td>$row[wo]</td><td>$row[do]</td>";    
    } else {
      echo "<td colspan='4'>Niets gevonden voor deze week</td>";
    }
    echo "</tr>";
  }
  echo "</table>";
} else {
  echo "Geen rijen gevonden";
}


Als ik de bedoeling van de TS goed begrepen heb.

[ Voor 95% gewijzigd door Verwijderd op 16-07-2004 11:31 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

*iets doms*

En daarnaast is het veel leuker als de TS er zelf uitkomt :)

[ Voor 34% gewijzigd door X-Lars op 16-07-2004 11:35 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is me inderdaad gelukt Heb het script als volgt:
code:
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
$klwk = "SELECT wk,ma,di,wo,do FROM klantwk WHERE klant = '$klant' ORDER BY wk ASC";
$klwk2 = "SELECT ma,di,wo,do FROM klantwk WHERE klant = '$klant'";
$res = mysql_query ($klwk);
$res2 = mysql_query ($klwk2);  
$tab = mysql_fetch_array($res2);

if ("$tab[ma]" == "" && "$tab[di]" == "" && "$tab[wo]" == "" && "$tab[do]" == "" )
{
echo "<table border=\"1\"><tr><td width=\"530\">Geen data geselecteerd! <br></td></tr></table>
<a href=\"communicatie.php\">Terug</a>";
}
else
{ 
echo "<table border=\"1\">";

while ($row = mysql_fetch_array($res)) 
   {
echo "<tr>
    <td width=\"100\"></td>
    <td width=\"75\">$row[wk]</td>
    <td width=\"75\">$row[ma]</td>
    <td width=\"75\">$row[di]</td>
    <td width=\"75\">$row[wo]</td>
    <td width=\"100\">$row[do]</td>
    
  </tr>";    

}


maar dis niet zo mooi als het script wat OneofBorg gaf

tnx voor de reacties.

_/-\o_

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Gebruik toch die van OneofBorg maar (nofi), want dit is wel heel erg inefficiënt.

[ Voor 4% gewijzigd door X-Lars op 16-07-2004 11:53 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 16 juli 2004 @ 11:47:
PHP:
1
if ("$tab[ma]" == "" && "$tab[di]" == "" && "$tab[wo]" == "" && "$tab[do]" == "" )
Iemand heeft je er in dit topic al eerder op gewezen, maar je lijkt het niet nodig te vinden dit te veranderen. Variabelen horen niet tussen quotes als ze niet in een grotere string staan, en bovendien moeten indexes van een array juist wel weer tussen quotes. Dat dit bij jou geen errors oplevert komt alleen maar omdat je niet dit boven je code hebt staan:
PHP:
1
error_reporting(E_ALL);

Maak van die regel dus liever netjes dit:
PHP:
1
if ($tab["ma"] == "" && $tab["di"] == "" && $tab["wo"] == "" && $tab["do"] == "" )

Of nog beter:
PHP:
1
if (empty($tab["ma"]) && empty($tab["di"]) && empty($tab["wo"]) && empty($tab["do"]))
X-Lars schreef op 16 juli 2004 @ 11:53:
Gebruik toch die van OneofBorg maar (nofi), want dit is wel heel erg inefficiënt.
OneofBorg laat ook 2 kleine steekjes vallen. :) Ten eerste dus dat de indexen van de arrays niet tussen quotes staan, bijvoorbeeld op regel 7.

En mysql_num_rows() (regel 2) returnt feitelijk (bijna) nooit false, dus is het fout om dit te gebruiken. Ik zelf had gekozen voor deze regel:
PHP:
1
if ((mysql_num_rows($res) === false) || (mysql_num_rows($res) === 0)) {

[ Voor 49% gewijzigd door NMe op 16-07-2004 12:03 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

NMe84 schreef op 16 juli 2004 @ 11:56:
[...]
En mysql_num_rows() (regel 2) returnt feitelijk (bijna) nooit false, dus is het fout om dit te gebruiken. Ik zelf had gekozen voor deze regel:
PHP:
1
if ((mysql_num_rows($res) === false) || (mysql_num_rows($res) === 0)) {
In een conditional statement vind ik het niet fout hoor, 0 evalueert immers gewoon naar false...

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

NMe84, nee hoor.

Als je al in een string zit, hoef je geen quotes meer te gebruiken om je associatieve array te indexeren.

PHP:
1
2
3
$boe["schrik"] = "Aaaah!";

echo "Je riep $boe[schrik], schijterd!";


Dit is gewoon ondersteunde syntax, en levert geen fouten op, ook niet met error reporting aan.

In mijn string was het dus terecht gebruik. Bovendien is de originele code van Bettings, :-

PHP:
1
"$row[ma]" == ""


Dus niet erg logisch, maar ook niet fout. Dit werkt gewoon zoals het zou moeten werken.

Voor de geïnteresseerden, multidimensionale arrays kun je op deze manier niet in een string gebruiken. Het volgende :-

PHP:
1
echo "Je bent een $jij[karakter][beschrijving]!";


werkt bijvoorbeeld niet.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 16 juli 2004 @ 12:44:
NMe84, nee hoor.

Als je al in een string zit, hoef je geen quotes meer te gebruiken om je associatieve array te indexeren.

PHP:
1
2
3
$boe["schrik"] = "Aaaah!";

echo "Je riep $boe[schrik], schijterd!";


Dit is gewoon ondersteunde syntax, en levert geen fouten op, ook niet met error reporting aan.
Ik weet zeker dat dit in vroegere versies (iig in 4.3.1) wel degelijk een warning opleverde, en waarschijnlijk zal dit in PHP5 ook wel een warning opleveren:
PHP:
1
2
3
4
5
6
7
8
9
<?php

error_reporting(E_STRICT);

$boe['schrik'] = 'Aaaah!'; 

echo "Je riep $boe[schrik], schijterd!";

?>

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Aangezien een andere thread die op dit onderwerp leek over te stappen gesloten is, wil ik deze even nieuw leven inblazen.

Ik heb 't zelf even getest, en bij mij doettie dat dus niet.


Exhibit A:
PHP:
1
2
3
4
5
  error_reporting(E_ALL);

  $zaad["banaan"] = "vies";

  echo "Wat is dat $zaad[banaan]!";


Levert in 4.3.4 nog niet het minste notice'je op.
Verwijderd schreef op 25 juli 2004 @ 21:00:
Oftewel: in PHP4 is het ondersteunde syntax, in PHP5 toegestane syntax, en ik gebruikt het want ik vind het er zo een stuk overzichtelijker uitzien dan met een kwak aanhalingstekens erdoor verweven.

[ Voor 10% gewijzigd door Verwijderd op 26-07-2004 09:16 ]


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Verwijderd schreef op 16 juli 2004 @ 12:44:
...

PHP:
1
echo "Je bent een $jij[karakter][beschrijving]!";


werkt bijvoorbeeld niet.
Weer een reden om de { en } te gebruiken ;)
PHP:
1
2
3
4
<?
$jij[karakter][beschrijving] = 'zenuwpees';
echo "Je bent een {$jij[karakter][beschrijving]}!";
?>
Werkt dus weer wel

[ Voor 19% gewijzigd door RwD op 26-07-2004 09:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

RwD schreef op 26 juli 2004 @ 09:58:
[...]
Weer een reden om de { en } te gebruiken ;)
PHP:
1
2
3
4
<?
$jij[karakter][beschrijving] = 'zenuwpees';
echo "Je bent een {$jij[karakter][beschrijving]}!";
?>
Werkt dus weer wel
Ah, dat zou kunnen ja. En

PHP:
1
  echo "Ben je echt een {$jij[karakter]}[beschrijving]?";


... zou dat werken?

Overigens heb je natuurlijk gezondigd tegen de aanhalingstekens bij de assignment. Maar ik zal 't je vergeven want je heb waarschijnlijk gecopy/paste B).

[ Voor 6% gewijzigd door Verwijderd op 26-07-2004 10:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
<?php
    error_reporting(E_ALL);
    $jij['karakter']['beschrijving'] = "Zenuwpees";
    echo "Jij bent een {$jij[karakter]}[beschrijving]!<br />"; //Output: Jij bent een Array[Beschrijving]
    echo "Jij bent een {$jij[karakter][beschrijving]}!<br />"; //Output: Jij bent een Zenuwpees! (Met notices)
    echo "Jij bent een {$jij['karakter']['beschrijving']}!"; //Output: Jij bent een Zenuwpees!
?>

zonder single quotes krijg je wel mooie notices:
Notice: Use of undefined constant karakter - assumed 'karakter'
Notice: Use of undefined constant beschrijving - assumed 'beschrijving'
Dus het gebruik van single quotes lijkt me wel wat netter :)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Als iedereen nou gewoon voortaan printf zou gebruiken, zouden we deze discussie niet elk halfjaar hoeven houden en hebben we voortaan allemaal leesbare en minder error-prone code.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

En dan constant mn variablen door mekaar gaan halen, en onzinoutput genereren.

Ik weet wel hoe dat gaat hoor als je een beetje moe bent van een bijna voorbije werkdag ;)
Pagina: 1