Avatar billede Six Nybegynder
18. december 2004 - 00:45 Der er 27 kommentarer og
1 løsning

Opbevare data i en variabel inden indsættelse i database.

Hej eksperter.

Jeg er ved at lave en webshop og til det formål, er jeg ved at bygge min indkøbskurv.

Jeg vil lave det sådan at alt data bliver opbevaret i et array, INDEN kunden trykker bestil, og derefter ryger ordren i databasen.

Jeg kan bare ikke overskue hvordan jeg skal opbevare disse data inden selve bestillingen finder sted.

Noget ala.

$kurv['varelinie']['v_id']['o_id']

Men jeg kan ikke gennemskue det. Er der nogen der kan hjælpe mig i gang med sådan en sag ?
Avatar billede skovenborg Nybegynder
18. december 2004 - 01:15 #1
sessions ville være et meget godt bud:
http://dk.php.net/manual/en/ref.session.php

Så kan du starte en session hos brugeren når kunden går ind i webshoppen (session_start()) og så tilføje de nødvendige data efterhånden til $_SESSION (se eksempler på siden). Så kan du altid lukke den efter behag (fx når ordren er lavet).
Avatar billede Six Nybegynder
18. december 2004 - 01:19 #2
Jeg opretter en session, for at sikre mig at de forskellige brugere ikke ligger ting i hinandens indkøbsvogne.

Er det muligt at opbevare flere varer i 1 session ?

Pt er jeg kommet frem til:

$arrKurv = array(
"v_id" => array(),
"antal" => array(),
);

// Indsæt - en ad gangen
$arrKurv["v_id"][] = 75;
$arrKurv["antal"][] = 3;

$arrKurv["v_id"][] = 24;
$arrKurv["antal"][] = 1;

foreach( $arrKurv as $noegle => $vaerdi ) {
    foreach( $vaerdi as $noegle2 => $vaerdi2 ) {
        echo "[" . $noegle . "][" . $noegle2;
        echo "] = " . $vaerdi2 . "<br />";
    }
}
Avatar billede stefmeister Nybegynder
18. december 2004 - 01:26 #3
sådan så min gamle kurv ud:

    if(!isset($_SESSION[$_SESSION['bruger']])) {
        $_SESSION[$_SESSION['bruger']] = array();
        $_SESSION[$_SESSION['bruger']][] = $new;
    } else {
        $_SESSION[$_SESSION['bruger']][] = $new;
    }


hvor $_SESSION[$_SESSION['bruger']][] er kurven.
Avatar billede Six Nybegynder
18. december 2004 - 01:33 #4
stefmeister - hvordan tilføjer du så flere varer i kurven ?

Jeg er ikke så skarp til det med arrays :(
Avatar billede skovenborg Nybegynder
18. december 2004 - 01:54 #5
Skulle måske lige lave et eksempel også på hvordan man kunne løse det med sessions.

Først en side hvor man kan tilføje varer:

varer.php
------------
<body>
<form action="tilfojvarer.php" method="post">
Navn:<input type="text" name="varenavn"><br />
Antal:<input type="text" name="antal"><br />
Pris:<input type="text" name="pris"><br />
<input type="submit" value="Læg i kurv">
</form>
</body>

Når man trykker submit bliver formen smidt over i filen tilfojvarer.php

tilfojvarer.php
----------------
<?php
if ($_POST) {
    session_start();
    if (isset($_SESSION['varer'])) {
        $varer = $_SESSION['varer'];
    }
    else {$varer = array();}
    $varer[] = array($_POST['varenavn'],$_POST['antal'],$_POST['pris']);
    $_SESSION['varer'] = $varer;
    Header("Location: varer.php");
}
?>
Læg mærke til at dette i tilfojvarer er det eneste der skal stå. Når man bruger sessions må headeren ikke være sendt endnu, det vil bla. sige at intet må være skrevet på siden.

Nu kan du så i din kurv hente de forskellige data:

kurv.php
---------
<?php
session_start();
if (isset($_SESSION['varer'])) {
    $varer = $_SESSION['varer'];
}
?>

og så senere:
<?php
if ($varer) {print_r($varer);}
?>
Kan selvfølgelig gøres pænere, men nu ser du da strukturen i arrayet (som du kan løbe igennem med en almindelig for-løkke.
Avatar billede Six Nybegynder
18. december 2004 - 01:56 #6
Kunne dette ikke se ud som starten på en variabel der holder styr på alle informationerne ?

<?php

session_start();
session_register("kurv");

$_SESSION['kurv'] = array(
"v_id" =>  array(),
"antal" => array(),
);

$_SESSION['kurv']['v_id'][] = 75;
$_SESSION['kurv']['antal'][] = 3;

$_SESSION['kurv']['v_id'][] = 753;
$_SESSION['kurv']['antal'][] = 1;
$i = 0;
while ($_SESSION['kurv']['v_id'][$i] != "") {
echo $_SESSION['kurv']['v_id'][$i]. " - " . $_SESSION['kurv']['antal'][$i]."<br />";
$i++;
};

?>
Avatar billede skovenborg Nybegynder
18. december 2004 - 02:00 #7
tjo, selvom jeg nok mere vil anbefale, at du lavede arrayet for sig, og først til sidst lagde det ind i $_SESSION.

Dvs. du kunne beholde koden fra 18/12-2004 01:19:07 (hvilken jo er stort set det samme som nu) og tilføje linien:
$_SESSION['kurv'] = $arrKurv;
Avatar billede Six Nybegynder
18. december 2004 - 02:00 #8
Kan jeg ikke lave sessions i en fil jeg includer ?

F.eks. includer jeg min kurv.php på min index.php, vil det så ikke virke eller ?
Avatar billede stefmeister Nybegynder
18. december 2004 - 02:10 #9
<html>
<head>
<?
session_start();
include("db.php");


  $new = $_GET['new'];
  $user = $_GET['user'];
  $_SESSION['bruger'] = $_GET['user'];
  if($new) {


$sql = "SELECT FILMID,FILMNAVN,GENRE,DVDER,LINK,PRODUKTION,PRIS FROM FILMTABEL WHERE FILMID = $new";
$qh = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $qh ) ) {


print("<title>".$row[FILMNAVN]." er tilføjet til din kurv</title></head>");

    if(!isset($_SESSION[$_SESSION['bruger']])) {
        $_SESSION[$_SESSION['bruger']] = array();
        $_SESSION[$_SESSION['bruger']][] = $new;
    } else {
        $_SESSION[$_SESSION['bruger']][] = $new;
        //unset($_SESSION[$_SESSION['bruger']]);
    }
    }   

    header("Location: film.php");
}
?>


dette er hele min kurv.

hvor $new, det er så varens id-nummer. Så senere hen når jeg går til kassen, så går den ind fra en database og finder ud af hvad de forskellige produkter er.
Avatar billede skovenborg Nybegynder
18. december 2004 - 02:12 #10
jo, men som sagt må selve din html-kode ikke være startet når du starter sessionen (det vil du også opleve hvis du prøver). Efter du har startet sessionen på siden med session_start(); så kan du bruge $_SESSION ligeså tosset du vil.
Så et forslag ville være at det allerførste du gør på siden (før doctype og alting) er at skrive:
<?php
session_start();
?>
og så senere inkludere din kurv.php som normalt. Denne skal så til gengæld ikke indeholde kurv.php.
Avatar billede Six Nybegynder
18. december 2004 - 02:16 #11
stefmeister - takker, men det virker lidt advanceret for mig ;D

Skovenbor:
ahh - jeg har session_start() i toppen af min index.php.

Jeg sidder lige og kigger på dit eksempel.

Det eneste jeg kan få den til at udskrive er:
Array ( [0] => asdasd [1] => 56 [2] => 123123 ) og det gøres med print_r($varer[1]);

Hvordan går jeg dybere i arrayet så jeg kun får informationerne og ikke array ( blah )?
Avatar billede Six Nybegynder
18. december 2004 - 02:17 #12
Det skal lige siges at jeg værdsætter jeres hjælp MEGET, da jeg skal være færdig med det i morgen :/

Skal afleveres mandag, som eksamens projekt - og jeg føler mig nok liiiidt presset ;D
Avatar billede skovenborg Nybegynder
18. december 2004 - 02:25 #13
Så det er ikke nu man skal gå i seng eller hva' ;-)

Angående print_r var det bare et hurtigt eksempel. Vil du kun have informationer skal du som sagt løbe array'et igennem med en for-løkke, fx:
<?php
if ($varer) {
    for ($i=0;$i<sizeof($varer);$i++) {
        echo "Vare: ".$varer[$i][0]."<br />";
        echo "Antal: ".$varer[$i][1]."<br />";
        echo "Pris: ".$varer[$i][2]."<br />";
    }
}
?>
Avatar billede Six Nybegynder
18. december 2004 - 02:29 #14
jammen det er smukt det der - :)

Nope, jeg kan ikke smutte i kassen endnu hehe. Man er frivilligt tvunget - endnu engang.

Kan jeg få dig til at skrive hvis du går i seng forløbigt?
Avatar billede skovenborg Nybegynder
18. december 2004 - 02:34 #15
jo, men det er ved at være lige op over - skriver også selv en 3g. opgave, så det må man også tage hensyn til (selvom jeg ikke skriver så intensivt som du nok gør med dit program) ;-)
Avatar billede Six Nybegynder
18. december 2004 - 02:39 #16
hehe ja det er klart :D

Plejer man ikke at kunne lave en <input type="hidden" name="v_id" value="$row->V_ID">?

nu ved jeg godt at syntaxen ikke er i orden mht php, men problemet er at den bliver vist
Avatar billede Six Nybegynder
18. december 2004 - 02:40 #17
sry - jeg kan lære lige at kigge ordenligt efter, men man er begyndt ikke at kan se skoven for bare træer ;D

Hvis du smutter i kanen, så godnat og tak for den foreløbige hjælp - er det i orden med dig hvis jeg lige holder spm'et åbent til i morgen ?
Avatar billede skovenborg Nybegynder
18. december 2004 - 02:42 #18
jo det burde det - med mindre du har lavet et eller andet grueligt galt et andet sted på siden.
Avatar billede skovenborg Nybegynder
18. december 2004 - 02:43 #19
og jo det er det - så godnat da (er også begyndt at falde i staver, såå)
Avatar billede Six Nybegynder
18. december 2004 - 02:53 #20
Hvis du ikke er smuttet i seng endnu - hvordan får jeg header(location: blah) til at gå tilbage til den vare den kom fra ?
Avatar billede stefmeister Nybegynder
18. december 2004 - 03:16 #21
du skriver

header("location: dinside.php");


men header er ikke altid så god, for der er noget med at man ikke bare kan skrive den hvor det skal være. men ved ikke helt.
Avatar billede Six Nybegynder
18. december 2004 - 04:14 #22
Ja, headeren må man ikke skrive, hvis der kommet et output før den. Men det var mere mht at få headeren til at gå tilbage til det link den kom fra. Men det løste jeg med header("location: $_SERVER['HTTP_REFERER']");
Avatar billede Six Nybegynder
18. december 2004 - 13:20 #23
Skovenborg - er du til stede?

Jeg har problemer med mit array :(
Avatar billede skovenborg Nybegynder
18. december 2004 - 13:38 #24
jajaja, nu kommer jeg - min hals er farvet (som den lød oprindeligt) :-)

Hvad er problemmet - nu da jeg er stået op ;-)
Avatar billede Six Nybegynder
18. december 2004 - 13:42 #25
Hej og godmorgen :D

Jeg har oprettet et nyt spm: http://www.eksperten.dk/spm/572306 med mit nyeste problem på stammen.

Smider du ikke lige et svar, så jeg kan få lukket her ? :D
Avatar billede skovenborg Nybegynder
18. december 2004 - 13:44 #26
nå, okay - så værsgo' :-)

nu må jeg se om jeg kan få tid til at kigge på det andet - ellers er der sikkert også mange andre til stede :-)
Avatar billede Six Nybegynder
18. december 2004 - 13:46 #27
Det håber jeg virkelig du har, hehe. Jeg er på panikkens rand.
Avatar billede Six Nybegynder
18. december 2004 - 13:49 #28
Tak for hjælpen i øvrigt :D
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