kom ihåg radiobutton

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1

hoppas att jag postar i rätt forum nu...
jag har gjort en form innehållande en radiogroup, när jag skriver ut saker med php uppdateras sidan och radiogruppen återställs, till det ursprungliga värdet, jag undrar om det finns något script som gör det möjligt att komma ihåg vilken radioknapp som var ikryssad

Jag har märkt att du är ganska grön på php så jag tar detta mycket grundläggande. Ursäkta mig om du tycker att jag förolämpar din intelligens.
Det finns många sätt att bygga upp strukturer i php. Jag har lagt mig till med att bygga upp formulär med en hop funktioner, vilka är väldigt lätta att bygga. Varje funktion skapar ett formulärelement. Man skulle lätt kunna bygga upp det med klasser också. I vilket fall är principen så här:

Först något enkelt, ett textfält med en label:

function input_text($Name,$Label,$Value=null){
$output = '<label for="'.$Name.'">'.$Label.'</label><input type="text" name="'.$Name.'" value="'.$Value.'"/>';
return $output;
}

Vad händer här? Jo, i parantesen efter funktionsnamnet sätter vi in några variabler som ska användas.
$output är bara ett valfritt variabelnamn för att hålla data. Som du ser sätter vi ihop ett inputfält och en label med hjälp av variablerna och en del fast kod.
return $output skickar innehållet ut ur funktionen.

För att använda denna så skriver du t ex:
echo input_text('Fornamn','Förnamn');

Notera att den sista variabeln, $Value har fått ett värde (i det här fallet null, vilket är php för ingenting). Det betyder att den har ett defaultvärde och att vi inte behöver skicka något till den om vi inte vill. (Som ovan)

Men nu kör vi ett värde för den också:
echo input_text('Fornamn','Förnamn', $_POST['Fornamn']);

Värdet vi satte är resultatet från formuläret (om det är skickat med method="post") och på så sätt får vi med det tidigare värdet, precis som du efterlyste.

Detta är bara början, jag kör ett exempel med en radiogroup också, i nästa post.

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

Underbart ninjamac, tacksam för alla dina svar här på 99 webb, jag tycker inte alls att du har idiotförklarat mig utan uppskattar att du tar din tid till sådana som mig, jag gör ju sånt här för att lära mig och då är det bra med forum som 99 webb och personer som verkligen hjälper till, kan bara berätta att jag är ganska ny/grön med just php däremot har jag hållt på med andra språk, dock inte på webben så jag är inte helt grön när det gäller variabler och loopar eftersom de ser ut på ungefär samma sätt i de flesta språk, men än en gång tack så mycket,

ps. det kommer nog mer frågor.

Senast redigerat 2007-11-07 18:56

det tog 26 minuter att komma på nästa fråga, har förstått koden men ja undrar hur man ska göra om man vill att den första radioknappen är ifylld om man precis kommit till sidan, skulle normalt klarat det men det blir lite svårt med loopen och jag vet inte riktigt var jag skulle placera koden, tacksam för svar

hälsningar frågsam unge

Du kollar om det finns en POST annars sätter du ett preset-värde.
Så här:

if($_POST['Fraga']) $Fraga = $_POST['Fraga']; else $Fraga = 'Ja';

bifogar en uppdaterad fil - ligger också online:
http://webbutvecklarna.se/code_samples/formtest2.php

tack så mycket för all hjälp jag skickar en länk så att ni kan se hur det blivit, http://findit.110mb.com/ enda problemet är att när man sökt på något och sedan byter tab så är ingen radiobutton i kryssad

1
Bevaka tråden