vanuit een Flash swf laad ik de volgende variabelen in een php-script (om in een email te verwerken):
$ant_1 = $_POST['vraag1'];$ant_2 = $_POST['vraag2'];
$ant_3 = $_POST['vraag3'];$ant_4 = $_POST['vraag4'];
$ant_5 = $_POST['vraag5']

Verderop worden deze variabelen zo naar de afzender verzonden:

Antwoord 1 = $ant_1
Antwoord 2 = $ant_2
Antwoord 3 = $ant_3
Antwoord 4 = $ant_4
Antwoord 5 = $ant_5

Natuurlijk is het fraaier dat met twee for lussen te doen.
Maar ik weet niet hoe.
Graag jullie hulp!
zo werkt een for loop

<?php
// een teller instellen; als teller kleiner is als 20; teller + 1
// dus als teller kleiner is als 20 wordt de lus ingezet
for ( $teller = 10; $teller < 20; $teller++){
code;
}
?>

als je wilt controleren of antwoord 1 is ingevoerd

kan je beter een if-statement gebruiken

<?php
if(isset($ant_1))
{
code;
}
// of
if(ant_1 != null)
{
code;
}
?>
@Karizma
Jou controle is niet betrouwbaar en je hebt ook wat foutjes gemaakt (onderandere in de 2e if, geen $ voor de variabele naam)
Maar je controleert of die bestaat en Buiten die controle ga je controleren of het antwoord ongelijk is aan null (niet leeg is). Dat zou je beter binnen de isset kunnen (eigenlijk moeten) doen.

@Taeke Dikkema

Wat je kan doen is zoiets:
<?php
//aantal vragen
$questions = 5;

//hier de standaard inhoud van de mail, voor de antwoorden die zijn gegeven
$mailbody = '';
for($i=1; $i <= $questions; $i++)
{
if( empty( $_POST['ant'.$i] ) )
{
$_POST['ant'.$i] = 'Niet gegeven';
}
$mailbody .= 'Antwoord ' . $i . ' = ' . $_POST['ant' . $i] . "\n"; // \n means new line
}
?>

Overigens heb ik hier 0,0 aan controle (of er is verzonden, of een variabele bestaat e.d. ingevoerd. Dat mag je zelf doen. Wel geeft dit in de verzonden e-mail aan of een antwoord was ingevuld of niet.
Waarschijnlijk is mijn vraag te simpel, want ik wil de antwoorden niet controleren....
Wat ik graag wil, is de syntax inkorten:
Nu staat er in de mailbody:

Vraag 1 = $ant_1
Vraag 2 = $ant_2
Vraag 3 = $ant_3
Vraag 4 = $ant_4
Vraag 5 = $ant_5

mijn vraag is, hoe ik dat moet vervangen door een for - next lus, zoiets:

for ($i=1;$i<=20;$i++)
{
'Vraag '.$i = $ant_.$i] . "\n";
}

Ik denk dat het probleem in de aanhalingstekens en de punten zit......
Robert Deiman op 05/10/2010 09:37:55

@Karizma
Jou controle is niet betrouwbaar en je hebt ook wat foutjes gemaakt (onderandere in de 2e if, geen $ voor de variabele naam)
Maar je controleert of die bestaat en Buiten die controle ga je controleren of het antwoord ongelijk is aan null (niet leeg is). Dat zou je beter binnen de isset kunnen (eigenlijk moeten) doen.

mijn antwoord was ook niet zijn oplossing, ik had alleen paar mogelijkheden voorgesteld. en je hoort niet beiden de if-statements uit te voeren. er staat duidelijk //OF :/ en empty is niet echt een betrouwbare methode



@Taeke dit is niet mogelijk
<?php
'Vraag '.$i = $ant_.$i] . "\n";
?>
je kan geen $var een nr geven met een ander $var, waardoor er een nieuw variabel ontstaat, dit is wel mogelijk met een $_POST variabelen
<?php
$_POST['ant'.$x.'']
?>
Taeke Dikkema op 05/10/2010 12:49:57

Waarschijnlijk is mijn vraag te simpel, want ik wil de antwoorden niet controleren....
Wat ik graag wil, is de syntax inkorten:
Nu staat er in de mailbody:

Vraag 1 = $ant_1
Vraag 2 = $ant_2
Vraag 3 = $ant_3
Vraag 4 = $ant_4
Vraag 5 = $ant_5

mijn vraag is, hoe ik dat moet vervangen door een for - next lus, zoiets:

for ($i=1;$i<=20;$i++)
{
'Vraag '.$i = $ant_.$i] . "\n";
}

Ik denk dat het probleem in de aanhalingstekens en de punten zit......


Pak mijn code eens en gooi aan het einde "echo $mailbody;". Je zult zien dat het wel is wat je bedoelde.
Een form met genummerde namen is een foutieve opzet!! Gebruik form array definitie.

Dat houdt dus in:
<input name="vraag[1]" .......... />

En dan is $_POST['vraag'] een array die je met php veel makkelijker / directer kan verwerken
2 manieren:

1.) Zoals Noppes aangeeft.

2.)
<?
foreach($_POST as $key => $val){
if(substr($key,0,5) == 'vraag' && is_numeric(substr($key,5))){
$i = substr($key,5);
print 'Vraag '.$i.' = '.$val;
}
}
?>
@Pieter van Linschoten: En wat nou als de nummering doorloopt tot 10 of 100? Dan werkt dat van jou niet. Noppes geeft de juiste oplossing.
Dan werkt het nog steeds. ;)
Wat substr(argument 1,argument 2) doet, is: Return alle tekens van [argument 1], behalve de eerste [argument 2].

Reageren