20. december 2004 - 11:29Der er
37 kommentarer og 1 løsning
Fratrække brugerens rabat fra prisen
Jeg vil gerne have en funktion, som sørger for, at når en bruger logger på,så ser han/hun priserne minus rabat (altså nettopriser). Det er ikke alle brugerne, som får rabat, og de som gør får ikke den samme rabat. Feltet rabat ligger i tabellen 'bruger', og selve udtrækket (result.php) ligger i tabellen 'varekatalog'. Begge tabeller er i samme database men der er ikke nogen relation mellem dem. Vedlægger lige mine 2 loginscripts og script til udtrækket.:
if (securityLogin($dbName, $password, $username)) { // Brugeren er logget ind header("Location: vetgross1.htm"); exit; } else { // Brugeren er ikke logget ind header("Location: index.htm"); exit; } ?>
security1.php ------------- <?php
function securityUserActive() { if (securityGetProperty("password") != 0) return true; else return false; }
function securityGetProperty($key) { global $HTTP_SESSION_VARS; global $security_properties; if (ini_get("register_globals") != 1) return $HTTP_SESSION_VARS["security_properties"][$key]; else return $security_properties[$key]; }
function securityLogin($dbName, $password, $username) { global $HTTP_SESSION_VARS; global $security_properties;
$loginOk = false;
$sql = "SELECT username,password,rabat FROM bruger WHERE password = '$password' AND username='$username'"; $res = mysql_db_query($dbName, $sql); if ( mysql_num_rows($res) == 0 ) { die("Fejl ved login: Du har indtastet et forkert password eller brugernavn"); } if ($row = mysql_fetch_array($res)) { $security_properties = Array(); $security_properties["password"] = $row["password"]; $security_properties["username"] = $row["username"]; $security_properties["rabat"] = $row["rabat"]; $loginOk = true; } mysql_free_result($res);
if ($loginOk) {
if (ini_get("register_globals") != 1) $HTTP_SESSION_VARS["security_properties"] = $security_properties; return true; }
return false; }
function securityLogoff() { session_unregister("security_properties"); } ?>
Du kunne evt bruge sessions? Så når en bruger logger ind, så sættes $_SESSION['rabat'] = 10; Og alle tal som så skrives ud, her trækkes den værdi så fra!
Nej, har fået rigtigt meget hjælp her på eksperten og så har jeg gættet mig til nogle ting ved at se på nogle af de andre spørgsmål. Er der nogen chance for, at du gider at guide mig igennem det? Skal nok sætte pointene op, hvis det er meget besværligt.
Vil det sige at alle mine $HTTP_SESSION_VARS skal laves om? Skal jeg så ikke også have session_start() med i starten af scriptet? Har kigget på php-siden men er stadig lidt i tvivl (har den liggende i baggrunden i tilfælde af panik) *LOL*
Okay, nu håber jeg, at jeg fatter lidt mere. $_SESSION['username']='$username' $_SESSION['password']='$password' $_SESSION['rabat']='$rabat' Er det rigtigt?` Skal det sættes ind under 'function securityGetProperty' istedet for $HTTP_SESSION_VARS?
if (securityLogin($dbName, $password, $username)) { // Brugeren er logget ind header("Location: vetgross1.htm"); exit; } else { // Brugeren er ikke logget ind header("Location: index.htm"); exit; } ?>
//security1.php <?php function securityUserActive() { if (securityGetProperty("password") != 0) return true; else return false; }
function securityGetProperty($key) { return $HTTP_SESSION_VARS["security_properties"][$key]; }
function securityLogin($dbName, $password, $username) { $loginOk = false;
$sql = "SELECT username,password,rabat FROM bruger WHERE password = '$password' AND username='$username'"; $res = mysql_db_query($dbName, $sql); if ( mysql_num_rows($res) == 0 ) { die("Fejl ved login: Du har indtastet et forkert password eller brugernavn"); }
Jeg kan godt logge ind. Men glemte at sige, at jeg også har et log ud script: <?php require_once("security1.php");
securityLogoff(); header("Location: index.htm"); exit; ?> Får disse 2 fejlmeldinger når jeg logger ud: Warning: session_destroy(): Trying to destroy uninitialized session in D:\FPInetpub\vetgross\security1.php on line 47
Warning: Cannot modify header information - headers already sent by (output started at D:\FPInetpub\vetgross\security1.php:47) in D:\FPInetpub\vetgross\logoff.php on line 5
Så er jeg tilbage. Har ikke fået løst problemet, men fandt ud af, at jeg jo ikke kan finde nettoprisen ved at bruge: $pris = mysql_result($result,$row,"pris") * $_SESSION['rabat']; Det vil jo kun vise rabatten. Tror du, at det kan gøres på følgende måde: $pris = mysql_result($result,$row,"pris") - (mysql_result($result,$row,"pris")* $_SESSION['rabat']); Det er nogle år siden, at jeg har haft matematik, men jeg mener, at det er sådan, at det udregnes i php. :-) Daft
Jeg får stadig fejlen: Notice: Undefined variable: _SESSION in D:\FPInetpub\vetgross\2-komponent1.php on line 58 Skal jeg lave et SELECT udtræk i result.php som henter 'rabat' i brugertabellen? Eller skulle den selv kunne finde ud af, at variablen $_SESSION['rabat'] er hentet i login scripted?
Mener du i scripted result.php? Hvis jeg gør det får jeg følgende fejl: Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at D:\FPInetpub\vetgross\2-komponent1.php:7) in D:\FPInetpub\vetgross\2-komponent1.php on line 8
Notice: Undefined index: rabat in D:\FPInetpub\vetgross\2-komponent1.php on line 58
Ja, med det brugernavn og password jeg logger på med er rabatten sat til 0.10 i tabellen. Tabellen ser sådan ud: CREATE TABLE `bruger` ( `username` varchar (50) NOT NULL , `password` varchar (50) NOT NULL , `id` INTEGER (11) NOT NULL AUTO_INCREMENT , `klinik` varchar (255), `rabat` DECIMAL (13,2), PRIMARY KEY (id) ) TYPE=MyISAM
Jaaaah. Nu virker scripted, der er bare lige 2 småting. Jeg får denne melding: Notice: A session had already been started - ignoring session_start() in D:\FPInetpub\vetgross\security1.php on line 2
Og prisen kommer kun med et decimal istedet for 2. Er det nemt at ordne?
Nu spørger jeg dumt igen igen. Skal $pris = number_format($pris, 2, ',', '.'); ind som en ny linie eller sættes ind i: $pris = mysql_result($result,$row,"pris") - (mysql_result($result,$row,"pris")* securityGetProperty("rabat"));
Fandt selv ud af det. Mange, mange, mange tak. Du har reddet min jul :-) Smider du ikke lige et svar, så du kan få dine point (vil meget gerne sætte dem op, med alt den tid du har brugt på det).
svar (og pointene er fine nok, gør det ikke for point, mere for at hjælpe og lære noget nyt selv) :o)
Synes godt om
Ny brugerNybegynder
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.