Avatar billede pehory Nybegynder
14. februar 2005 - 23:25 Der er 11 kommentarer og
1 løsning

Hjælp til sessions og databasekald

Hej eksperter

Med lidt hjælp herinde fra har jeg fået noget af et kurv system til at virke. Der er dog nogle fejl og mangler jeg håber i kan hjælpe mig med.
I kan se det her: http://www.designstroke.dk/bestaahh/index.php?side=produkter
1) Det første problem er at den viser fejl inden man tilføjer en vare til kurven.
2) Hvordan kan jeg få min kurv til at hente hente data fra en mysql db med det id der der er blevet tilføjet?

Den relevante kode i min kurv:
<? session_start();
$foerstelinie=true;
foreach($_SESSION['varer'] as $vareid => $antal){
  if($antal>0){
    if($foerstelinie){
      echo '';
      $foerstelinie=false;
    }
    echo '' . $vareid . ': ' . $antal . 'stk.<br>';

  }
}
if(!$foerstelinie){
  echo '</ul>';
} ?>

Den skal altså hente nogle data fra en db med $vareid (where id = $vareid)
50 point for hver.


Mvh Peter
Avatar billede alister_crowley Nybegynder
15. februar 2005 - 04:14 #1
1. Prøv med:

$kurvArray[] = $_SESSION['varer'];
foreach($kurvArray as $vareid => $antal){

2.

Det ville være dumt at gøre det før du skal vise kunden's indhold, eller producere den endelige faktura.
Men ellers er det jo bare at hente det ud fra dit $vareID.
Avatar billede gizp Nybegynder
15. februar 2005 - 08:55 #2
1) Prøv med: foreach(!empty($_SESSION['varer']) as $vareid => $antal){

2) Du skal jo bare lave en query som henter dataerne. Cirka sådan ;)

foreach($_SESSION['varer'] as $vareid => $antal){
  if($antal>0){
    if($foerstelinie){
      echo '';
      $foerstelinie=false;
    }
    $res = mysql_query("SELECT * FROM tabel WHERE id = '". $vareid ."'");
    $row = mysql_fetch_array($res)
    echo '' . $row['navn'] . ': ' . $antal . 'stk.<br>';

  }
}
Avatar billede pehory Nybegynder
15. februar 2005 - 13:15 #3
Ingen af 1'erne virker desværre. Den første skriver dog ingen fejl men man kan ikke tilføje varer til kurven, og den anden virker overhovedet ikke. Der bliver fejlen ved med at stå.
Med gizps 2'er får jeg en T_ECHO fejl på linien med echo'en på.
Avatar billede gizp Nybegynder
15. februar 2005 - 20:53 #4
Det er fordi der mangler et semikolon ;)

foreach($_SESSION['varer'] as $vareid => $antal){
  if($antal>0){
    if($foerstelinie){
      echo '';
      $foerstelinie=false;
    }
    $res = mysql_query("SELECT * FROM tabel WHERE id = '". $vareid ."'");
    $row = mysql_fetch_array($res);
    echo '' . $row['navn'] . ': ' . $antal . 'stk.<br>';

  }
}
Avatar billede gizp Nybegynder
15. februar 2005 - 20:56 #5
Men til problem 1) problemet er $_SESSION ikke er sat, og derfor ikke eksisterer ;)

Så du kan jo evt. bare lave en if sætning der tjekker om $_SESSION['varer'] eksisterer.

Ex.
if (!empty($_SESSION['varer'])) {
  Din kode til kurven
} else {
  echo "Kurven er tom..";
}
Avatar billede Slettet bruger
15. februar 2005 - 21:09 #6
if($foerstelinie){
      echo '';
      $foerstelinie=false;
    }

og

if(!$foerstelinie){
  echo '</ul>';
}

var udelukkende stil at fyre, at det blev lavet som en liste. Hvis du vil nøjes med at lave linierne med <br> imellem, kan de bare slettes.

Inden den foreach og efter session_start, kan du køre følgende, for at sikre dig, at $_SESSION['varer'] virkelig indeholder et array:

if(!isset($_SESSION['varer'])){
  $_SESSION['varer']=array();
}
Avatar billede Slettet bruger
15. februar 2005 - 21:11 #7
Jeg kan da ikke stave idag. "stil at fyre" skulle have været "til at styre". Heldigvis ser min kode i det mindste OK ud.
Avatar billede Slettet bruger
15. februar 2005 - 21:12 #8
gizps metode 20:56 er også en mulighed.
Avatar billede pehory Nybegynder
15. februar 2005 - 21:18 #9
Jeg takker mange gange. Det virker helt efter hensigten :-)
Men jeg har stadig ikke fået løst min første problem: inden folk ligger noget i kurven kommer fejlen:
Warning: Invalid argument supplied for foreach() in /var/www/designstroke.dk/public_html/bestaahh/kurv.php on line 19
Hvad gør jeg ved det?

Desuden et lille tillægsspørgsmål (hvis i ønsker giver jeg gerne 50 for den også): Når jeg nu ganger antallet af varer med prisen (hente fra db) hvordan får jeg så den samlede sum af kurvens indhold?
Avatar billede Slettet bruger
15. februar 2005 - 21:27 #10
Før foreach:

$totalsum=0;

inde i foreach, lige når du har udregnet totalprisen for denne vare:

$totalsum+=$varesum;

Bagefter ligge den totale sum i $totalsum

Der burde ikke være et ugyldigt argument til foreach, hvis du bare enten lægger den foreach ind i en if, der kun køres, når kurven indeholder noget (som i gizps forslag) eller sørger for at kurven i det mindste indeholder et tomt array. gizps if-forslag er egentlig det bedste af de to, men begge burde fjerne fejlen.
Avatar billede gizp Nybegynder
15. februar 2005 - 21:41 #11
Du kan evt. kigge her: http://eksperten.dk/spm/455433 . Det er det jeg har brugt som eksempel til mit.
Avatar billede pehory Nybegynder
15. februar 2005 - 22:16 #12
Jeg takker mange gange. Jeg har fået det hele til at virke nu.
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