Avatar billede daft Nybegynder
20. december 2004 - 11:29 Der 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.:

login.php
---------
<?php
  require_once("security1.php");

 
  $password = $HTTP_POST_VARS["password"];
  $username = $HTTP_POST_VARS["username"];       
  $con = mysql_connect("localhost", "xxxx", "xxxx");
  $dbName = "xxxx";

  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");
    }
?>

result.php
----------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<meta name="GENERATOR" content="DBTools DBManager 2.0">
<title>Results</title>
<body text="#000000" link="#0000EE" vlink="#000000" alink="#3366FF" bgcolor="#eefffa">
<?php

  $db = mysql_connect("localhost", "xxxx", "xxxx");
  if( !$db )
  {
      die("Error connecting to the Server");
      exit;
  }
  $result = mysql_select_db("xxxx", $db);
  if( !$result )
  {
      die("Error selecting Database");
      exit;
  }
?>

<div align="center">
    <center>
    <table border="0" cellpadding="0" cellspacing="1" width="100%">
<?php

    $query  = "SELECT
    varekatalog.varenummer,
    varekatalog.varenavn,
    varekatalog.pris,
varekatalog.billed,
varekatalog.Sbilled
FROM
    varekatalog
WHERE
                  kataloggruppe='1.11'
ORDER BY varenavn ASC";
    $result = mysql_query($query,$db);
    if( !$result )
    {
        die("Error executing query");
    }
    echo "<tr>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Billede</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Varenummer</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Navn</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Pris</font></td>";
    echo "</tr>";
    $nrows = mysql_num_rows($result);
    $row  = 0;
    while( $row < $nrows )
    {
              $varenummer = mysql_result($result,$row,"varenummer");
              $varenavn = mysql_result($result,$row,"varenavn");
              $pris = mysql_result($result,$row,"pris");
                                                          $billed = mysql_result($result,$row,"billed");
                                                          $Sbilled = mysql_result($result,$row,"Sbilled");
              echo "<tr>";
        echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'><a href='$Sbilled' target='_blank'><img src='$billed' alt='[klik her for stort billede]' border=´0'></a></font></td>";
        echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$varenummer."</font></td>";
        echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$varenavn."</font></td>";
        echo " <td align='RIGHT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$pris."</font></td>";
        echo "</tr>";
        $row++;
    }
    mysql_free_result($result);
    mysql_close();
?>

    </table>
    </center>
</div>
</body>
</html>

Håber, at der er nogle som kan hjælpe mig, da jeg stadig er meget ringe til php.
:-)
Avatar billede jakobdo Ekspert
20. december 2004 - 13:27 #1
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!
Avatar billede daft Nybegynder
20. december 2004 - 13:37 #2
Men vil det også virker når nogle kunder kun får f.eks. 5% rabat.
Er vist ikke helt med på hvad du mener. Kan jeg få det på 'dummy' sprog?

:-)
Avatar billede jakobdo Ekspert
20. december 2004 - 13:42 #3
Jeg kan se du bruger sessions, så ville det blot være at lave en session som indeholder rabat.

Jeg ved ikke hvor meget du er inde i PHP!
Har du selv lavet alt koden ovenover?
Avatar billede daft Nybegynder
20. december 2004 - 13:49 #4
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.

:-)
Avatar billede jakobdo Ekspert
20. december 2004 - 13:53 #5
Jeg er ikke på jagt efter point, og ja, jeg vil gerne guide dig!

Først synes jeg du skal lære lidt om SESSIONS.
Se her:

http://dk2.php.net/session_start

Du bruger allerede sessions, men vi kan evt lave dem om til $_SESSION
Avatar billede daft Nybegynder
20. december 2004 - 14:07 #6
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*

:-)
Avatar billede jakobdo Ekspert
20. december 2004 - 14:18 #7
Du skal stadig beholde session_start();
Avatar billede daft Nybegynder
20. december 2004 - 14:28 #8
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?
Avatar billede jakobdo Ekspert
20. december 2004 - 14:41 #9
Jeg har forsøgt at oversætte alt:

test lige dette:

//login.php
<?php
    require_once("security1.php");

    $password = $_POST["password"];
    $username = $_POST["username"];     
    $con = mysql_connect("localhost", "xxxx", "xxxx");
    $dbName = "xxxx";

    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");
        }
       
        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)
        {
            $_SESSION["security_properties"] = $security_properties;
            return true;
        }
        return false;
    }

    function securityLogoff()
    {
        session_destroy();
    }
?>

//result.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<meta name="GENERATOR" content="DBTools DBManager 2.0">
<title>Results</title>
<body text="#000000" link="#0000EE" vlink="#000000" alink="#3366FF" bgcolor="#eefffa">
<?php

  $db = mysql_connect("localhost", "xxxx", "xxxx");
  if( !$db )
  {
        die("Error connecting to the Server");
        exit;
  }
  $result = mysql_select_db("xxxx", $db);
  if( !$result )
  {
        die("Error selecting Database");
        exit;
  }
?>

<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="1" width="100%">
<?php
    $query  = "
    SELECT
        varekatalog.varenummer,
        varekatalog.varenavn,
        varekatalog.pris,
        varekatalog.billed,
        varekatalog.Sbilled
    FROM
        varekatalog
    WHERE
        kataloggruppe='1.11'
    ORDER BY
        varenavn ASC";

    $result = mysql_query($query,$db);
    if( !$result )
    {
        die("Error executing query");
    }
    echo "<tr>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Billede</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Varenummer</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Navn</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Pris</font></td>";
    echo "</tr>";
    $nrows = mysql_num_rows($result);
    $row  = 0;
    while( $row < $nrows )
    {
        $varenummer = mysql_result($result,$row,"varenummer");
        $varenavn = mysql_result($result,$row,"varenavn");
        $pris = mysql_result($result,$row,"pris");
        $billed = mysql_result($result,$row,"billed");
        $Sbilled = mysql_result($result,$row,"Sbilled");
        echo "<tr>";
        echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'><a href='$Sbilled' target='_blank'><img src='$billed' alt='[klik her for stort billede]' border=´0'></a></font></td>";
    echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$varenummer."</font></td>";
    echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$varenavn."</font></td>";
    echo " <td align='RIGHT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$pris."</font></td>";
    echo "</tr>";
    $row++;
    }
    mysql_free_result($result);
    mysql_close();
?>

</table>
</center>
</div>
</body>
</html>
Avatar billede daft Nybegynder
20. december 2004 - 14:56 #10
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
Avatar billede jakobdo Ekspert
20. december 2004 - 15:01 #11
Prøv at smid session_start(); i toppen af security1.php
Altså lige under:
<?php
Avatar billede daft Nybegynder
20. december 2004 - 15:08 #12
Nu virker det.
Skal jeg så sætter $row[rabat] ind i result.php for at få nettoprisen?
Altså: $pris = mysql_result($result,$row,"pris") * $row[rabat];

Rabat % er gemt som decimaltal i tabellen
:-)
Avatar billede jakobdo Ekspert
20. december 2004 - 15:10 #13
Ja, det kunne du lave ja!
Avatar billede daft Nybegynder
20. december 2004 - 15:14 #14
Det troede jeg også, men nu får jeg bare en pris som hedder 0 på alle produkterne.

:-(
Avatar billede jakobdo Ekspert
20. december 2004 - 15:28 #15
Ahh, det skal rettes til:

$pris = mysql_result($result,$row,"pris") * $_SESSION['rabat'];
Avatar billede daft Nybegynder
20. december 2004 - 15:34 #16
Nu får jeg fejl:
Notice: Undefined variable: _SESSION in D:\FPInetpub\vetgross\2-komponent1.php on line 58
Avatar billede daft Nybegynder
20. december 2004 - 16:03 #17
Undskyld, har ikke adgang til en computer mere idag.
Kigger lige på det igen i morgen.
Er det iorden?

:-)
Avatar billede jakobdo Ekspert
20. december 2004 - 16:15 #18
Den er fin ja!
Avatar billede daft Nybegynder
21. december 2004 - 07:59 #19
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
Avatar billede jakobdo Ekspert
21. december 2004 - 08:26 #20
Du har ret, ganger du pris med rabat, få du selve rabatten!
Så du skal lave som du siger:

Nettopris = pris - (pris * rabat)
Avatar billede daft Nybegynder
21. december 2004 - 08:32 #21
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?

:-)
Avatar billede jakobdo Ekspert
21. december 2004 - 08:33 #22
Har du husket session_start() i toppen?
Avatar billede daft Nybegynder
21. december 2004 - 08:42 #23
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

Jeg har sat session_start() i security1.php

:-)
Avatar billede jakobdo Ekspert
21. december 2004 - 08:43 #24
Smid koden til 2-komponent1.php herind?
Avatar billede daft Nybegynder
21. december 2004 - 08:47 #25
Okay, her er koden.
Kan det være fordi, at jeg har HTML før php?:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<meta name="GENERATOR" content="DBTools DBManager 2.0">
<title>Results</title>
<body text="#000000" link="#0000EE" vlink="#000000" alink="#3366FF" bgcolor="#eefffa">
<?php
session_start();
  $db = mysql_connect("localhost", "vetgross", "hundogkat");
  if( !$db )
  {
        die("Error connecting to the Server");
        exit;
  }
  $result = mysql_select_db("vetgross", $db);
  if( !$result )
  {
        die("Error selecting Database");
        exit;
  }
?>

<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="1" width="100%">
<?php
    $query  = "
    SELECT
        varekatalog.varenummer,
        varekatalog.varenavn,
        varekatalog.pris,
        varekatalog.billed,
        varekatalog.Sbilled
    FROM
        varekatalog
    WHERE
        kataloggruppe='1.11'
    ORDER BY
        varenavn ASC";

    $result = mysql_query($query,$db);
    if( !$result )
    {
        die("Error executing query");
    }
    echo "<tr>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Billede</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Varenummer</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Navn</font></td>";
    echo "<td align=CENTER bgcolor='#000000'><font face='Arial' size='2' color='#FFFFFF'>Pris</font></td>";
    echo "</tr>";
    $nrows = mysql_num_rows($result);
    $row  = 0;
    while( $row < $nrows )
    {
        $varenummer = mysql_result($result,$row,"varenummer");
        $varenavn = mysql_result($result,$row,"varenavn");
      $pris = mysql_result($result,$row,"pris") - (mysql_result($result,$row,"pris")* $_SESSION["rabat"]);
        $billed = mysql_result($result,$row,"billed");
        $Sbilled = mysql_result($result,$row,"Sbilled");
        echo "<tr>";
        echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'><a href='$Sbilled' target='_blank'><img src='$billed' alt='[klik her for stort billede]' border=´0'></a></font></td>";
    echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$varenummer."</font></td>";
    echo " <td align='LEFT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$varenavn."</font></td>";
    echo " <td align='RIGHT' bgcolor='#eefffa'><font face='Arial' size='2' color='#000000'>".$pris."</font></td>";
    echo "</tr>";
    $row++;
    }
    mysql_free_result($result);
    mysql_close();
?>

</table>
</center>
</div>
</body>
</html>
Avatar billede jakobdo Ekspert
21. december 2004 - 08:52 #26
Du skal smide session_start() øverst i din kode!

Så det bliver:

<?php
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<meta name="GENERATOR" content="DBTools DBManager 2.0">
<title>Results</title>
<body text="#000000" link="#0000EE" vlink="#000000" alink="#3366FF" bgcolor="#eefffa">
<?php
Avatar billede daft Nybegynder
21. december 2004 - 09:02 #27
Okay, nu får jeg kun fejlen:

Notice: Undefined index: rabat in D:\FPInetpub\vetgross\2-komponent1.php on line 61

:-)
Avatar billede jakobdo Ekspert
21. december 2004 - 09:18 #28
Ikke sikker, men prøv lige at ret: $_SESSION["rabat"] til: $_SESSION['rabat']
Avatar billede jakobdo Ekspert
21. december 2004 - 09:20 #29
Og er du sikker på rabat bliver sat?
Avatar billede daft Nybegynder
21. december 2004 - 09:24 #30
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
Avatar billede daft Nybegynder
21. december 2004 - 09:26 #31
Det gør ikke nogen forskel, om jeg bruger " eller ' rund om rabat.

:-)
Avatar billede jakobdo Ekspert
21. december 2004 - 09:35 #32
Du skal lige rette denne funktion i security1.php:

function securityGetProperty($key)
{
  return $HTTP_SESSION_VARS["security_properties"][$key];
}

til

function securityGetProperty($key)
{
  return $_SESSION["security_properties"][$key];
}

Og så bør du tilføje denne linie øverst på siden:
require_once("security1.php");

og så skal du bruge:

securityGetProperty("rabat") i stedet for: $_SESSION['rabat']

Det var lidt rettelser...
Avatar billede daft Nybegynder
21. december 2004 - 09:50 #33
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?
Avatar billede jakobdo Ekspert
21. december 2004 - 09:57 #34
Ja, når du tilføjer security1.php, skal du fjerne

<?php
session_start();
?>

fra result.php

da vi har session_start(); i den anden fil.

Og tallet smid det igennem:

$pris = number_format($pris, 2, '.', '');
Avatar billede jakobdo Ekspert
21. december 2004 - 09:57 #35
Hov, det skal nok være:

$pris = number_format($pris, 2, ',', '.');
Avatar billede daft Nybegynder
21. december 2004 - 10:09 #36
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"));

:-)
Avatar billede daft Nybegynder
21. december 2004 - 10:22 #37
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).

God jul og godt nytår

Daft
Avatar billede jakobdo Ekspert
21. december 2004 - 10:23 #38
svar (og pointene er fine nok, gør det ikke for point, mere for at hjælpe og lære noget nyt selv) :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