[PHP] while lus laten nummeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

ik wilde een while lus laten nummeren. Dit moest wel ivm linkverwijzigen naar de juiste pagina.
Het ging om een thumbnail pagina, en het werd gesorteerd per categorie. Ik heb een hele lijst thumbnails in de mysqltabel, en als hij dan wordt uitgeroepen in mysql op sortering van een categorie krijg ik als resultaat ($result) 7 thumbnails.
Dan zette ik hem in een while lus, gaat prima. Maar als ik een thumbnail (moet wel alle 7 gelinkt worden) wil linken naar een pagina, zodat de plaatje groot wordt.
Dit moest wel om de while lus laten nummeren, ik heb de nummers nog even in de naam gedaan, als het goed is zet hem in dan in de link (<a href bl@@t).
Ik dacht eerst even dat ik de for(); functie ging gebruiken, helaas is dat niet helemaal goed. Het laat wel nummeren maar het nummert ALLES per thumbnail.
Ik krijg dus zo van:
thumbnail1 (naam) 1234567
thumbnail2 (naam) 1234567 etc...

Dat wilde ik dus juist niet maar zo:
thumbnail1 (naam) 1
thumbnail2 (naam) 2
Met id echo-en gaat niet, omdat ze allemaal willekeurig zijn geselecteerd.
Dit was mijn script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
                while($obj = mysql_fetch_object($select)){

                  for($i = 1; $i <= $result; $i++){

?>

<td>
<center>[img]"<?[/img]bestand; ?>" width="50" height="50"><br>
<? echo $obj->naam; ?><? echo $i; ?></center>
</td>

<?

                  }

                }
?>

Hoe kan ik in de for functie 'laten zeggen' dat er maar max 1 nummer per thumbnail weergegeven mag worden.

Alvast bedankt!
smsduim.

[ Voor 13% gewijzigd door Verwijderd op 22-10-2004 09:45 ]


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Ik snap echt erg weinig van je hele post. Heb je hem zelf wel een keertje na gelezen? Wat is $result bijvoorbeeld? en op wat voor manier denk je dat dit uberhaupt gelinkt is aan $obj? En vindt je het zelf niet vreemd dat, waneer je binnen het ophalen van 1 resultaat uit je resultset, een lus zet deze dus voor elk resultaat afgedraait wordt?

Daarnaast moet het strategisch plaatsen van een $i=0 en een $i=$i+1 en een echo $i toch genoeg zijn?

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!

Verwijderd

Topicstarter
Okee, ik leg het even wat duidelijker uit...
De thumbnails worden gesorteerd in de mysql-tabel op nummer van de categorie, dit gaat zo:

$query = "SELECT * FROM thumb WHERE categorie = '" . addslashes($_GET['categorie']) . "'";
$select = mysql_query($query);
$result = mysql_num_rows($select);

Het wordt dan gelinkt zo:
<a href="index.php?pag=<? echo $i; ?>">*click*</a>
Het moet dan op nummer gesorteerd worden zeg maar dan komt hij op de juiste pagina.
Wat jij net zei over $i=$i+1 dat dacht ik er ook over ik deed het zo (van PHP.net):
PHP:
1
for ($i = 0; $i = $i + 1, $i <= $result5; print $i);

Maar dit gaat precies hetzelfde als:
PHP:
1
for($i = 1; $i <= $result; $i++){}


Hopelijk ben ik wat duidelijker...

[ Voor 24% gewijzigd door Verwijderd op 22-10-2004 10:04 ]


Acties:
  • 0 Henk 'm!

  • UltraSub
  • Registratie: Mei 2003
  • Laatst online: 01-09 22:45
Dit werkt gewoon hoor:

code:
1
for($i = 1; $i <= $result; $i++)


Heb je de waarde van result wel eens gechecked?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jazeker de $result = 7...
Maar wat jij net zei, ja dat heb ik ook net gedaan in de starttopic.
Ik krijg PER thumb zo 1234567
Dat moet echt niet...

Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Natuurlijk krijg je dat per thumb. De BUITENSTE while gaat elke thumb bij langs. Voor elke thumb gaat de BINNESTE for van 1 tot 7 tellen. Je wilt elke thumb los, verwerk hem dan ook 1 keer. Die binnenste lus is nergens voor nodig. Probeer gewoon eens op papier het algoritme uit te werken en stapje voor stapje door te lopen. Probeer je code te begrijpen ipv maar wat los heen en weer te plakken van voorbeeldjes. Flikker die for er uit en kijk eens waar je die drie dingen moet plaatsen om het grewenste resultaat te krijgen.

[ Voor 10% gewijzigd door Janoz op 22-10-2004 10:16 ]

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!

Verwijderd

Topicstarter
GOT IT!
Dit is gelukt met ff experimenteren met t script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
                while($obj = mysql_fetch_object($select)){

                  for ($i = 1 + $i; $i <= $i + 1, $i <= ($result5 - $result5); $i++){
                  }

?>

<td>
<center>[img]"<?[/img]bestand; ?>" width="50" height="50"><br>
<? echo $obj->naam; ?><? echo $i; ?></center>
</td>

<?

                }
?>

Dit werkt prima :)!

[ Voor 18% gewijzigd door Verwijderd op 22-10-2004 10:19 ]


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 13:28

momania

iPhone 30! Bam!

Waarom zou je uberhaupt zelf willen nummeren als je het straks voor een link nodig hebt :?

Je zal toch wel in je database een id ook bijhouden, die zal je dan ook nodig hebben als link denk ik.

[edit]
Verwijderd schreef op 22 oktober 2004 @ 10:19:
GOT IT!
Dit is gelukt met ff experimenteren met t script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
                while($obj = mysql_fetch_object($select)){

                  for ($i = 1 + $i; $i <= $i + 1, $i <= ($result5 - $result5); $i++){
                  }

?>

<td>
<center><img src="<? echo $obj->bestand; ?>" width="50" height="50"><br>
<? echo $obj->naam; ?><? echo $i; ?></center>
</td>

<?

                }
?>

Dit werkt prima :)!
:X

waarom doe je niet gewoon simpel
code:
1
2
3
4
5
$i = 0;
while (bla) {
   $i++;
    echo $i;
}


:?

[ Voor 64% gewijzigd door momania op 22-10-2004 10:24 ]

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee dat lukt niet, want in de grote plaatjes worden alles gosorteerd op naam ASC, en dus al die nummers gaan door elkaar.
En trouwens ik heb ook een admin waar je plaatjes kan verwijderen, als ik het bijhoud en eentje wordt verwijderd dan loopt alles in de soep...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
momania schreef op 22 oktober 2004 @ 10:20:
Waarom zou je uberhaupt zelf willen nummeren als je het straks voor een link nodig hebt :?

Je zal toch wel in je database een id ook bijhouden, die zal je dan ook nodig hebben als link denk ik.

[edit]


[...]

:X

waarom doe je niet gewoon simpel
code:
1
2
3
4
5
$i = 0;
while (bla) {
   $i++;
    echo $i;
}


:?
Dat is beter :X

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 13:28

momania

iPhone 30! Bam!

Verwijderd schreef op 22 oktober 2004 @ 10:24:
Nee dat lukt niet, want in de grote plaatjes worden alles gosorteerd op naam ASC, en dus al die nummers gaan door elkaar.
En trouwens ik heb ook een admin waar je plaatjes kan verwijderen, als ik het bijhoud en eentje wordt verwijderd dan loopt alles in de soep...
Sortering heeft er helemaal niks mee te maken. Ieder record heeft toch z'n eigen id, dus dat is ook het id wat je verder kan gebruiken om dit record weer terug te vinden. Dat moet je juist niet in je code willen gaan 'genereren'.

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Volgens mij raak je met die code behoorlijk snel de weg kwijt... Waarom voldoet zoiets niet:
PHP:
1
2
3
4
5
6
7
8
$i = 0;
while($obj ...)
{
    $i++;

// je <td> enzo
    echo $i;
}


En zoals momania zegt, heeft je database-record geen id erbij? Zonee, waarom niet? :)

[edit]
Vervelende momania is me weer voor :P

[ Voor 9% gewijzigd door ACM op 22-10-2004 10:27 ]


Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Lol, humor, die stuur ik in bij http://thedailywtf.com/
PHP:
1
2
for ($i = 1 + $i; $i <= $i + 1, $i <= ($result5 - $result5); $i++){ 
                  }


Je raakt elke keer weer super in de problemen wanneer je om iets werkends te krijgen gewoon random dingen gaat veranderen.
- je bent elke keer onwijs lang bezig
- je krijg super veel domme bugs die pas later opduiken
- je programma's worden lelijk, traag en niet meer aanpasbaar
- je staat elke keer voor aap als je iets vraagt 8)7

[ Voor 52% gewijzigd door Macros op 22-10-2004 10:33 ]

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:39
Hij is erg sterk ja:
PHP:
1
2
for ($i = 1 + $i; $i <= $i + 1, $i <= ($result5 - $result5); $i++){ 
}


$i = 1; en je gaat door totdat $i <= ($result5 - $result5)...
Hoe vaak zou dat zijn?! 8)7 ($result5 - $result5 lijkt me altijd 0 te zijn?)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
En in de volgende while-iteratie is $i 2, die daarna 3 etc :P

[ Voor 4% gewijzigd door ACM op 22-10-2004 10:43 ]


Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Volgens mij 'compiled' dat niet, want je mag toch niet meerdere expressions in de condition field van for hebben, wel in het init en increment field. Want hoe moet php nu weten welke condition hij moet nemen? En voert hij die 2de conditie nog wel uit dan?
Ook hoog je nu $i op in het condition en increment field(, en ook in het init field, maar die wordt maar 1 keer geexecute.)

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Macros schreef op 22 oktober 2004 @ 10:46:
Volgens mij 'compiled' dat niet, want je mag toch niet meerdere expressions in de condition field van for hebben, wel in het init en increment field. Want hoe moet php nu weten welke condition hij moet nemen? En voert hij die 2de conditie nog wel uit dan?
Ook hoog je nu $i op in het condition en increment field(, en ook in het init field, maar die wordt maar 1 keer geexecute.)
Waarschijnlijk wel. $i = $i + 1 wordt over het algemeen gewoon als true gezien, behalve als $i de waarde -1 had (dacht ik).

En ik denk dat als je meerdere statements hebt, dat die dan allen true moeten zijn om de lus verder te laten lopen.

[ Voor 10% gewijzigd door Michali op 22-10-2004 10:50 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Er staat $i <= $i + 1, dat is wel altijd waar, maar hoe wordt dat gecombineerd met $i <= ($result5 - $result5), waarschijnlijk dubbelt die , voor een &&.

Je was me net voor :)

[ Voor 13% gewijzigd door Macros op 22-10-2004 10:51 ]

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Macros schreef op 22 oktober 2004 @ 10:46:
Volgens mij 'compiled' dat niet, want je mag toch niet meerdere expressions in de condition field van for hebben, wel in het init en increment field. Want hoe moet php nu weten welke condition hij moet nemen? En voert hij die 2de conditie nog wel uit dan?
Ook hoog je nu $i op in het condition en increment field(, en ook in het init field, maar die wordt maar 1 keer geexecute.)
Volgens mij "and" ie de meerdere items in het condition-veld. Iig is het juist de grap in dit geval dat het increment-field gewoon niet wordt uitgevoerd (door die $i < 0) en alleen de increment uit het init-field elke while-iteratie maar 1x ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Macros schreef op 22 oktober 2004 @ 10:28:
Lol, humor, die stuur ik in bij http://thedailywtf.com/
PHP:
1
2
for ($i = 1 + $i; $i <= $i + 1, $i <= ($result5 - $result5); $i++){ 
                  }


Je raakt elke keer weer super in de problemen wanneer je om iets werkends te krijgen gewoon random dingen gaat veranderen.
- je bent elke keer onwijs lang bezig
- je krijg super veel domme bugs die pas later opduiken
- je programma's worden lelijk, traag en niet meer aanpasbaar
- je staat elke keer voor aap als je iets vraagt 8)7
ach ik leer van de fouten :P
over die $result5 - $result5, tja het grappige is dat hij gewoon werkt :P

[ Voor 7% gewijzigd door Verwijderd op 22-10-2004 11:24 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
't Enige wat echt uitgevoerd wordt is de $i = 1 + $i ... Die $result5 - $result5 kan je ook door "0" vervangen. Sterker nog, de hele for-loop kan je dus door $i++ vervangen.

Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:39
Of nog mooier: een ++$i in z'n echo opnemen; vind 't in ieder geval mooi staaltje van je code onleesbaar, en zo jezelf onmisbaar in een bedrijf maken :)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:39
Ik heb 'm nog even zitten uitproberen hier.

PHP:
1
2
for ($i = 1 + $i; $i <= $i + 1, $i <= ($result5 - $result5); $i++){ 
}

$i = 1+$i
zorgt voor de ophoging met 1

$i <= $i+1
zou altijd doorgaan...

,
wordt blijkbaar geïnterpreteerd als &&, waardoor...

$i <= ($result5 - $result5)
altijd onwaar is en de functie nooit verder uitgevoerd wordt;

$i++
waardoor deze altijd overgeslagen wordt, gelukkig maar want we hadden $i al met 1 opgehoogd...

Had het zelf niet kunnen verzinnen. Op zo'n manier heb je geen dotfusicator meer nodig :)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack

Pagina: 1