Ik ben in alle tijd dat bezig ben geweest met programmeren (hoewel dat nog niet zo lang is, maar goed) nog nooit in een situatie geweest waarin ik een do while lus moest gebruiken. Tot voor kort echter, waar ik voor een probleem hierbij als enige oplossing uit kwam. Sommige mensen schijnen dit een slechte contructie te vinden en ik vraag me dan ook eigenlijk af of die mensen dan wat beters weten te verzinnen. Daar ben ik wel beniewd naar eigenlijk. Waarschijnlijk is de hele contructie uitgevonden voor dit soort problemen dus zal het wel niet anders kunnen, maar ik ben toch wel benieuwd.
Het probleem was dat ik voor een nieuwsbrief een unieke hash wilde genereren zodat mensen via deze hash zich kunnen uitschrijven voor de nieuws brief (met een linkje dan). Ik heb gekozen voor de bekende md5 hash die ik maak van de huidige timestamp. Er zijn in totaal 36^32 verschillende hashes mogelijk als ik me niet vergis en dat moet eigenlijk wel kunnen geganderen dat de hash die gegenereerd wordt uniek is, maar daar wil ik toch niet vanuit gaan, je weet maar nooit. Dus controleer ik of de hash al aanwezig is in de database. Is dit zo, dan wordt de hash weer opnieuw gegenereerd en gechecked totdat ik een unieke hash heb.
Het leek mij hierbij de enige oplossing om een do {} while() contructie te gebruiken, mischien kan het ook wel op een hele andere manier, daar ben ik ook wel benieuwd naar.
Het probleem was dat ik voor een nieuwsbrief een unieke hash wilde genereren zodat mensen via deze hash zich kunnen uitschrijven voor de nieuws brief (met een linkje dan). Ik heb gekozen voor de bekende md5 hash die ik maak van de huidige timestamp. Er zijn in totaal 36^32 verschillende hashes mogelijk als ik me niet vergis en dat moet eigenlijk wel kunnen geganderen dat de hash die gegenereerd wordt uniek is, maar daar wil ik toch niet vanuit gaan, je weet maar nooit. Dus controleer ik of de hash al aanwezig is in de database. Is dit zo, dan wordt de hash weer opnieuw gegenereerd en gechecked totdat ik een unieke hash heb.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| $attempt = 0; do { $rndkey = md5(time() + $attempt++); $query = " SELECT `id` FROM `email` WHERE `rndkey`='" . $rndkey . "' "; $result = mysql_query($query) or die(mysql_error()); } while ( mysql_num_rows($result) >= 1 ); |
Het leek mij hierbij de enige oplossing om een do {} while() contructie te gebruiken, mischien kan het ook wel op een hele andere manier, daar ben ik ook wel benieuwd naar.