Avatar billede tfswebguy Nybegynder
01. oktober 2005 - 22:23 Der er 14 kommentarer og
2 løsninger

webshop - Gemme ordreliste i array

Hej, eksperter.

Jeg er i gang med en webshop, og har lavet det meste.
Dog mangler jeg at lave indkøbskurven.
Jeg ville blive meget glad, hvis nogen kunne komme med et forslag om hvordan man kan gemme, vareID på de varer man vil købe, i et array.

Mvh Daniel Truelsen
Avatar billede karmicmind Nybegynder
01. oktober 2005 - 22:44 #1
array (
  $vareid => $antal
)

tror denne model er meget typisk.. (hvert fald i lære-bøgerne..)
Avatar billede tfswebguy Nybegynder
01. oktober 2005 - 22:53 #2
Kan den gemme flere på en gang?

Hvordan vil du trække dem ud igen, på en side?
Avatar billede dmcn Praktikant
01. oktober 2005 - 23:10 #3
Jeg antager du i forvejen benytter sessions på sitet? I så fald:

$_SESSION['kurv'] = array('101','102','42');

foreach ($_SESSION['kurv'] as $id) {
  print('Du har købt en vare med ID '.$id.'<br>');
}
Avatar billede karmicmind Nybegynder
01. oktober 2005 - 23:35 #4
Ja, kendetegnet ved en array er jo netop at den ka gemme på flere værdier af gangen og enda på flere niveau'er, hvis det skulle blive nødvendigt..
Hvis jeg f.eks. købte en pakke Corn Flakes og 3 liter mælk:
$kurv = array (
  "cornflakes" => 1,
  "mælk" => 3
)


for at trække dem ud igen, ville man nok typisk bruge en foreach-løkke..

foreach ($kurv as $vareid => $antal) {
  echo "Du har købt $antal eksemplarer af vare $vareid";
}
Avatar billede tfswebguy Nybegynder
01. oktober 2005 - 23:53 #5
For at se om jeg har placeret den rigtigt:

ved første vare:
$_SESSION['kurv'] = array($vareID => 1)

Ved tilføjelse af varer:
Hvad så?

For da må jeg stå af igen.. Jeg er en nørd til PHP, men når det gælder array damper jeg af
Avatar billede karmicmind Nybegynder
01. oktober 2005 - 23:58 #6
Start med en tom array:
$_SESSION['kurv'] = array();

For at tilføje varer:
$_SESSION['kurv'][$vareID] += 1;
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 00:03 #7
Og som det da virker..
Selv 'Slet vare' funktionen

Takker for hjælpen :)

Håber i kunne holde ud af der skulle lidt ekstra defineret hjælp til
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 00:08 #8
aah, lige en sidste ting :/

Hvordan opdaterer jeg et tal?
F.eks. $_SESSION['kurv'][1] vil jeg have 3 stykker af i stedet for 1
Avatar billede dmcn Praktikant
02. oktober 2005 - 00:09 #9
$_SESSION['kurv'][1] = 3; :)
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 00:10 #10
ja, den sprang lige i hovedet på mig, hehe.. Men du var hurtigere ;)
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 00:24 #11
damn..
http://shit.test.dtweb.dk
hvis i kan se den...
Så kan i prøve at bestille en vare eller 2, for at se hvordan det skal virke..

Har lavet det sådan, ved antal:
<input type='hidden' name='vareid[]' value='<?=$vareID;?>'>
<input name='antal[]' value='<?=$antal;?>' style='width:30px'>

Og den som skal opdatere:
foreach($_POST['vareid'] as $vareID => $antal){
  $_SESSION['kurv'][$vareID] = $antal[$vareID];'
}


Hvad er der galt?
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 00:28 #12
Rettet:
<input name='antal[<?=$vareID;?>]' value='<?=$antal;?>' style='width:30px'>

og:
$_SESSION['kurv'][$vareID] = $antal[$vareID];
Avatar billede karmicmind Nybegynder
02. oktober 2005 - 01:15 #13
Prøv med:

foreach($_POST['antal'] as $vareID => $antal){
  $_SESSION['kurv'][$vareID] = $antal;
}

Det vil også gøre <input type='hidden' name='vareid[]' value='<?=$vareID;?>'> overflødig eftersom du jo har <input name='antal[<?=$vareID;?>]' value='<?=$antal;?>' style='width:30px'> med både vareID og antal..
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 10:54 #14
Virker ikke :(
Den lægger bare en til den sidste vare, hver gang man trykker på 'Opdater antal'
Avatar billede morten-vadskaer Praktikant
02. oktober 2005 - 11:27 #15
Jeg har tidligere smidt en meget, meget simpel indkøbskurv på denne tråd:
http://www.eksperten.dk/spm/646649

Den kan du jo lade dig inspirere af.
Avatar billede tfswebguy Nybegynder
02. oktober 2005 - 13:18 #16
jeg er som sagt ikke meget inde i arrays, så skal have den lidt på begynder niveau.

nu poster jeg lige hele skidtet.

Indkøbskurven:

if(isset($_GET['page']) && $_GET['page'] == 'kurv'){
  if(isset($_GET['do']) && $_GET['do'] == 'toem'){
    $_SESSION['kurv'] = "";
  }
  ?>
  <form method='post'>
    <table border='0' cellspacing='0' cellpadding='2' width='100%'>
      <tr>
        <td>
        &nbsp;
        </td>
        <td>
          Varenr:
        </td>
        <td>
          Navn:
        </td>
        <td>
          Antal:
        </td>
        <td>
          Pris stk:
        </td>
      </tr>
                                       
      <?
        if($_SESSION['kurv']){
          foreach($_SESSION['kurv'] as $vareID => $antal){
            $hent_vare = mysql_query("SELECT * FROM shop_varer WHERE(id='". $vareID ."')");
            $vare = mysql_fetch_array($hent_vare);
            ?>
            <tr>
              <td>
                <input type='checkbox' name='sletvare[]' value='<?=$vareID;?>'>
              </td>
              <td>
                <?=$vare['varenr'];?>
              </td>
              <td>
                <?=$vare['navn'];?>
              </td>
              <td>
                <input name='antal[<?=$vareID;?>]' value='<?=$antal;?>' style='width:30px'>
              </td>
              <td>
                <?=$vare['pris'];?>
              </td>
            </tr>
            <?
        }
      }
      ?>
      <tr>
        <td colspan='5' align='center'>
          <input type='submit' name='sletfrakurv' value='Slet markerede'> <input type='submit' name='opdaterantal' value='Opdater antal'> <a href='http://<?=$host;?>/?page=bestil'>Bestil</a>
        </td>
      </tr>
    </table>
  </form>
  <a href='?page=kurv&do=toem'>Tøm kurv</a>
  <?
}

Og funktionen til at opdatere antal:

if(isset($_GET['opdaterantal'])){
  foreach($_POST['antal'] as $vareID => $antal){
    $_SESSION['kurv'][$vareID] = $antal;
  }
}
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