Totaalbedrag leegmaken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$strSQL = "select SUM(Aantal*Prijs) as Subtotaal from tblorderregels
join tblorder using (Ordernummer)
where tblorder.SessieId = '$SessieId'";
$rs = mysql_query($strSQL, $db);
if (!$rs) {
die("de SQL opdracht is fout<br>" . $strSQL);
}
$r = mysql_fetch_array($rs);
mysql_freeresult($rs);
$Subtotaal = $r["Subtotaal"] ;
?>
$strSQL = "select SUM(Aantal*Prijs) as Subtotaal from tblorderregels
join tblorder using (Ordernummer)
where tblorder.SessieId = '$SessieId'";
$rs = mysql_query($strSQL, $db);
if (!$rs) {
die("de SQL opdracht is fout<br>" . $strSQL);
}
$r = mysql_fetch_array($rs);
mysql_freeresult($rs);
$Subtotaal = $r["Subtotaal"] ;
?>
Als ik een nieuwe sessie begin door een andere browser te gebruiken, of door de brouwser opnieuw te starten, staat er altijd nog het laatst opgetelde totaalbedrag in, totdat ik een nieuw product bestel, dan begint hij pas een nieuwe berekening te maken.
Hoe komt het dat de variabele niet leeg is en hoe kan ik hiervoor zorgen?
Het ziet er naar uit dat er wat caching achter blijft in de browser die je gebruikt... je kan eventueel caching uitschakelen met META code in je <head>
Toevoeging op 03/05/2013 10:13:36:
Ik heb <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> in de head gezet, maar dit doet niks.
Toevoeging op 03/05/2013 10:18:00:
En ook als ik de geschiedenis en het cachegeheugen van de browser volledig wis, blijft er een bedrag instaan.
Dus ik vraag me af of het wel het cashegeheugen is.
Je zegt dat je van browser verwisselt? Dan kan het geen caching zijn. Het moet iets in je script/site zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
$SessieId = (session_id());
$strSQL = "select * from tblartikelen, tblorderregels, tblorder
where tblorder.Ordernummer = tblorderregels.Ordernummer
and tblorderregels.Artikelnummer = tblartikelen.Artikelnummer
and tblorder.SessieId = '$SessieId'";
$rs = mysql_query($strSQL, $db);
if (!$rs)
die("agenda.php: de SQL opdracht is fout<br>" . $strSQL);
// Haal alle records 1 voor 1 op zolang er records zijn
while ($r = mysql_fetch_array($rs)) {
?>
<TR><TD class=infoBoxContents vAlign=top
align=left><SPAN
class=infoBoxContents>
<?php echo($r["Aantal"]); ?>
</TD>
<TD class=infoBoxContents vAlign=top><?php echo($r["Artikelnaam"]); ?></SPAN></TD>
</TR><?php } ?></TBODY></TABLE></TD></TR>
<TR>
<TD class=boxText><IMG border=0 alt=""
src="winkelwagen_files/pixel_black.gif"
width="100%" height=1></TD></TR>
<TR>
<?php
$strSQL = "select SUM(Aantal*Prijs) as Subtotaal from tblorderregels ";
$rs = mysql_query($strSQL, $db);
if (!$rs) {
die("de SQL opdracht is fout<br>" . $strSQL);
}
$r = mysql_fetch_array($rs);
mysql_freeresult($rs);
$Subtotaal = $r["Subtotaal"] ;
?>
<TD class=boxText align=right><SPAN
class=cart_price><?php echo $Subtotaal ; ?></SPAN>
$SessieId = (session_id());
$strSQL = "select * from tblartikelen, tblorderregels, tblorder
where tblorder.Ordernummer = tblorderregels.Ordernummer
and tblorderregels.Artikelnummer = tblartikelen.Artikelnummer
and tblorder.SessieId = '$SessieId'";
$rs = mysql_query($strSQL, $db);
if (!$rs)
die("agenda.php: de SQL opdracht is fout<br>" . $strSQL);
// Haal alle records 1 voor 1 op zolang er records zijn
while ($r = mysql_fetch_array($rs)) {
?>
<TR><TD class=infoBoxContents vAlign=top
align=left><SPAN
class=infoBoxContents>
<?php echo($r["Aantal"]); ?>
</TD>
<TD class=infoBoxContents vAlign=top><?php echo($r["Artikelnaam"]); ?></SPAN></TD>
</TR><?php } ?></TBODY></TABLE></TD></TR>
<TR>
<TD class=boxText><IMG border=0 alt=""
src="winkelwagen_files/pixel_black.gif"
width="100%" height=1></TD></TR>
<TR>
<?php
$strSQL = "select SUM(Aantal*Prijs) as Subtotaal from tblorderregels ";
$rs = mysql_query($strSQL, $db);
if (!$rs) {
die("de SQL opdracht is fout<br>" . $strSQL);
}
$r = mysql_fetch_array($rs);
mysql_freeresult($rs);
$Subtotaal = $r["Subtotaal"] ;
?>
<TD class=boxText align=right><SPAN
class=cart_price><?php echo $Subtotaal ; ?></SPAN>
Toevoeging op 03/05/2013 10:35:25:
Ik zie nu dat hij alle ordernummers bij elkaar optelt, dus het sessienr negeert hij. Hoe kan dat?
Toevoeging op 03/05/2013 10:47:29:
Probleem opgelost. Ik heb:
vervangen door:
Code (php)
1
2
3
4
5
2
3
4
5
<?php $strSQL = "select SUM(Aantal*Prijs) as Subtotaal from tblorderregels
join tblorder
where tblorder.Ordernummer = tblorderregels.Ordernummer
and tblorder.SessieId = '$SessieId'";
?>
join tblorder
where tblorder.Ordernummer = tblorderregels.Ordernummer
and tblorder.SessieId = '$SessieId'";
?>
Bedankt voor de suggesties!
Graag in het vervolg bij code, [code] [/code] tags gebruiken.[/modedit]
Gewijzigd op 03/05/2013 13:04:32 door Bas IJzelendoorn
- variabelen moeten buiten quotes;
- die is geen foutafhandeling, maar het brutaal vermoorden van je applicatie. Kijk eens naar de MySQL code in http://wouterj.github.io/sql-boilerplate ;
- gebruik mysql_fetch_assoc ipv fetch_array, dat is sneller en je gebruikt de extra's van fetch_array toch niet;
- nooit PHP logica tussen HTML plaatsen;
- html tags zijn altijd in kleine letters;
- gebruik geen inline CSS;
- ik heb zo'n vermoeden dat je queries geoptimaliseerd kunnen worden (maar ben niet echt een SQL guru...);
- maak je code netjes, spring in na een { en plaats geen onnodige whitespace voor ;.
En even een tip voor het forum: plaats je code tussen [code] tags, dan wordt het wat makkelijker lezen.
De html/css omgeving van de webshop is door onze php docent meegegeven. Het is de bedoeling dat we de php code inbouwen in website.
Als alles klaar is wil ik alle php code optimaliseren wat betreft, netjes neerzetten. Ik zal je commentaar over variabelen, die, mysql-fetch-assoc daarin meenemen. Ook wil ik de sql code bekijken. Ik heb het idee dat ik nu onnodig vaak variabelen maak van gegevens uit de database, tewijl ik ze in de sql query ook zo uit de database kan oproepen, ik weet alleen (nog) niet hoe.