$_POST waarde blijft zelfde.
Dit zijn 2 radio buttons en 1 select veld. De select veld gevult door een database en de radio buttons zijn standaard en daarom hoeft de value niet gevult te worden. Dit werkt helemaal na behoren.
Zodra ik een selectie maak in de radio buttons en select veld dan word er door een stukje ajax een div refrest en word de gevraagte waarders uit een database getrokken. Alleen welke van de 2 radio buttons ik ook aanklik hij blijft altijd optie 2 weg schrijven in de $_POST. Maak ik nu van de radio buttons ook een select dan komen de waarders wel goed door, tevens bij het maken van een text veld en type daar mij gevraagte waarde in komt deze netjes te voorschijn. Kortom radio button blijft problemen geven.
Mijn var_dump geeft de volgende result. Alleen dus bij gebruik radio buttons blijft die categorie het zelfde houden.
In het begin kreeg ik helemaal de $_POST waarde van categorie niet door in de var_dump. Maar dat bleek dat de optie radio niet was gegeven in het ajax gedeelte.
ik heb daarom de volgende regel er bij gezet:
Code (php)
1
2
3
2
3
case "radio":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
Nu geeft die de categorie waarde wel met een radio button maar zoals gezegt verandert deze niet bij een andere keuze.
Wie ziet de fout en kan mij even helpen. Op gebeid van ajax ben ik totaal niet bekend.
Complete code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
var divid = 'output';
var loadingmessage = 'Processing...';
function AJAX()
{
var xmlHttp; try
{
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
return xmlHttp;
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
return xmlHttp;
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
}
function formget(f, url)
{
var poststr = getFormValues(f);
postData(url, poststr);
}
function postData(url, parameters)
{
var xmlHttp = AJAX();
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState > 0 && xmlHttp.readyState < 4)
{
document.getElementById(divid).innerHTML=loadingmessage;
}
if (xmlHttp.readyState == 4)
{
document.getElementById(divid).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", parameters.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(parameters);
}
function getFormValues(fobj)
{
var str = "";
var valueArr = null;
var val = "";
var cmd = "";
for(var i = 0;i < fobj.elements.length;i++)
{
switch(fobj.elements[i].type)
{
case "text":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
case "radio":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
case "textarea":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
case "select-one":
str += fobj.elements[i].name + "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
break;
}
}
str = str.substr(0,(str.length - 1));
return str;
}
var loadingmessage = 'Processing...';
function AJAX()
{
var xmlHttp; try
{
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
return xmlHttp;
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
return xmlHttp;
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
}
function formget(f, url)
{
var poststr = getFormValues(f);
postData(url, poststr);
}
function postData(url, parameters)
{
var xmlHttp = AJAX();
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState > 0 && xmlHttp.readyState < 4)
{
document.getElementById(divid).innerHTML=loadingmessage;
}
if (xmlHttp.readyState == 4)
{
document.getElementById(divid).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", parameters.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(parameters);
}
function getFormValues(fobj)
{
var str = "";
var valueArr = null;
var val = "";
var cmd = "";
for(var i = 0;i < fobj.elements.length;i++)
{
switch(fobj.elements[i].type)
{
case "text":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
case "radio":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
case "textarea":
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
break;
case "select-one":
str += fobj.elements[i].name + "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
break;
}
}
str = str.substr(0,(str.length - 1));
return str;
}
Gewijzigd op 08/01/2012 04:13:07 door Frank WD
Toon eens de HTML van je radio buttons
Sorry voor het wat late reactie, was even dagje weg.
Maar je vroeg om een stukje html code. Deze post ik hier onder mee. Moet er bij zeggen dat er nog meer code is rond dit stukje form. Maar omdat het alleen om dit stukje gaat laat ik de rest maar weg. Het probleem doet zicht dus voor in de selectie van de radio buttons.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form id="aForm">
<input type="radio" name="categorie" id="categorie" value="Optie 1" checked /> Algemeen
<input type="radio" name="categorie" id="categorie" value="Optie 2" /> Algemeen
<select id="jaar" name="jaar" >
<?php
while( $row = mysql_fetch_array( $result ) )
{
?>
<option value="<?php echo htmlspecialchars( $row['jaar'] ) ?>" ><?php echo htmlspecialchars( $row['jaar'] ) ?></option>
<?php
} // Einde While_loop
} // Einde else voor regel 12
?>
</select>
<input type="button" name="Send" value="OK" onclick="javascript: formget(this.form, 'include/promo_archief.php');">
</form>
<input type="radio" name="categorie" id="categorie" value="Optie 1" checked /> Algemeen
<input type="radio" name="categorie" id="categorie" value="Optie 2" /> Algemeen
<select id="jaar" name="jaar" >
<?php
while( $row = mysql_fetch_array( $result ) )
{
?>
<option value="<?php echo htmlspecialchars( $row['jaar'] ) ?>" ><?php echo htmlspecialchars( $row['jaar'] ) ?></option>
<?php
} // Einde While_loop
} // Einde else voor regel 12
?>
</select>
<input type="button" name="Send" value="OK" onclick="javascript: formget(this.form, 'include/promo_archief.php');">
</form>
Zoals je zit heb ik in dit voorbeeld de onclick op de submit gezet. Als het mogelijk is wil ik dit liever op de select zetten. Dit ivm ik liever 2 handelingen heb dan 3? In dit voorbeeld krijg ik na submit wel de radio en select results weer die ik heb gekozen. Alleen wat ik ook kies bij radio buttons het blijft altijd Optie 2 terug geven. Selectbox loopt wel zoals het hoort en geeft de optie die ik kies.
Gewijzigd op 10/01/2012 22:01:54 door Frank WD
Je mag twee elementen niet de zelfde id geven. Doe eventueel iets als categorie_ plus het id nummer.
Maar verder, pas eens dit aan in je switch
Code (php)
1
2
3
4
5
6
2
3
4
5
6
case "radio":
var checked = fobj.elements[i].checked;
if (checked) {
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
}
break;
var checked = fobj.elements[i].checked;
if (checked) {
str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
}
break;
Dan wordt enkel de radio button meegestuurd die gechecked is. Bij het gewoon doorsturen van je formulier gebeurt dat trouwens ook. Enkel de gecheckte radio button vind je in de $_POST terug. De rest wordt niet naar de server gestuurd.
Gewijzigd op 10/01/2012 22:58:42 door Kris Peeters
Bedankt ga het uitproberen laat je de uitkomst zo gelijk weten.
<b><i>Edit:</i></b>
Ik heb nu de input velden aangepast naar:
Code (php)
1
2
2
<input type="radio" name="categorie" id="categorie_<?php echo htmlspecialchars( $row['id'] ) ?>" value="Optie 1" checked /> Algemeen
<input type="radio" name="categorie" id="categorie_<?php echo htmlspecialchars( $row['id'] ) ?>" value="Optie 2" /> Algemeen
<input type="radio" name="categorie" id="categorie_<?php echo htmlspecialchars( $row['id'] ) ?>" value="Optie 2" /> Algemeen
Tevens heb ik hem in de while loop gezet. Dit gaf niet het result die ik wou. Toen heb ik mijn auto_div.js aangepast met het stukje code die jij me gaf. Dit gaf gelijk de verwachte waarders. Dus Kris bedankt voor de reactie.
Probleem is opgelost
Gewijzigd op 10/01/2012 23:12:47 door Frank WD
graag gedaan
Code (php)
1
2
3
2
3
<form id="aForm">
<input type="radio" name="categorie[]" id="categorie" value="Optie 1" checked /> Algemeen
<input type="radio" name="categorie[]" id="categorie" value="Optie 2" /> Algemeen
<input type="radio" name="categorie[]" id="categorie" value="Optie 1" checked /> Algemeen
<input type="radio" name="categorie[]" id="categorie" value="Optie 2" /> Algemeen
Nu krijg je een array terug met de categorie die gekozen is.
Bij de radio butten is het de bedoeling dat je maar 1 waarde kan checken.
De andere, lege waarden mee opsturen, is vrij zinloos.
De andere waarde wordt niet meegestuurd, je krijgt gewoon een array met maar 1 waarde erin