Ik heb wat hulp nodig voor het volgende.
Ik heb een formulier waarin een lijst met radiobuttons en checkboxes.
Daarnaast heb ik een mySQL database waarin “Main Categories” en “Sub Categories” zitten.
De “Main Categories” hebben een radiobutton en de Sub Categories een checkbox.
De bedoeling is dat de gebruiker eerst de radiobuttons met Main categories krijgt, hij dient dan 1 te kiezen, op het moment dat deze gekozen is moeten de checkboxen met Sub Categories weergegeven worden.
de php kant voor het oproepen van de main categories en sub categories is geen probleem, maar ik ben een noob als het op javascript komt :x
ik weet dat het iets moet zijn zoals onSelect(voer deze functie uit), of heb ik het mis?
Ik zou persoonlijk alles wat uit "Main Categories" komt in een select-menu zetten, is voor de gebruiker ook makkelijker denk ik.
Dan doe je dus in de pagina alles uit de db halen:
[code:1:5ef170a3b3]echo ‘<select name=“main_cat” onchange=“getSubCat(‘this.value’)”>’;
$sql = “SELECT * FROM main categories ORDER BY id ASC”;
connect();
$res = mysql_query($sql);
while ($rij = mysql_fetch_array($res))
{
echo “<option value=”$rij[value]">$rij[value]</option>";
}
mysql_close();
echo “</select>”;
echo “<div id=“sub_cat”></div>”;[/code:1:5ef170a3b3]
Als er een Main Categorie wordt geselecteerd wordt de JavaScript-functie “getSubCat” uitgevoerd. Dat is deze:
[code:1:5ef170a3b3]
function gettSubCat(mainCat)
{
createXMLHttpRequest();
var params = "maincat="+mainCat;
function createXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
function done()
{
if (xmlHttp.readyState == 4)
{
var response = xmlHttp.responseText;
if (response != ‘done’) alert(response);
else document.getElementById(‘sub_cat’).innerHTML = response;
}
}[/code:1:5ef170a3b3]
Deze functie roept “getSubCat.php” aan. Daarin selecteer je gewoon de Sub Categories:
[code:1:5ef170a3b3]
$mainCat = $_POST[‘maincat’];
$sql = “SELECT * FROM sub categories WHERE main categorie = ‘$mainCat’ ORDER BY id ASC”;
connect();
$res = mysql_query($sql);
while ($rij = mysql_fetch_array($res))
{
echo “<input type=“checkbox”>$rij[name]”;
}
mysql_close();
[/code:1:5ef170a3b3]
[quote:62b502af82="The JM"]Ik zou persoonlijk alles wat uit "Main Categories" komt in een select-menu zetten, is voor de gebruiker ook makkelijker denk ik.
Dan doe je dus in de pagina alles uit de db halen:
[code:1:62b502af82]echo ‘<select name=“main_cat” onchange=“getSubCat(‘this.value’)”>’;
$sql = “SELECT * FROM main categories ORDER BY id ASC”;
connect();
$res = mysql_query($sql);
while ($rij = mysql_fetch_array($res))
{
echo “<option value=”$rij[value]">$rij[value]</option>";
}
mysql_close();
echo “</select>”;
echo “<div id=“sub_cat”></div>”;[/code:1:62b502af82]
Als er een Main Categorie wordt geselecteerd wordt de JavaScript-functie “getSubCat” uitgevoerd. Dat is deze:
[code:1:62b502af82]
function gettSubCat(mainCat)
{
createXMLHttpRequest();
var params = "maincat="+mainCat;
function createXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
function done()
{
if (xmlHttp.readyState == 4)
{
var response = xmlHttp.responseText;
if (response != ‘done’) alert(response);
else document.getElementById(‘sub_cat’).innerHTML = response;
}
}[/code:1:62b502af82]
Deze functie roept “getSubCat.php” aan. Daarin selecteer je gewoon de Sub Categories:
[code:1:62b502af82]
$mainCat = $_POST[‘maincat’];
$sql = “SELECT * FROM sub categories WHERE main categorie = ‘$mainCat’ ORDER BY id ASC”;
connect();
$res = mysql_query($sql);
while ($rij = mysql_fetch_array($res))
{
echo “<input type=“checkbox”>$rij[name]”;
}
mysql_close();
[/code:1:62b502af82]
Dat is alles Zonder de pagina te refreshen.[/quote:62b502af82]
[Off topic]
Dat is nog eens ondersteuning! Je hebt bijna al z’n werk uit handen genomen
Nu maar hopen dat hij er iets van opsteekt en aanpast waar nodig. Maakt mijn post overbodig! (Was net iets in dezelfde strekking aan het schrijven)
[/Off topic]
Het Javascript moet in de header ja. En [b:11389446dc]<script language="text/javascript"> [/b:11389446dc] moet [b:11389446dc]<script type="text/javascript"> [/b:11389446dc] zijn.
Dan zou de response een mysql-error moeten zijn en wordt die ge-alert door JavaScript. Dit is niet het geval, dus de fout zit hem tot nu toe in het javascriptje.
als ik het goed begrijp gaat hij hier achter een element (bv een input)gaan zoeken die de id ‘sub_cat’ heeft.
klopt?
ander ding waar ik ook even vast zit met de javascript, hij gaat de getSubCat.php oproepen, daarin zit mijn functie die werkt, in de functie zit de echo, ik moet toch in de formulier kunnen aantonen waar hij de echo moet plaatsen?
[quote:95c135e85e="Howl"]Hmmm, ik krijg geen errors, als ik mijn php 'gewoon' uitvoer krijg ik wel de resultaten van de SubCat, dus daar zit al geen probleem.
Wat wel raar is, als ik 1 van de main categories kies, dan reageert hij niet.
er is wel iets waar ik niet zo goed aan uit kan:
als ik het goed begrijp gaat hij hier achter een element (bv een input)gaan zoeken die de id ‘sub_cat’ heeft.
klopt?[/quote:95c135e85e]
Hij gaat inderdaad alles wat je in getSubCat.php echo’t in een element zetten met id ‘sub_cat’. Dus dat element moet wel op de pagina staan, want daar komen de checkboxes in te staan.
[quote:95c135e85e=“Howl”]ander ding waar ik ook even vast zit met de javascript, hij gaat de getSubCat.php oproepen, daarin zit mijn functie die werkt, in de functie zit de echo, ik moet toch in de formulier kunnen aantonen waar hij de echo moet plaatsen?[/quote:95c135e85e]
In getSubCat.php moet je dus alles wat je in het formulier wilt hebben gewoon echoën. Alles wat dat script echo’t pakt het scriptje samen in de variabele ‘response’ en zet die in het element met id ‘sub_cat’. Dus dat is goed, mits dat element bestaat
EDIT:
Tip: Gebruik Firefox samen met de extensie FireBug. Deze extensie geeft precieze JavaScript-errors terug, weet je meteen wat er fout gaat.
Dus de subcat met de checkboxen die worden mooi weergegeven wanneer de main category gekozen is.
Nu wil ik dit even uittesten door iets in te geven natuurlijk.
Dus ik heb 3 velden:
Title
Actors
Year
en dan de main en de sub categories.
Ik vul het nodige in om dit dan in de mysql db op te slaan, maar ik merk op dat wanneer ik meer dan 1 subcat selecteer de title eigenlijk het evenveel aantal keer in de db wordt opgeslaan, laat zeggen ik selecteer 2 subcats dan krijg ik 2 records.
hier is mijn code eenmaal op de submit knop geklikt:
ik denk dat het door de foreach komt.
de bedoeling is dat er in 1 record de title enz komt maar ook de ID van de meerdere subcats in datzelfde record.
zoizo ga ik een implode moeten maken, maar hoe kan ik dat regelen zonder dat hij de record meerdere keren aanmaakt?
ps: sorry het kan misschien een beetje onduidelijk zijn maar heb niet veel geslapen gisteren :x