Att bygga en funktion för en radio group är lite mer komplicerat eftersom det handlar om ett okänt antal element, så då måste vi ta hjälp av arrayer. En array är en slags "organiserad karta med värden". En enkel array påminner om och beter sig som en tabell.
I vilket fall, en funktion för radioknappar var det, och vi bestämmer att den ska ha en label per alternativ och kunna klara av att skapa en eller flera radioknappar. För enkelhetens skull låter vi funktionen skapa arrayer så du behöver bara tillhandahålla kommadelimiterade listor med Labels och Values. Funktionen blir "dum" så det är upp till dig att se till att funktionen får samma antal Labels och Values.
function radio($Name,$Labels,$Values,$Value=null){
$Labels_arr = explode(',',$Labels);
$Values_arr = explode(',',$Values);
for ($i = 0; $i <= count($Values_arr)-1; $i++){
$output .= '<label for="'.$Name.'">'.$Labels_arr[$i].'</label><input type="radio" name="'.$Name.'" value="'.$Values_arr[$i].'"';
if($Value AND $Values_arr[$i] == $Value) $output .= ' checked';
$output .= '/><br/>
';
}
return $output;
}
Användes t ex så här:
echo radio('Fraga','Ja,Nej,Vet inte','Ja,Nej,Vet_inte',$_POST['Fraga']);
Vad händer här nu då.. lite mer att hålla reda på.
Först, i variabellistan som skickas med funktionen finns:
$Name - ett värde, $Labels - kommadelimiterad lista, $Values - kommadelimiterad lista, $Value - ett värde, frivilligt att skicka.
De första två raderna i funktionen är rätt självförklarande, vi gör arrayer av listorna genom att splitta vid kommatecken.
Sen kommer en loop som kör runt så många gånger som det finns värden i $Values_arr. Eftersom $Labels_arr ska ha lika många värden så får den åka snålskjuts i loopen. (jag går inte in på loopar nu, sök t ex på "while", "for" eller "foreach" på http://php.net/ )
Om du tittar på $Labels_arr[$i] och $Values_arr[$i] så ligger det till så att $i är siffran för vilket alternativ i ordningen vi hanterar i loopen.
Kolla sen på $output .= Punkten betyder att vi ska lägga till resultatet i variabeln $output (inte skriva över det gamla).
Sen kollar vi om det har skickats ett förvalt värde in i funktionen: if($Value
och om det värdet stämmer överens med alternativet i ordningen i loopen: AND $Values_arr[$i] == $Value)
Gör det det så lägger vi till "checked" och har därmed förvalt en radioknapp.
Du frågade efter hur man satte vilken radio som är vald. Jag gav inte dig det korta svaret därför att när man kommer in på sådana här grejer är det osmart att hantera det i löpande kod - för sådant lämpar sig funktioner mycket bättre. Och sen tycker jag det är kul att skriva sånt här och så hoppas man att andra ska läsa det och få lust att gräva vidare.
Tja, som sagt, jag hoppas att jag inte idiotförklarat dig alltför mycket nu..
Bifogar en färdig fil och demo finns på:
http://webbutvecklarna.se/code_samples/formtest.php