[PHP] while loop gaat meestal wel, soms niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Ik heb hier een eenvoudig mailingsysteem in PHP. Het systeem kan een mailing versturen volgens een vast template. De gebruiker vult dus een tekst in en voert een aantal afbeeldingen in, en vervolgens kan dit verstuurd worden.

Om afbeeldingen in de mail te zetten maak ik gebruik van een while loop. Deze loop kijkt in de database of er afbeeldingen bestaan met een mailing_id dat gelijk is aan het id van de te versturen mailing. Dit is het stukje code waar het om gaat:
PHP:
1
2
3
4
5
$getAfbeeldingen = mysql_query("SELECT * FROM mailing_afbeelding WHERE mailing_id = ".$id." ORDER BY rangorde ASC") or die (mysql_error());
$afbeelding = "";
while ($afbeelding = mysql_fetch_array($getAfbeeldingen)){
    $afbeeldingen .= "<img src=\"http://www.domein.nl/pix/mailing/".$afbeelding['afbeelding_id'].".".$afbeelding['ext']."\" style=\"margin: 5px;\" />";
}

Zoals je ziet worden de afbeeldingen in de variabele $afbeeldingen gezet zodat ik deze verderop in het template op kan roepen.

Bij de meeste verstuurde mailings gaat dit goed, er zijn echter een aantal ontvangers waarbij er iets vreemds gebeurt. Zij krijgen als er bijvoorbeeld 2 afbeeldingen zijn, deze afbeeldingen 8x herhaald. Ze zien dus 8x dezelfde 2 plaatjes. Ik zou het al minder vreemd vinden als het bij iedere ontvanger gebeurt (want dan heb ik gewoon ergens een fout gemaakt), maar het gebeurt dus maar bij een aantal mensen. :?

Waarschijnlijk doe ik iets doms of zie ik iets heel erg over het hoofd. Ik hoop dat iemand hier mij kan helpen. Mocht er behoefte zijn aan meer code, dan hoor ik dat wel (al ben ik er zelf van overtuigd dat het in dit stukje mis gaat). :)

omniscale.nl


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Ik neem aan dat je $afbeeldingen wel initialiseert vóór de while-loop? ($afbeeldingen = '').
Anders bevat $afbeeldingen nog een waarde/‘oude afbeeldingen’ van een mail daarvoor.

[ Voor 36% gewijzigd door Icelus op 04-08-2006 12:39 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
en weet je zeker dat je database klopt? Dit kun je controleren door even mysql_num_rows($getAfbeeldingen) te printen.

petersmit.eu


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Icelus schreef op vrijdag 04 augustus 2006 @ 12:33:
Ik neem aan dat je $afbeeldingen wel initialiseert vóór de while-loop? ($afbeeldingen = '').
Anders bevat $afbeeldingen nog een waarde/‘oude afbeeldingen’ van een mail daarvoor.
Ik zie nu dat ik dat dus niet deed :x Ik had wel $afbeelding = ""; staan, maar niet $afbeeldingen = ""; Dat heb ik nu aangepast, ik ga zo even proberen of dat de oplossing is.
phsmit schreef op vrijdag 04 augustus 2006 @ 12:36:
en weet je zeker dat je database klopt? Dit kun je controleren door even mysql_num_rows($getAfbeeldingen) te printen.
Ik zal het nog even testen, maar ik neem aan dat het klopt. Anders zou het toch altijd mis moeten gaan?

omniscale.nl


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Snotverjeppie Icelus: het ziet er naar uit dat jij gelijk had. :)

Ik ga me even in een hoekje zitten schamen.

Mods: willen jullie dit topic aub niet op slot gooien? Ik weet namelijk niet 100% zeker of het opgelost is, omdat de momenten waarop het gebeurt nogal onvoorspelbaar zijn.

omniscale.nl


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Alleen topics die niet aan de policy voldoen worden op slot gezet (of in de trashcan gegooid). Er is geen enkele reden om een topic dat gewoon aan de policies voldoet dicht te gooien (ook niet als het initiele probleem al is opgelost)..

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!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Tip: zet aan het begin van je programma (vooral tijdens debuggen):
PHP:
1
error_reporting( E_ERROR | E_WARNING | E_PARSE | E_NOTICE );
De E_NOTICE zorgt er o.a. voor dat je een melding krijgt wanneer variabelen gebruikt worden die niet geïnitialiseerd zijn.

Overigens hoef je $afbeelding niet te initialiseren; deze variabele krijgt aan het begin van de while-lus al een waarde indien er een rij opgehaald kon worden (tenzij je de waarde daarna ook buiten de while-lus gebruikt natuurlijk).

[ Voor 30% gewijzigd door Icelus op 04-08-2006 13:16 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Janoz schreef op vrijdag 04 augustus 2006 @ 13:05:
Alleen topics die niet aan de policy voldoen worden op slot gezet (of in de trashcan gegooid). Er is geen enkele reden om een topic dat gewoon aan de policies voldoet dicht te gooien (ook niet als het initiele probleem al is opgelost)..
Ik weet het, maar het antwoord was in deze zo simpel dat dit topic wellicht valt onder "stomme vraag, volgende keer zelf beter nadenken" :)
Icelus schreef op vrijdag 04 augustus 2006 @ 13:14:
Tip: zet aan het begin van je programma (vooral tijdens debuggen):
PHP:
1
error_reporting( E_ERROR | E_WARNING | E_PARSE | E_NOTICE );
De E_NOTICE zorgt er o.a. voor dat je een melding krijgt wanneer variabelen gebruikt worden die niet geïnitialiseerd zijn.

Overigens hoef je $afbeelding niet te initialiseren; deze variabele krijgt aan het begin van de while-lus al een waarde indien er een rij opgehaald kon worden (tenzij je de waarde daarna ook buiten de while-lus gebruikt natuurlijk).
Bedankt voor de tip :)

[ Voor 39% gewijzigd door posttoast op 04-08-2006 13:33 ]

omniscale.nl


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

posttoast schreef op vrijdag 04 augustus 2006 @ 13:33:
[...]

Ik weet het, maar het antwoord was in deze zo simpel dat dit topic wellicht valt onder "stomme vraag, volgende keer zelf beter nadenken" :)
Ook hele simpele topics, mits redelijk voldaan aan de zaken die we graag zien in een startpost, blijven gewoon open hoor ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Icelus schreef op vrijdag 04 augustus 2006 @ 13:14:
Tip: zet aan het begin van je programma (vooral tijdens debuggen):
PHP:
1
error_reporting( E_ERROR | E_WARNING | E_PARSE | E_NOTICE );
De E_NOTICE zorgt er o.a. voor dat je een melding krijgt wanneer variabelen gebruikt worden die niet geïnitialiseerd zijn.

Overigens hoef je $afbeelding niet te initialiseren; deze variabele krijgt aan het begin van de while-lus al een waarde indien er een rij opgehaald kon worden (tenzij je de waarde daarna ook buiten de while-lus gebruikt natuurlijk).
Of je kiest voor E_ALL :?

Verder lijkt het erop dat omdat je $afbeeldingen niet helemaal leeggemaakt hebt, de fout ook daar zat. Omdat sommigen de afbeeldingen meerdere keren kregen: is het dan mogelijk dat de users verschillende keren dit proces achterelkaar deden/konden doen?

Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Mithras86 schreef op vrijdag 04 augustus 2006 @ 16:25:
[...]

Of je kiest voor E_ALL :?

Verder lijkt het erop dat omdat je $afbeeldingen niet helemaal leeggemaakt hebt, de fout ook daar zat. Omdat sommigen de afbeeldingen meerdere keren kregen: is het dan mogelijk dat de users verschillende keren dit proces achterelkaar deden/konden doen?
Nee, het proces wordt één keer uitgevoerd. Er is één gebruiker van het mailingsysteem, die maakt de mailing aan en verstuurt hem. Vervolgens wordt de mail naar iedereen gestuurd, ook door middel van een while loop. Maar goed, vooralsnog lijkt het te werken, dus ik ben een blije posttoast! ;)

omniscale.nl


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

posttoast schreef op vrijdag 04 augustus 2006 @ 20:53:
Nee, het proces wordt één keer uitgevoerd. Er is één gebruiker van het mailingsysteem, die maakt de mailing aan en verstuurt hem. Vervolgens wordt de mail naar iedereen gestuurd, ook door middel van een while loop. Maar goed, vooralsnog lijkt het te werken, dus ik ben een blije posttoast! ;)
PHP:
1
error_reporting(E_ALL);
E_ALL geeft alle foutmeldingen weer, doet dus precies hetzelfde als wat Icelus postte (zoals dus eerder gezegt was)... Zie ook PHP.net, dus ik snap niet waarom je dat niet (beter) zou kunnen gebruiken? :?

[ Voor 3% gewijzigd door CH4OS op 05-08-2006 15:36 ]


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
GJ-tje schreef op zaterdag 05 augustus 2006 @ 15:18:
[...]

PHP:
1
error_reporting(E_ALL);
E_ALL geeft alle foutmeldingen weer, doet dus precies hetzelfde als wat Icelus postte (zoals dus eerder gezegt was)... Zie ook PHP.net, dus ik snap niet waarom je dat niet (beter) zou kunnen gebruiken? :?
Ehm, ik zeg nergens dat dat niet zo is :?

omniscale.nl


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
posttoast in "[PHP] while loop gaat meestal wel, soms ..."

Je zin begint met "nee" en het lijkt of die nee een antwoord is op "Of je kiest voor E_ALL" :)

March of the Eagles


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Hacku schreef op zaterdag 05 augustus 2006 @ 21:03:
posttoast in "[PHP] while loop gaat meestal wel, soms ..."

Je zin begint met "nee" en het lijkt of die nee een antwoord is op "Of je kiest voor E_ALL" :)
Ah, ok :) Maar (zoals je inmiddels wel doorhebt denk ik): het was een reactie op de tweede vraag.

omniscale.nl

Pagina: 1