Ik heb het volgende probleempje, ik heb 2 comboboxen. De een bevat t-shirts en de ander kleuren. Nu wil ik dat wanneer ik bijv. het eerste t-shirt selecteer hij in de 2e combobox de kleur laat zien. Bijv. rood. Hieronder een voorbeeld van de database
Kan dit ook met PHP. De eerste POST de t-shirt en de tweede neemt in zijn query op dat hij de kleur(en) moet laten zien die aan de gekozen t-shirt zijn gekoppeld. Dit heeft toch niets met javascripts te maken. Weet iemand hoe ik dit kan oplossen?
Is er dan niemand die hier verstand van heeft....?
Wat ik dus wil is dat ik 1 combobox/dropdownmenu met de soorten t-shirts heb en zodra ik deze heb geselecteerd wil ik dat in de 2e combobox (eronder) de alleen die kleuren zichtbaar zijn die verkrijgbaar zijn. Dus als t-shirt 1 alleen in rood verkrijgbaar is wil ik dus geen blauw zien. Ik heb dit echt nodig dus als iemand mij even op weg wil helpen graag...
Ik moet je eerlijk gezegt bekennen dat ik er niets van snap. Bovendien hoef ik het niet zo uitgebreidt te hebben. Geen beschrijvingen enzo. Bovendien werk ik in een database en niet in een array. Misschien dat je het een beetje kan vertalen naar mijn situatie. In dat geval alvast bedankt.
Thomas - 30/03/2005 13:09 (laatste wijziging 30/03/2005 13:14)
Moderator
Als je het principe niet snapt, dan maakt het toch niet uit op welke manier je het uitlegt ?
Je moet het als volgt zien: Je hebt één formulier waarin meer of minder velden te zien zijn op grond van wat er eerder is ingevuld. Alles wat al eerder is ingevuld wordt onthouden via het formulier (via $_POST dus).
Aan de hand van wat er in $_POST staat, toon je bepaalde onderdelen van het formulier.
Als je nog geen T-shirt hebt geselecteerd, laat je alleen een dropdownbox zien voor T-shirts.
Als je een T-shirt geselecteerd hebt, dan selecteer je dit T-shirt in het formulier met selected="selected", en laat je een nieuwe selectbox zien met de beschikbare kleuren bij dit T-shirt.
Als je zowel een T-shirt als een kleur submit, verwerk je je formulier of doe je weer / nog iets anders.
Wat is het probleem hierbij ?
EDIT: Hiernaast krijg je dus allemaal kleine probleempjes zoals zorgen dat het juiste item is geselecteerd, het 'resetten' van de beschikbare T-shirt-kleuren wanneer je van T-shirt-type verandert et cetera. Maar dit zijn details, die apart opgelost kunnen worden.
Nou, het prinipe zoals jij het uitlegt snap ik wel. Alleen niet hoe ik het moet realiseren. Dus hoe ik het moet doen zeg maar...
Thomas - 30/03/2005 14:25 (laatste wijziging 30/03/2005 14:27)
Moderator
Als je nauwkeurig in woorden kunt omschrijven wat je wilt (een specificatie geven dus), kun je meestal een 1-op-1 vertaling maken naar code. Later kun je altijd nog alles optimaliseren.
Maak eerst het volledige formulier. Toon alle velden en maak je nog niet druk over hoe je dit straks in stukken weer gaat geven.
Wanneer een optie verandert, dient het formulier opnieuw geladen te worden, hier zorgt het onChange-attribuut voor.
De gegevens van T-shirts komen uit de database. Ook wil je niet dat er al kleuren worden weergegeven als je nog geen t-shirt hebt geselecteerd (deze twee hangen immers van elkaar af).
Dit is de pagina, zoals ik die heb, dus geen t-shirts en kleuren maar categorieen en subcategorieen. Nu kan ik op deze pagina de gegevens kwijt. Maar ik wil de gegevens doorsturen naar pagina 2 dus dit betekend een form met daarin dit bovenstaande script. Weet iemand hoe ik dit doe.
Thomas - 04/04/2005 10:13 (laatste wijziging 04/04/2005 10:14)
Moderator
Op grond van wat je hebt ingevuld (enkel een categorie of een categorie en een subcategorie) zou je de ACTION van je form kunnen aanpassen. Of bedoel je dat niet ?
Als je informatie over meerdere pagina's moet gaan bijhouden (een soort van shopping-cart dus) moet je misschien aan andere constructies gaan denken, zoals het gebruik van sessies.
Wat ik wil is dus dat ik een categorie moet kiezen, en pas als ik die gekozen heb, wil ik dat ik een subcategorie moet kiezen en die 2 text-veldjes moet invullen. En ik wil nog steeds dat de subcategorieen overeenkomen met de gekozen categorie. Het werken met sessies is hier volgens mij niet nodig.
Er is toch vast wel iemand die weet hoe ik dit doe.... toch???
Hmm, beschrijving en procedure moeten dan binnen "if(isset($_POST['categorie'])) {" vallen (dus voor de "}" hiervan)... Je sluit overigens twee keer je form af ?
Hierna moet er ook nog een pagina of stukje script zijn dat deze formulier-invoer verwerkt neem ik aan ?
<?php
// om te kijken of er een optie geselecteerd was
function selected($seloption, $option) {
return (isset($_POST[$seloption]) && $_POST[$seloption] == $option) ? " selected=\"selected\"" : "";
}
/*
in plaats van $_SERVER['PHP_SELF'] wil je hieronder misschien op grond van het geset
zijn van variabelen in $_POST het formulier ergens anders naartoe posten, als een ander
script het volledig ingevulde formulier verwerkt
*/
?>
<form name="categorie" action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
Categorie: <select name="categorie" onChange="document.forms['categorie'].submit();">
<option value="">Categoriën</option>
<?php
$result = mysql_query("SELECT categorie FROM categorie");
while($row = mysql_fetch_assoc($result)) {
?>
<option value="<?= $row['categorie'] ?>"<?= selected("categorie", $row['categorie']) ?>><?= $row['categorie'] ?></option>
<?php
}
?>
</select><br />
<?php
if(isset($_POST['categorie'])) {
/*
De regels "Beschrijving" en "Procedure" stonden IN een PHP-blok... Dat kan natuurlijk nooit kloppen
*/
?>
Beschrijving: <input type="text" name="beschrijving" size="44" /><br />
Procedure: <input type="file" name="procedure" size="30" /><br />
<?php
/*
NB: Je wilt hier(onder) nog steeds dezelfde form submitten - document.forms['subcategorie'].submit()
is dus onzin - er is geen formulier genaamd "subcategorie"
*/
?>
Subcategorie: <select name="subcategorie" onChange="document.forms['categorie'].submit();">
<?php
$result = mysql_query("SELECT * FROM subcategorie WHERE categorie='".addslashes($_POST["categorie"])."'");
while($row = mysql_fetch_assoc($result)) {
?>
<option value="<?= $row['subcategorie'] ?>"<?= selected("subcategorie", $row['subcategorie']) ?>><?= $row['subcategorie'] ?></option>
<?php
}
?>
</select><br />
<?php
}
/*
Hieronder werd het formulier twee keer afgesloten - waarom ?
*/
?>
<hr />
<input type="submit" value="Invoegen" />
<input type="Reset" value="Leegmaken" />
</form>
Maar het probleem blijft dat ik het binnen die pagina hou. De waardes die ik daar gekozen heb wil ik doorsturen naar de volgende pagina. En dat is het probleem. Dus......
Thomas - 18/04/2005 12:53 (laatste wijziging 18/04/2005 12:54)
/*
in plaats van $_SERVER['PHP_SELF'] wil je hieronder misschien op grond van het geset
zijn van variabelen in $_POST het formulier ergens anders naartoe posten, als een ander
script het volledig ingevulde formulier verwerkt
*/
/*
in plaats van $_SERVER['PHP_SELF'] wil je hieronder misschien op grond van het geset
zijn van variabelen in $_POST het formulier ergens anders naartoe posten, als een ander
script het volledig ingevulde formulier verwerkt
*/
Dus als $_POST['categorie'] geset is, zou je de action van het formulier alvast kunnen veranderen naar je (nieuwe) "doel-pagina". Je hebt hierbij wel een probleem wanneer iemand de categorie dan nog aanpast... Je wordt dan al naar de nieuwe pagina gestuurd terwijl je nog geen subcategorie hebt ingevuld. Misschien kun je dat beter in JavaScript oplossen ofzo ? Dat je de action van het formulier verandert op het moment dat je een (categorie èn een) subcategorie hebt geselecteerd ?
Die $_SERVER['PHP_SELF'] zorgt ervoor dat de gegevens binnen de pagina aan elkaar worden doorgegeven. Al zou ik dit veranderen zou er nog niets gebeuren. En ja, dit heb ik geprobeerd. Dus het form moet volgens mij in een andere form gezet worden. Jij wilt alleen het form veranderen.
Euh... natuurlijk moet er ergens een script zijn dat het volledig ingevulde formulier opvangt en verwerkt, maar als jij verder ongespecificeerd laat waar een volledig formulier naartoe gepost moet worden, hoe moet ik het dan weten ?
De eerste stap in je formulier is het kiezen van een categorie (het formulier wordt naar dezelfde pagina gepost).
De tweede stap is het kiezen van een subcategorie op grond van de gekozen categorie (het formulier moet dan naar dezelfde of een andere pagina worden gepost om aldaar verwerkt te worden).
Dit is trouwens een andere vraag dan waar je mee begon eh. Ik kan nou wel heel ijverig jou 1001 oplossingen aan gaan bieden waar je niets aan hebt, maar ik laat liever de vragenstellers ook nadenken en iets doen, anders staat iemand binnen de kortste keren hier weer op de stoep met vragen.
Schrijf gewoon eerst eens duidelijk op papier wat er moet gebeuren, en vertaal dit dan naar code. Als dit niet lukt, en je kunt ons duidelijk vertellen wat je wilt en aan kunt geven waar het schip strandt, is het voor ons ook een stuk makkelijker op jouw probleem op te lossen.
Dit is het enigste wat ik kon bedenken. Dus een form binnen een form. Ik zou eigenlijk niet weten hoe ik dit duidelijker uit kan leggen. De gegevens moeten uiteindelijk worden doorgestuurd naar pagina2.php waar ze verwerkt worden en in de database worden gezet. Het gaat er mij nu om dat als ik op Invoegen klik ik niet naar pagina2.php ga maar gewoon op dezelfde pagina blijf, omdat er twee forms zich in de pagina bevinden
Thomas - 19/04/2005 15:52 (laatste wijziging 19/04/2005 16:11)
Moderator
Argh! Ik heb al aangegeven hoe je dit op kunt lossen (JavaScript), ik zal mijn eerder geschreven scriptje wel even aanpassen. Dan maar voorkauwen .
<?php
// om te kijken of er een optie geselecteerd was
function selected($seloption, $option) {
return (isset($_POST[$seloption]) && $_POST[$seloption] == $option) ? " selected=\"selected\"" : "";
}
/*
in plaats van $_SERVER['PHP_SELF'] wil je hieronder misschien op grond van het geset
zijn van variabelen in $_POST het formulier ergens anders naartoe posten, als een ander
script het volledig ingevulde formulier verwerkt
*/
?>
<script language="JavaScript">
function check_form() {
// controleer waar het formulier naar toe gepost moet worden op grond van
// het wel of niet gevuld zijn van formulier-variabele "subcategorie"
if(document.forms['frm'].elements['subcategorie'].value != "") {
// de subcategorie is ingevuld, verander de action van het formulier
document.forms['frm'].action = "pagina2.php";
}
}
</script>
<form name="frm" action="<?= $_SERVER['PHP_SELF'] ?>" method="post" onSubmit="check_form();">
Categorie: <select name="categorie" onChange="document.forms['frm'].submit();">
<option value="">Categoriën</option>
<?php
$result = mysql_query("SELECT categorie FROM categorie");
while($row = mysql_fetch_assoc($result)) {
?>
<option value="<?= $row['categorie'] ?>"<?= selected("categorie", $row['categorie']) ?>><?= $row['categorie'] ?></option>
<?php
}
?>
</select><br />
<?php
if(isset($_POST['categorie'])) {
/*
De regels "Beschrijving" en "Procedure" stonden IN een PHP-blok... Dat kan natuurlijk nooit kloppen
*/
?>
Beschrijving: <input type="text" name="beschrijving" size="44" /><br />
Procedure: <input type="file" name="procedure" size="30" /><br />
<?php
/*
NB: Je wilt hier(onder) nog steeds dezelfde form submitten - document.forms['subcategorie'].submit()
is dus onzin - er is geen formulier genaamd "subcategorie"
*/
?>
Subcategorie: <select name="subcategorie" onChange="document.forms['frm'].submit();">
<?php
$result = mysql_query("SELECT * FROM subcategorie WHERE categorie='".addslashes($_POST["categorie"])."'");
while($row = mysql_fetch_assoc($result)) {
?>
<option value="<?= $row['subcategorie'] ?>"<?= selected("subcategorie", $row['subcategorie']) ?>><?= $row['subcategorie'] ?></option>
<?php
}
?>
</select><br />
<?php
} else {
/*
NB: het volgende deel MOET er bij, omdat JavaScript anders foutmeldingen genereert
je kan geen waarden controleren van zaken die niet bestaan
*/
?>
<input type="hidden" name="subcategorie" value="" />
<?php
}
/*
Hieronder werd het formulier twee keer afgesloten - waarom ?
*/
?>
<hr />
<input type="submit" value="Invoegen" />
<input type="Reset" value="Leegmaken" />
</form>
Hieronder werd het formulier twee keer afgesloten - waarom ?
*/
?>
<hr />
<input type="submit" value="Invoegen" />
<input type="Reset" value="Leegmaken" />
</form>
</voorkauwmode>
VEEL PLEZIER ERMEE !!!
lol... Mensen zijn niet geinteresseerd in uitleg, ze willen graag dom blijven en een oplossing hebben lijkt het haast. Volgende keer ga ik niets meer uitleggen, en post gewoon een oplossing. Scheelt mij ook een hoop werk...
Allemaal wel leuk en aardig, maar ik ga nog steeds niet naar pagina2.php. Binnen de pagina werkt het allemaal wel met de formulieren maar zodra ik op submit klik doet hij niets!
Dit had ik meteen al gedaan, dit is dus helaas niet genoeg
Thomas - 21/04/2005 10:05 (laatste wijziging 21/04/2005 10:06)
Moderator
Bovenstaande code heb ik getest, en dat werkte gewoon - heb je de bovenstaande code letterlijk over genomen ? De naam van het formulier is namelijk aangepast.
Het lijkt mij sterk dat dezelfde PHP-code verschillend verwerkt wordt.
Als je die knoppen niet wilt laten zien als je nog geen subcategorie hebt geselecteerd, verkas je die gewoon naar tussen het !isset($_POST['categorie']) statement, of je maakt een nieuw if statement ?
Als ik eerst een categorie selecteer, en dan op de invoegen-knop druk, wordt het formulier gesubmit naar pagina2.php.
Er zit nog een klein foutje in. Zodra ik alleen een categorie en subcategorie selecteer werkt het prima (bedankt daarvoor), maar zodra ik de bij beschrijving en/of procedure horende tekst veldje wil invullen om vervolgens op invoegen te klikken, dan werkt het in een keer niet meer. Hoe kan dit?