Avatar billede TiHs Nybegynder
19. april 2007 - 14:14 Der er 5 kommentarer og
2 løsninger

Vise og indtaste sum og beløb i tabel

Hej eksperter.

Har en tabel der ser sådan her ud:
CREATE TABLE `toej` (
  `id` int(6) unsigned NOT NULL auto_increment,
  `del` varchar(100) NOT NULL default '',
  `pic` text NOT NULL,
  `maerke` varchar(100) NOT NULL default '',
  `pris` decimal(18,2) NOT NULL default '0.00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;


Sådan her viser jeg beløb og summer:

functions.inc.php:

<?php
function writeShoppingCart() {
    $cart = $_SESSION['cart'];
    if (!$cart) {
        return 'Indkøbskurven er tom';
    } else {
        // Parse the cart session variable
        $items = explode(',',$cart);
        $s = (count($items) > 1) ? 's':'';
        return 'Du har <a href="cart.php">'.count($items).' ting'.$s.' i din indkøbskurv</a>';
    }
}

function showCart() {
    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;
        }
        $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
        $output[] = '<table border=1 cellspacing=0 borderColor=black>';
        foreach ($contents as $id=>$qty) {
            $sql = 'SELECT * FROM toej WHERE id = '.$id;
            $result = $db->query($sql);
            $row = $result->fetch();
            extract($row);
            $output[] = '<tr>';
            $output[] = '<td width=30px><a href="cart.php?action=delete&id='.$id.'" class="r">Slet</a></td>';
            $output[] = '<td width=60px>'.$del.'</td>';
            $output[] = '<td width=200px>Mærke:<br /> '.$maerke.'</td>';
            $output[] = '<td width=90px>Kr:'.$pris.'</td>';
            $output[] = '<td width=50px><input type="text" name="qty'.$id.'" value="'.$qty.'" size="2" maxlength="2" /></td>';
            $output[] = '<td width=100px>Kr:'.($pris * $qty).'</td>';
            $total += $pris * $qty;
            $output[] = '</tr>';
        }
        $output[] = '</table>';
        $output[] = '<br />I alt: <strong>Kr:'.$total.'</strong>';
        $output[] = '<div><br /><button type="submit">Opdater kurv</button></div>';
        $output[] = '</form>';
    } else {
        $output[] = 'Din indkøbskurv er tom.';
    }
    return join('',$output);
}
?>

og på selve siden:

<body>

<span class="style1">Din indkøbskurv</span>
<br />
<br />
<table width="250" border="1" cellpadding="2" cellspacing="0" bordercolor="#000000">
  <tr>
    <td><?php
echo writeShoppingCart();
?></td>
  </tr>
</table><br />
<br />
<span class="style1">Tøj i forretningen</span><br />
<br />

</div><?php
$sql = 'SELECT * FROM toej ORDER BY maerke';
$result = $db->query($sql);
while ($row = $result->fetch()) {
    $output[] = '<table border=1 cellspacing=0 borderColor=black>';
    $output[] = '<tr>';
    $output[] = '<td width=60px>"'.$row['del'].'"</td>';
    $output[] = '<td width=200px>M&aelig;rke:<br />'.$row['maerke'].'</td>';
    $output[] = '<td width=40px><img src="pics/thumb'.$row['pic'].'"></td>';
    $output[] = '<td width=90px>Kr:'.$row['pris'].'</td>';
    $output[] = '<td width=30px><a href="cart.php?action=add&id='.$row['id'].'">Tilf&oslash;j</a></td>';
    $output[] = '</tr>';
    $output[] = '</table><br />';
}
echo join('',$output);
?>
</body>

Lige nu kan jeg kun bruge tal som 100.00 og ikke 100,00 altså med komma istedet for punktum. Kan jeg ikke lave det om
så det er komma istedet for punktum ?
Avatar billede fennec Nybegynder
19. april 2007 - 14:33 #1
Nej. Problemet (som ikke er et problem) er pr design. Overvej f.eks denne indsættelse:
insert into (tal1, tal2, tal3) values(1.1,2,3.3)

Hvordan ville den se ud, hvis du brugte komma i stedet:
insert into (tal1, tal2, tal3) values(1,1,2,3,3)

Hovsa der... Hvad er nu hvad??

Det samme gør sig gældende i programmering (alle sprog) hvis man skal angive komma tal:
var1 = 1.2

forstil dig det skulle bruges når man kalder en funktion, som havde flere parametre:
var1 = miFunk(1.2,2,3.3)

Hvis man skrev kommatal i stede har vi samme problem som før.

Løsningen er at vise tal normal med komma, men når man indsætter i database, konvertere man alle kommaer til punktum (altså via dit PHP)
Avatar billede fennec Nybegynder
19. april 2007 - 14:35 #2
Jeg har f.eks i ASP denne funktion, som jeg smider alle tal igennem:

function DBNum(fNum)
  DBNum = replace(fNum,",",".")
end function
Avatar billede TiHs Nybegynder
19. april 2007 - 14:41 #3
Okay ... kan se lidt af hvor du vil hen ad.
Du siger altå at det er fint som det er, men jeg skal ændre min kode i
mit output så den viser , istedet for . ? .. og hvor er det så lige jeg
siger den skal gøre det ?
Avatar billede fennec Nybegynder
19. april 2007 - 15:02 #4
Ikke helt. Du burde kunne fortælle PHP at den skal udskrive kommatal med komma og ikke punktum. I ASP skriver vi bare dette i toppen af siden:
session.LCID = 1030

Så ved den at tal skal formateres som xxx,xx og datoer er dd-mm-yyyy. Skrev jeg 1033 i stedet bliver det til xxx.xx og mm/dd/yyyy. Det må også være mulig i PHP, men det skal du over i PHP kategorien og have bekræftet.

Det eneste du så skal gøre er at formatere dine tal når de bruges i en SQL-sætning. Det må være noget i denne stil, hvis jeg husker min PHP rigtig:

$tal1 = $_GET["tal1"]
$sql = "insert into enTabel(tal1) values(". replace(",",".",$tal1) .")"
Avatar billede TiHs Nybegynder
19. april 2007 - 15:14 #5
altså:

<?php
session.LCID = 1030;
php?>

??
Avatar billede TiHs Nybegynder
20. april 2007 - 09:40 #6
Fennec .. send et svar. så får du 20 point. Jeg fandt en global
til at gøre det .... Men den gør det ikke alle steder. Er ved at få et
svar på resten under PHP :o))
Avatar billede fennec Nybegynder
20. april 2007 - 09:55 #7
.o) <-- One Eyed Jack
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
Computerworld tilbyder specialiserede kurser i database-management

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