Avatar billede viggosmor Nybegynder
06. september 2008 - 16:53 Der er 22 kommentarer og
1 løsning

Hjælp til forståelse af php kode. Hvad gør denne kode præcist?

Jeg skal til eksamen på onsdag, og ville meget gerne kunne forklare følgende php kode:

<?php
function getTotalPrice() {
    global $db;
    $cart = $_SESSION['cart'];
    if ($cart) {
        $items = explode(',',$cart);
        $contents = array();
        foreach ($items as $item) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
        }
        foreach ($contents as $id=>$qty) {
            $sql = 'SELECT * FROM books WHERE id = '.$id;
            $result = $db->query($sql);
            $row = $result->fetch();
            extract($row);
            $total += $price * $qty;
        }
    }
    return $total;

}
?>


Er der en venlig sjæl der kan forklare mig i detaljer hvad der gør hvad?
Avatar billede jakobdo Ekspert
06. september 2008 - 17:04 #1
For at vende spørgsmålet rundt.
Hvilke stumper i koden vil du have forklaret?
Avatar billede viggosmor Nybegynder
06. september 2008 - 17:11 #2
Jeg vil godt vide, hvad præcis den kode gør på min hjemmeside...
Det har noget med indkøbskurven at gøre, men præcist hvad og der er noget med databasen at gøre også, og især hvad session gør i scriptet...

Jeg ved at sessions gemmer oplysninger om kunden fra side til side, men hvad gør den præcis i dette tilfælde.. viser indholdet i kurven??
Avatar billede viggosmor Nybegynder
06. september 2008 - 17:18 #3
http://red20001.monline.dk/shoppingcart/cart.php det er på denne side...
at scriptet er...
Avatar billede htx98i17 Professor
06. september 2008 - 20:05 #4
$cart = $_SESSION['cart'];
Den henter blot indkøbskurven ned i en variabel $cart

$cart skal bruges til at finde ud af hvor mange penge der er for i indkøbskurven. thats it.
Avatar billede jakobdo Ekspert
07. september 2008 - 00:17 #5
//Opretter funktionen getTotalPrice()
function getTotalPrice() {
//Henter en global variabel
    global $db;
//Henter data fra session
    $cart = $_SESSION['cart'];
//Indeholder $cart noget ?
    if ($cart) {
//Deler strengen ved hvert ,
        $items = explode(',',$cart);
//Opretter et array
        $contents = array();
//For hvert emne i $cart (som jo er blevet splittet ved hvert ,)
        foreach ($items as $item) {
//nyt array opbygges med antal, hvis intet antal, sættes 1
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
        }
//For hvert emne (id og antal)
        foreach ($contents as $id=>$qty) {
//Hent bogen fra databasen, hvor ID = $id
            $sql = 'SELECT * FROM books WHERE id = '.$id;
//Skyd sql af
            $result = $db->query($sql);
//Udtræk resultat
            $row = $result->fetch();
//Lav array om til variabler
            extract($row);
//Total = pris * antal (fra tidligere)
            $total += $price * $qty;
        }
    }
//Returner TOTAL
    return $total;

}

Så i bund og grund giver den dig den totale pris på varer i en indkøbskurv.
Avatar billede viggosmor Nybegynder
07. september 2008 - 13:57 #6
Tusind takker....

Så kan jeg snakke om det til eksamen...

Læg et svar jakobdo :)
Avatar billede jakobdo Ekspert
07. september 2008 - 18:02 #7
Svar.
Og tjek ellers funktionerne på http://dk.php.net
Avatar billede jakobdo Ekspert
08. september 2008 - 08:29 #8
Takker for point.
Avatar billede viggosmor Nybegynder
08. september 2008 - 14:41 #9
Selv tak-lige et spørgsmål:

Har den ikke kontakt med databasen?
Avatar billede jakobdo Ekspert
08. september 2008 - 14:56 #10
Jo via global $db;
$db oprettes garanteret tidligere i noget kode.
Og den kalder jo databasen her:

$sql = 'SELECT * FROM books WHERE id = '.$id;
//Skyd sql af
            $result = $db->query($sql);
//Udtræk resultat
            $row = $result->fetch();
Avatar billede viggosmor Nybegynder
08. september 2008 - 15:23 #11
Ja, der bliver oprettet forbindelse vha:

// Include database connection
require_once('inc/global.inc.php');
Avatar billede jakobdo Ekspert
08. september 2008 - 15:37 #12
Så har du noget database i det.
Avatar billede viggosmor Nybegynder
08. september 2008 - 16:01 #13
Oki takker.... synes det er lidt svært at gennemskue, jeg bliver vist aldrig en haj til php.... øv :)
Avatar billede jakobdo Ekspert
08. september 2008 - 18:02 #14
Øvelse gør mester. :o)
Avatar billede viggosmor Nybegynder
09. september 2008 - 10:59 #15
Ja, he he

Jeg ville meget gerne have hjælp til denne kode også:



<form action="https://www.paypal.com/cgi-bin/webscr" method="post">     

   
    <div align="center">
      <input type="hidden" name="cmd" value="_cart"/>
      <input type="hidden" name="upload" value="1"/>
      <input type="hidden" name="business" value="carina2b@hotmail.com"/>
      <input type="hidden" name="item_name_1" value="<?php echo getTotalContents(); ?>"/>
      <input type="hidden" name="currency_code" value="EUR">
      <input type="hidden" name="amount_1" value="<?php echo getTotalPrice(); ?>"/>
       
      <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
    </div>
</form>


Det er der hvor kunden trykker sig videre til paypal, jeg vil også komme ind på det til eksamen...


Hvad sker der præcist der?

Hele sidens kode er her:


<?php
// Include MySQL class
require_once('inc/mysql.class.php');
// Include database connection
require_once('inc/global.inc.php');
// Include functions
require_once('inc/functions.inc.php');
// Start the session
session_start();
// Process actions
$cart = $_SESSION['cart'];
$action = $_GET['action'];
switch ($action) {
    case 'add':
        if ($cart) {
            $cart .= ','.$_GET['id'];
        } else {
            $cart = $_GET['id'];
        }
        break;
    case 'delete':
        if ($cart) {
            $items = explode(',',$cart);
            $newcart = '';
            foreach ($items as $item) {
                if ($_GET['id'] != $item) {
                    if ($newcart != '') {
                        $newcart .= ','.$item;
                    } else {
                        $newcart = $item;
                    }
                }
            }
            $cart = $newcart;
        }
        break;
    case 'update':
    if ($cart) {
        $newcart = '';
        foreach ($_POST as $key=>$value) {
            if (stristr($key,'qty')) {
                $id = str_replace('qty','',$key);
                $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
                $newcart = '';
                foreach ($items as $item) {
                    if ($id != $item) {
                        if ($newcart != '') {
                            $newcart .= ','.$item;
                        } else {
                            $newcart = $item;
                        }
                    }
                }
                for ($i=1;$i<=$value;$i++) {
                    if ($newcart != '') {
                        $newcart .= ','.$id;
                    } else {
                        $newcart = $id;
                    }
                }
            }
        }
    }
    $cart = $newcart;
    break;
}
$_SESSION['cart'] = $cart;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>Organic Cotton, et multimediedesign eksamensprojekt</title>
    <meta http-equiv="Content-Language" content="en-us" />
   
    <meta http-equiv="imagetoolbar" content="no" />
    <meta name="MSSmartTagsPreventParsing" content="true" />
   
    <meta name="description" content="Køb Vero modas nye økologiske kollektion her!" />
    <meta name="keywords" content="Vero Moda, Organic Cotton" />
   
    <meta name="author" content="Organic Girls" />
   
    <style type="text/css" media="all">
    @import "../organic.css";
    </style>
</head>
<body>

<div id="content">
<div id="banner"><object type="application/x-shockwave-flash" data="../images/lonesBanner4.swf" width="900" height="200">
    <param name="movie" value="../images/lonesBanner4.swf" />
    <param name="quality" value="high" />
</object></div>
<div id="maincontent">
<div id="vdividermenu">
<ul>
<li><a href="../index.php" title="Home">Forside</a></li>
<li><a href="index.php" title="webshop">Webshop</a></li>
<li><a href="../visioner.php" title="visioner">Visioner</a></li>
<li id="current"><a href="../holdninger.php" title="Grundholdninger">Grundholdninger</a></li>
<li><a href="../betingelser.php" title="Handelsbetingelser">Handelsbetingelser</a></li>   
<li><a href="../kontakt.php" title="kontakt">Kontakt </a></li>
</ul>
</div>
<div id="CartIndhold">
<?php
function getTotalPrice() {
    global $db;
    $cart = $_SESSION['cart'];
    if ($cart) {
        $items = explode(',',$cart);
        $contents = array();
        foreach ($items as $item) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
        }
        foreach ($contents as $id=>$qty) {
            $sql = 'SELECT * FROM books WHERE id = '.$id;
            $result = $db->query($sql);
            $row = $result->fetch();
            extract($row);
            $total += $price * $qty;
        }
    }
    return $total;

}
?>

<?php
function getTotalContents() {
    global $db;
    $cart = $_SESSION['cart'];
    if ($cart) {
        $items = explode(',',$cart);
        $contents = array();
        foreach ($items as $item) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
           
        }
       
    }
    return $cart;

}
?>

<h1>Din kurv:</h1>


<?php
echo writeShoppingCart();
?>
<?php
echo showCart();
?>
<br/>
<form>
<input type="button" class="red" onclick="window.location.href='index.php'" value="Gå tilbage og shop videre"/>
</form>


<p>Klik på Paypal knappen når du er klar til at gennemføre dit køb. Du vil blive taget til Paypals side for at indtaste betalingsoplysninger. </p>
<p>Tak fordi du handler hos Vero Moda!</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">     

   
    <div align="center">
      <input type="hidden" name="cmd" value="_cart"/>
      <input type="hidden" name="upload" value="1"/>
      <input type="hidden" name="business" value="carina2b@hotmail.com"/>
      <input type="hidden" name="item_name_1" value="<?php echo getTotalContents(); ?>"/>
      <input type="hidden" name="currency_code" value="EUR">
      <input type="hidden" name="amount_1" value="<?php echo getTotalPrice(); ?>"/>
       
      <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
    </div>
</form>
</div>
</div>
</div>

<center><div id="footer2">
  <p>&copy;2008 | Vero Moda </p>
  </div>
</center>




</body>
</html>






Jeg vil godt give nogen flere point....
:)
Avatar billede jakobdo Ekspert
09. september 2008 - 12:07 #16
Jeg synes du begynder at stramme den.
Er det ikke på tide du igen forsøger lidt selv ?
http://dk.php.net/funktions_navn
Og spørg så til de ting du slet ikke forstår.
Avatar billede viggosmor Nybegynder
09. september 2008 - 12:36 #17
Undskyld mange gange....

Jeg ser på linket...
Avatar billede jakobdo Ekspert
09. september 2008 - 13:05 #18
Der skulle have været en :o) Så det var ikke ment så hårdt som det står skrevet! :o)
Avatar billede viggosmor Nybegynder
09. september 2008 - 13:14 #19
Oki, he he....

Jeg har nu siddet og lavet en forklaring:

Form action: Reference til det script, som skal modtage og behandle formularen, i dette tilfælde Paypal.

Method=”post” : sendemetode  (Standardværdien er "get", men det mest almindelige er "post".)
Ved "get" sendes de indtastede oplysninger i URL'en, mens de ved "post" sendes skjult for brugeren.

Input type=”hidden” : angiver hvilken type felt der skal oprettes.I dette tilfælde hidden, som ikke kan ses af brugerne (med mindre de går ind og læser  koderne). Brugeren har heller ikke mulighed for at ændre de informationer, du angiver i skjulte felter.

name=”amount_1" Navn på input-elementet, som sendes sammen med formularen.

value="<?php echo getTotalPrice(); ?>” Den værdi, der sendes med formularen. I dette tilfælde  funktionen getTotalPrice();

input type="image” src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif"  Paypal knap

Er det korrekt forstået?

Igen jeg undskylder mit spørgsmål tidligere...
Jeg kan godt se at jeg i det mindste må prøve at finde ud af det selv.... :)
Avatar billede jakobdo Ekspert
09. september 2008 - 13:28 #20
Der er kun en vej frem og det er op ad bakke. :o)

Du skriver: Brugeren har heller ikke mulighed for at ændre de informationer, du angiver i skjulte felter.

Det er ikke korrekt.
Alt som en browser modtager, kan faktisk rettes.
Så hvis man åbner siden, kan man også rette i hidden felt typer.
Selv felter som er lavet IKKE SKRIVBARE, kan faktisk skrives i.
Så derfor må man aldrig stole blindt på data fra en form eller hidden eller lign.
Avatar billede viggosmor Nybegynder
09. september 2008 - 13:41 #21
Oki, så blev jeg så klog... :)

Har det ellers fra html.dk

Takker for din hjælp....
Avatar billede viggosmor Nybegynder
10. september 2008 - 13:29 #22
Tak Jakobdo, har nu været til eksamen og fik et 10-tal så jeg er selv meget godt tilfreds...

Takker for din hjælp... :)
Avatar billede jakobdo Ekspert
10. september 2008 - 15:30 #23
Tillykke med det. :o)
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