Just nu i M3-nätverket
Gå till innehåll

Från <select> till PHP


hasseo

Rekommendera Poster

JAg sitter och försöker göra en kundvagn. Handlar gör man genom att lägga till saker i en <select>-lista. Nu till frågan: Det fungerar bra i Javascript men när jag skall skicka informationen till PHP så säger nämda PHP att värdet av listan är 0. Här är koden:

 

<html>

 

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title></title>

<script language="JavaScript">

<!--

 

var vart = 0;

var sant = false;

function add(obj,antal){

 

for(i=0;i<antal.length;i++){

if(antal.charAt(i) != "0"){

if(!parseFloat(antal.charAt(i))){

alert("Antalet måste anges med en siffra");

return false;

}

}

}

if(sant==false){

document.vagnen.kopta.options[0]=null;

sant = true;

}

var laggTill = new Option(antal+" st. "+obj,vart);

document.vagnen.kopta.options[vart] = laggTill;

saker[vart] = antal +" st. "+obj;

 

vart++;

}

//-->

</script>

</head>

<body bgcolor="#999966">

<center>

<FORM name="vagnen" action="test.php" method="post">

<b>Din kundvagn:</b>

<select name="kopta" size=1 multiple="multiple">

<option>Din kundvagn är tom

</select>

<input type="submit" value="Gå till kassan">

</FORM>

</center>

</body>

</html>

 

Här är PHP-koden:

 

reset($HTTP_POST_VARS);

while(list($key,$val)=each($HTTP_POST_VARS)){

echo "$key : $val<br>";

}

tackar på forehand/H

 

[inlägget ändrat 2002-10-14 22:48:54 av hasseo]

Länk till kommentar
Dela på andra webbplatser

Hur ser PHP koden ut?

 

Jag kan tänka mig att du har gått på det felet som de flesta som inte känner till hur PHP har ändrats på sista tiden går på. Dvs att post och get variabler tas om hand på ett nytt sätt.

 

För att ta hand om en post variabel använder du dig av superglobalen $_POST och för att ta hand om en get variabel använder du dig av superglobalen $_GET.

 

It ditt fall använder du method post vilket alltså innebär att du får ta hand om resultatet i listboxen på detta sätt:

 

$_POST['kopta'];

 

Det du oxå måste tänka på är att en multiple listbox kan ge fler än en variabel som svar, därför måste du döpa om "kopta" på detta sätt för att PHP ska fatta att det kan handla om flera svar i samma listbox:

 

<select name="kopta[]" size=5 multiple="multiple">

 

En sista sak du bör tänka på är att PHP bara kommer veta om de fält i listboxen som är markerade, vilket alltså innebär att du måste markera alla fält i listboxen innan du skickar formuläret, detta kan du lösa med javascript om du inte vill att användaren själv ska markera de varor kunden verkligen vill ha.

 

Slutligen, såhär kan du ta hand om formuläret:

 

<?
$ret = $_POST['kopta'];

if (is_array($ret)) {
foreach ($ret as $value) {
	echo $value . "<br>";
}
} else {
echo "Inga varor i korgen?";
}
?>

 

Lycka till med kodandet!

 

Länk till kommentar
Dela på andra webbplatser

Hej BjOrN och tack för ditt svar.

 

Det dyker dock upp ett problem om jag försöker döpa om "kopta" till "kopta[]" och det är att javascriptet får ett syntaxfel. Vet du eller någon hur man kommer runt det?

 

Tackar på forehand/H

 

Länk till kommentar
Dela på andra webbplatser

Om du har en select med size=1 så kan den inte ha multiple. Om du tar bort multiple, och ändrar tillbaka till kopta istället för kopta[] så ska det lösa sig.

 

En size större än 1 betyder att du får en listruta, och inte en drop-ned-meny. Jag tycker att du ska använda dig av en drop-ned-meny eftersom detta är något av en standard inom "kundvagnsbranschen".

 

Om du vill att användaren ska kunna markera flera alternativ så bör du rita upp en tabell i HTML, och sätta en kryssruta före varje.

 

Egentligen tycker jag att du ska spara kundvagnen på servern, alltså inte använda sig av JavaScript för att lägga till en vara, utan bara skicka förfrågan om en vara till servern, och använda dig av sessioner.

På så sätt förenklar man både programmerandet och minimerar chansen att någon vara skulle "tappas bort".

 

Detta betyder dock att du i princip får börja om på ditt skript, men det är bättre att göra något ordentligt från början, är min åsikt ;-)

 

Om något är oklart hjälper jag gärna till lite mer.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...