Avatar billede alkrojen Nybegynder
23. januar 2009 - 11:38 Der er 7 kommentarer

Formular der sender et array?

Hej Eksperter

Jeg er ved at lave en side der udskriver en række spørgsmål i tilfældig rækkefølge. Det gøres således:

echo "<input type=radio name=Q$questionNo value=$answerOptionNo";

Der er lidt over 80 forskellige spørgsmål, som hver har op til 4 forskellige svarmuligheder. Det giver en hulens masse variabler der skal videresendes i formen. Q1=1, Q2=2, Q3=1 ... Q50=3.

Problemet er når jeg skal modtage disse svar. Det gøres af samme side, og pt. på følgende måde:

..
if($_POST['Q58'])
  {
  $questionNo = 58;
  $answerOptionNo = $_POST['Q58'];
  saveAnswer($testNo, $questionNo, $answerOptionNo);
  }
if($_POST['Q59'])
  {
  $questionNo = 59;
  $answerOptionNo = $_POST['Q59'];
  saveAnswer($testNo, $questionNo, $answerOptionNo);
  }
..

Der er en if-sætning for hvert spørgsmål! Er der ikke en nemmere og mere kompakt måde at gøre det på? Evt. med arrays eller lignende?
Avatar billede j4k0b Nybegynder
23. januar 2009 - 11:50 #1
Du kan da lave et loop, der udfører ovenstående kode for hvert spørgsmål?

$questions = 60;
for($i=1; $i<=$questions; $i++) {
    $label = sprintf('Q%d', $i);
    if($_POST[$label]) {
        saveAnswer($testNo, $i, $_POST[$label]);
    }
}
Avatar billede Dan Nim Seniormester
23. januar 2009 - 11:52 #2
echo "<input type=radio name=Q[$questionNo] value=$answerOptionNo";

php:

foreach( $_POST["Q"] as $question) {
echo $question."<br>";

}
Avatar billede j4k0b Nybegynder
23. januar 2009 - 11:55 #3
dannim: Din metode ville ikke fungere. At loope over $_POST["Q"] giver intet, da du ikke har nogle felter i formularen defineret med det navn.

At få form-data ind som arrays er kun relevant hvis du arbejder med flere værdier for ét feldt, f.eks. checkboxes.
Avatar billede Dan Nim Seniormester
23. januar 2009 - 12:07 #4
Joe da:

echo "<input type=radio name=Q[$questionNo] value=$answerOptionNo";

name=Q
Avatar billede j4k0b Nybegynder
23. januar 2009 - 13:35 #5
ah, overså de firkantede klammer :) fint nok så
Avatar billede hypofysen Nybegynder
23. januar 2009 - 15:34 #6
kan du ikke lave en foreach $_post?

foreach($_POST as $questionNo => $answerNo){
udfør din kode her
};
Avatar billede alkrojen Nybegynder
28. januar 2009 - 12:07 #7
Tak for hjælepen j4k0b det virker! Send et svar så skal du få points.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester