Meerdere options opslaan?
Chupskie - 18/07/2006 11:32 (laatste wijziging 18/07/2006 11:44)
MySQL beginner
Klanten kun op de site die ik nu aan t bouwen ben, extra artikels selecteren. Via een dropdown wordt het aantal geselecteerd, en dan wordt automatisch door deze code de pagina gerefresht, en het aantal opgeslagen in de link:
code:
<SCRIPT language=JavaScript>
function reload(form){
var val=form.aantalextra.options[form.aantalextra.options.selectedIndex].value;
self.location='index.php?hcat=<?php echo $hhcat; ?>&subcat=<?php echo $sscat; ?>&cnfId=<?php echo $ccnfId; ?>&extra=' + val ;
}
</script>
<SCRIPT language=JavaScript>
function reload(form){
var val=form.aantalextra.options[form.aantalextra.options.selectedIndex].value;
self.location='index.php?hcat=
<?php echo $hhcat ; ?> &subcat=
<?php echo $sscat ; ?> &cnfId=
<?php echo $ccnfId ; ?> &extra=' + val ;
}
</script>
link: index.php?hcat=1&subcat=1&cnfId=123&extra=13245-2
Als ze daarna nog een extra artikel bestellen, gaat het mis, dan vervangt hij de bovenstaande link, door het artikelnr en het aantal wat nu geselecteerd is?
Is het niet mogelijk, dat dit dan zo wordt:
index.php?hcat=1&subcat=1&cnfId=123&extra=13245-2&extra=13453-7
Dat hij per extra product er op de een of andere manier die zo ook opslaat in de link?
Alvast hartelijke bedankt..!
10 antwoorden
Gesponsorde links
ikkedikke - 18/07/2006 12:02 (laatste wijziging 18/07/2006 12:02)
PHP expert
je kan het script een array terug laten geven.
<?
$sExtra = '';
foreach($_GET['extra'] as $extraItem)
{
$sExtra .= '&extra[]='.urlencode($extraItem);
}
?>
<SCRIPT language=JavaScript>
function reload(form)
{
var val=form.aantalextra.options[form.aantalextra.options.selectedIndex].value;
self.location='index.php?hcat=<?php echo $hhcat; ?>&subcat=<?php echo $sscat; ?>&cnfId=<?php echo $ccnfId.$sExtra?>&extra[]=' + val ;
}
</script>
<?
$sExtra = '' ;
foreach ( $_GET [ 'extra' ] as $extraItem )
{
$sExtra .= '&extra[]=' . urlencode ( $extraItem ) ; }
?>
<SCRIPT language=JavaScript>
function reload(form)
{
var val=form.aantalextra.options[form.aantalextra.options.selectedIndex].value;
self.location='index.php?hcat=
<?php echo $hhcat ; ?> &subcat=
<?php echo $sscat ; ?> &cnfId=
<?php echo $ccnfId . $sExtra ?
> &extra[]=' + val ;
}
</script>
Chupskie - 18/07/2006 12:11 (laatste wijziging 18/07/2006 12:44)
MySQL beginner
Ik krijg nou wel een aantal meldingen, van de foreach en van de array, dat hij ze niet goed opslaat, maar hij zet ze wel al in de link:
&extra[]=12927-2&extra[]=12844-2&extra[]=12844-3
Dus ik ben al een heel eind, kga ff verder prutsen, ik laat zo wel horen, of het is gelukt! Alvast bedankt tot zover!
edit: de fouten zijn weg, maar het ophalen, gaat nog niet 100%
<?php
// Staat het product al in de link
$found = false;
$i = 0;
while(!$found)
{
if($_GET['extra'][$i]){
$found = true;
}else{
$i++;
}
}
?>
<?php
// Staat het product al in de link
$found = false ;
$i = 0 ;
while ( ! $found )
{
if ( $_GET [ 'extra' ] [ $i ] ) {
$found = true ;
} else {
$i ++;
}
}
?>
Hoe kan ik nu controleren, wat er in die array zit, een 0 of een 1 of een 2.. enz..?
Maarten - 18/07/2006 13:04
Erelid
Doe eens gewoon print_r($_GET['extra']), want ik betwijfel dat dat wel kan..?
Chupskie - 18/07/2006 13:19
MySQL beginner
ik heb nu dit, maar dit werkt ook niet:
<?php
for ($i = 0; $i < count($_GET['extra']); $i++)
$_GET['extra'][$i];
?>
<?php
for ( $i = 0 ; $i < count ( $_GET [ 'extra' ] ) ; $i ++ ) $_GET [ 'extra' ] [ $i ] ;
?>
De print_r van $_GET['extra'] is dit:
Array ( [0] => 13245-2 [1] => 12700-2 [2] => 12927-2 )
En wat ik wil bereiken is dit:
<?php
if($_GET['extra'][$i]=="".$arrinf3['caArtNr']."-1"){
}elseif($_GET['extra'][$i]=="".$arrinf3['caArtNr']."-2"){
}else{
//hier de standaard lijst
}
?>
<?php
if ( $_GET [ 'extra' ] [ $i ] == "" . $arrinf3 [ 'caArtNr' ] . "-1" ) {
} elseif ( $_GET [ 'extra' ] [ $i ] == "" . $arrinf3 [ 'caArtNr' ] . "-2" ) {
} else {
//hier de standaard lijst
}
?>
De $i moet dus als er meer product zijn verhoogt worden? Maar hoe moet ik dat nu doen?
Chupskie - 18/07/2006 13:42 (laatste wijziging 18/07/2006 13:48)
MySQL beginner
Okeey, dat kan ik begrijpen, dat je het niet helemaal snapt:p
De wat duidelijkere uitleg:
Ten eerste, het gaat over deze site, waar ik nu mee bezig ben:
http://systemsh...;cnfId=123
Dan is het meteen wat duidelijker, het gaat dus om die extra opties, in de dropdowns.. Op het moment dat een van deze geselecteerd wordt, wordt het artikelnr + het aantal opgeslagen in de URL.
&extra[]=13245-2 // 1 product (artikelnr: 13245 + aantal: 2)
&extra[]=13245-2&extra[]=13584-4 //2 producten
enzovoorts..
Nou laat ik die dropdowns automatisch vullen, vanuit het database, en daarvoor heb ik deze code gecreeerd:
http://www.plaatscode.be/1370 /
Ik hoop dat het nu wat duidelijker is..
edit nog wat vergeten:
Wat ik dus uiteindelijk wil bereiken, is dat als je een aantal selecteerd, vanuit zo'n dropdown, dat de pagina, dan refresht, en dat dan het geselecteerd blijft staan in de dropdown!
Khad dit al werkend gemaakt, met 1 product, alleen als je dan een ander extra artikel ook selecteerde, dan vervangde hij, het andere artikel, terwijl hij deze ook had moeten onthouden!
Maarten - 18/07/2006 13:49 (laatste wijziging 18/07/2006 13:51)
Erelid
Je kan dus bij die dropdown iets zetten à la:
<option value="1 stuks"<?=(isset($_GET['extra']['13245-1']) ? ' selected="selected"' : '')?>>1 stuks</option>
<option value="2 stuks"<?=(isset($_GET['extra']['13245-2']) ? ' selected="selected"' : '')?>>2 stuks</option>
<option value="3 stuks"<?=(isset($_GET['extra']['13245-3']) ? ' selected="selected"' : '')?>>3 stuks</option>
<option value="1 stuks"
<?= ( isset ( $_GET [ 'extra' ] [ '13245-1' ] ) ?
' selected="selected"' : '' ) ?> >1 stuks</option>
<option value="2 stuks"
<?= ( isset ( $_GET [ 'extra' ] [ '13245-2' ] ) ?
' selected="selected"' : '' ) ?> >2 stuks</option>
<option value="3 stuks"
<?= ( isset ( $_GET [ 'extra' ] [ '13245-3' ] ) ?
' selected="selected"' : '' ) ?> >3 stuks</option>
Of je maakt gebruik van JavaScript, en je zet onder die dropdowns dan:
document.getElementById('id_tag_van_die_dropdown').value = 'x stuks';
Simon - 18/07/2006 13:50 (laatste wijziging 18/07/2006 14:13)
PHP expert
<?php
//hier moet dan voor elke nieuwe dropdown/artikel, die $i verhoogt worden!
for($i=0;$i<(count($_GET['extra'])+1);$i++) {
echo '<option value='.$arrinf3['caArtNr'].'-1" '. ($_GET['extra'][$i]==$arrinf3['caArtNr']."-1") ? "selected=\"selected\"" : "" .'>1 - € '.$numprijstot1;
echo '<option value='.$arrinf3['caArtNr'].'-2" '. ($_GET['extra'][$i]==$arrinf3['caArtNr']."-2") ? "selected=\"selected\"" : "" .'>2 - € '.$numprijstot2;
echo '<option value='.$arrinf3['caArtNr'].'-3" '. ($_GET['extra'][$i]==$arrinf3['caArtNr']."-3") ? "selected=\"selected\"" : "" .'>3 - € '.$numprijstot3;
}
?>
<?php
//hier moet dan voor elke nieuwe dropdown/artikel, die $i verhoogt worden!
for ( $i = 0 ; $i < ( count ( $_GET [ 'extra' ] ) + 1 ) ; $i ++ ) { echo '<option value=' . $arrinf3 [ 'caArtNr' ] . '-1" ' . ( $_GET [ 'extra' ] [ $i ] == $arrinf3 [ 'caArtNr' ] . "-1" ) ?
"selected=\" selected\" " : "" . '>1 - € ' . $numprijstot1 ; echo '<option value=' . $arrinf3 [ 'caArtNr' ] . '-2" ' . ( $_GET [ 'extra' ] [ $i ] == $arrinf3 [ 'caArtNr' ] . "-2" ) ?
"selected=\" selected\" " : "" . '>2 - € ' . $numprijstot2 ; echo '<option value=' . $arrinf3 [ 'caArtNr' ] . '-3" ' . ( $_GET [ 'extra' ] [ $i ] == $arrinf3 [ 'caArtNr' ] . "-3" ) ?
"selected=\" selected\" " : "" . '>3 - € ' . $numprijstot3 ; }
?>
probeer het zo eens (niet getest, er kunnen errors zijn)
edit: er was nog een foutje, verbeterd
edit2: ik zie de dropdowns hoor
edit3: probeer nog eens met de code hierboven
Chupskie - 18/07/2006 13:55 (laatste wijziging 18/07/2006 15:43)
MySQL beginner
Mijn code uitgelegd:
if($_GET['extra'][$i]=="".$arrinf3['caArtNr']."-1"){
betekent:
if(20485-1==20485-1"){
Nu moet ik dus alleen kijken, of 20485-1 dus voorkomt in de URL en dus in die array, dus haal ik hem op, uit de url, met het bijhorende array nr: $_GET['extra'][$i]
Alleen nu moet er dus alleen nog ff een loopje worden gezet op dat array nr. want nu krijg ik die niet uitgelezen.
Dus hij moet dat het array nr, hierin zetten [$i] en daarna kun je dus vergelijken, of het artikelnr wat in dat arraynr zit, overeenkomt met bijvoorbeeld 20485-1 en dat is wat mijn code doet.
edit2:
<?php
foreach ($myArray as $i => $dit) {
echo "\$myArray[$i] => $dit.<br />\n";
}
?>
<?php
foreach ( $myArray as $i => $dit ) {
echo "\$ myArray[$i ] => $dit .<br />\n " ; }
?>
krijg ik dit:
$myArray[0] => 13245-2.
$myArray[1] => 12844-1.
$myArray[2] => 13245-3.
Dus dat werkt eindelijk goed, nu nog de vergelijking!
<?php
if($myArray[$i]=="".$arrinf3['caArtNr']."-1"){
}elseif($myArray[$i]=="".$arrinf3['caArtNr']."-2"){
//enz
?>
<?php
if ( $myArray [ $i ] == "" . $arrinf3 [ 'caArtNr' ] . "-1" ) {
} elseif ( $myArray [ $i ] == "" . $arrinf3 [ 'caArtNr' ] . "-2" ) {
//enz
?>
Nou kijkt hij dus bij elke if, of de vergelijking klopt, dit werkt ook helemaal goed.
Alleen hij doet er iedere keer maar weer 1.
Als je een andere selecteerd, laat hij bij de andere if, de selected niet staan, dus hij pakt iedere keer de laatste actie uit de foreach, en niet alle acties??
Moet ik dan de code ook in een foreach of in eeh while zetten dan ofzow?
edit3: en hier de link: http://systemsh...;cnfId=123
xSc - 19/07/2006 08:20
Onbekend
Variabelen en cijfers buiten quotes! Liefst echoën met single quotes.
Gesponsorde links
Dit onderwerp is gesloten .