Avatar billede rasmusdegnbol Nybegynder
28. maj 2005 - 21:36 Der er 5 kommentarer og
1 løsning

array til variabel

Hey eksperter

et lille tricky spørgsmål.

Jeg har et array der ser sådan her ud.

Array( [grundvaerdi] => 1200 [6] => 400 [7] => 600 [samlet_pris] => 2200 )

Hvilket henter prisinfo på "ekstra produkter" man har valgt via en checkbox og tilhørende FORM.

Checkboxene er dynamiske alt efter hvor mange extra produkter der findes i databasen, derfor er 6 = productID (unikt!) og 7 = produktID 7 osv. osv.

Mit spørgsmål, siden jeg ingen styr på ARRAYS har er hvordan jeg kan omdanne de valgte productID'er til en variabel så jeg kan udtrække produktet igen i databasen og bruge det til at lave en færdig ordreoversigt.
Avatar billede dulius Nybegynder
28. maj 2005 - 21:46 #1
hvis vi antager at dit array hedder $array, så kan du gøre noget i den her stil:

foreach($array as $key => $value)
{
    $produkt_$key = $value;
}

så vil du få sat alle afkrydsede ekstra produkter i variabler der hedder $produkt_produktetsID og de vil have pris som værdi.

Ved ikke helt om jeg har forstået dit spørgsmål rigtigt, men ellers må du jo lige sige til. Kan godt være jeg er helt forkert på den :D
Avatar billede rasmusdegnbol Nybegynder
28. maj 2005 - 22:18 #2
hm, sådan som jeg ser det giver det et problem da jeg så igen ikke ved hvilke variabler der vil komme ud af min FORM.

Gerne en løsning hvor man kun finder de værdier der er sat på f.eks. 0 eller 1 eller 2....alle andre værdier i min POST liste er bogstaver. Jeg ved det ikke, anyone?
Avatar billede dulius Nybegynder
28. maj 2005 - 22:35 #3
Kan du komme med koden til din form, så er det noget nemmere at hjælpe dig. Det du har brug for er et array der KUN indeholder de ekstra produkter der skal bruges.
Avatar billede rasmusdegnbol Nybegynder
28. maj 2005 - 22:42 #4
her er Java delen.

        function LoadCalculatorJava() {
echo "<script type=\"text/javascript\">\n";
echo "  var price = $_SESSION[rabatprice];\n";
echo "  var currency = \" kr. u. moms\";\n";
echo "  var outputId = \"pris_ialt\";\n";
echo "var eUdstyr = {}\n";
echo "  function ekstraudstyr(chkBox) {\n";
echo "      eUdstyr[chkBox.name] = chkBox.checked;\n";
echo "  }\n";
echo "  function submitEkstraudstyr(outputElm) {\n";
echo "      for (i in eUdstyr) {\n";
echo "          outputElm.value += (eUdstyr[i]) ? i+\",\" : \"\";\n";
echo "      }\n";
echo "      outputElm.value = outputElm.value.substring(0,outputElm.value.length-1);\n";
echo "      return true;\n";
echo "  }\n";
echo "  function changePrice(outputElm,addPrice) {\n";
echo "        price += addPrice;\n";
echo "        outputElm.value = price;\n";
echo "        document.getElementById(outputId).innerHTML = price+currency;\n";
echo "  }\n";
echo "</script>\n";
        }


SELVE FORMEN.



<form name="form1" type="post" action="order.php" onsubmit="return submitEkstraudstyr(this.ekstraudstyrsListe);">
  <input type="hidden" name="grundvaerdi" value="<? echo "$_SESSION[rabatprice]"; ?>">
  <br>
<?                    ExtraUdstyr($productID); ?>
  <hr>
  Samlet pris: <span id="pris_ialt"></span>
  <input type="hidden" name="ekstraudstyrsListe">
  <input type="hidden" name="manufactor" value="<?=$manufactor?>">
  <input type="hidden" name="model" value="<?=$productID?>">
  <input type="hidden" name="samlet_pris">
  <input type="submit" value="Send">
</form>



EKSTRAUDSTYR(); er checkboxene.

function ExtraUdstyr($productID){

Rabatpris($userID); // bare til udregning af rabatten som brugeren er sat til
$sql_modelinfo = mysql_query("SELECT * FROM products WHERE category='2'");
if (mysql_num_rows($sql_modelinfo) > 0) {
while($row_modelinfo = mysql_fetch_array($sql_modelinfo)) {
                $productID = $row_modelinfo["productID"];
                $manufactor = $row_modelinfo["manufactor"];
                $model = $row_modelinfo["model"];
                $price = $row_modelinfo["price"];

                $rabatprice = $price * $_SESSION["rabatprocent"];
                $calculaterabat = $rabatprice / 100;
                $totalsum = $price - $calculaterabat;

                echo "<input type=\"checkbox\" name=\"$productID\" value=\"$totalsum\" onclick=\"ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));\">$model - $totalsum($price uden rabat)<br>\n";

                }}
                }


Lidt rodet ja, men det har virket indtil nu ;)
Avatar billede dulius Nybegynder
28. maj 2005 - 23:04 #5
Din løsning vil være at sætte dine checkbokse til at sendes som et array. I din funktion ekstraudstyr() skal du bare erstatte denne linje:
<input type=\"checkbox\" name=\"$productID\" value=\"$totalsum\" onclick=\"ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));\">

med:

<input type=\"checkbox\" name=\"ekstraudstyr[$productID]\" value=\"$totalsum\" onclick=\"ekstraudstyr(this);changePrice(this.form.samlet_pris,((this.checked) ? Number(this.value) : -Number(this.value)));\">

på den side formen bliver sendt til vil du så have et array der hedder $ekstraudstyr. Dette array vil indeholde alle de afkrydsede checkbokse med deres id og deres værdi.

Hvis f.eks. den checkbox med produkt-id nr. 765 med en værdi på 300 vil $ekstraudstyr[765] indeholde værdien 300.

Så har du et array med alle produkt-id'er og priser på de afkrydsede checkbokse. Du kan løbe arrayet igennem med:
foreach($ekstraudstyr as $key => $value)
{
// Gør hvad du har lyst til her :)
}

Er det ikke bare det du skal bruge?

Mvh. Julius
Avatar billede rasmusdegnbol Nybegynder
29. maj 2005 - 21:26 #6
Det virkede, poster lige min kode hvis andre skulle finde brug for det.

if(isset($extra)) //checker om der er valgt nogle checkboxes
      {
      foreach($extra as $key => $value)
                {
      $sql = mysql_query("SELECT * FROM products WHERE productID='$key'");
                if (mysql_num_rows($sql_modelinfo) > 0) {
                while($row = mysql_fetch_array($sql)) {
                $productID = $row["productID"];
                $model = $row["model"];
                echo "$model<br>";
                }
                }}
      }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester