Goedendag,

Ik ben niet heel erg bekend met PHP, maar ik probeer een website te maken waar bij het inloggen een gegeven onthouden moet worden die op de volgende pagina gebruikt moet worden om te zoeken in een database.

Op het moment is dit mijn login pagina (login.php):

<?php
session_start();

if(isset($_GET["log_out"])){
  unset($_SESSION["logged_in"]);
  echo "U bent uitgelogd en wordt over 3 seconde doorgestuurd.";
  header('refresh: 3; url=login.php');
  exit;
}

$login = true;
require "protect.php";

$logins[0]["user"] = "a1";
$logins[0]["pass"] = "wachtwoord";
$logins[0]["klantnr"] = "12345";
$logins[0]["redirect"] = "stock.php";

$logins[1]["user"] = "a2";
$logins[1]["pass"] = "wachtwoord";
$logins[1]["klantnr"] = "23456";
$logins[1]["redirect"] = "stock.php";

if(isset($_POST['submit'])){ //is the form submitted?
  if(empty($_POST['user']) || empty($_POST['pass'])){
    echo "U moet beide velden invullen.";
    exit;
  } //check for empty user name or password
  $is_logged = false; //this is part of the process to see if they have a correct password or not, set to false right here to say no right pass... (will change later)
  foreach($logins as $login){
    $user = $_POST;
    if(($user["user"] == $login["user"]) && ($user["pass"] == $login["pass"])) {
      $is_logged = true;
      $_SESSION["logged_in"] = array($login["redirect"], true); //now, if they do have a correct password, set the session to true, and the variable.
      header("Location: ".$login["redirect"]);
    }
  }
  if(!$is_logged){ echo "Gebruikersnaam/wachtwoord is niet correct. Probeer het opnieuw."; } //if none of the $logins arrays matched the input, give an error
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Gebruikersnaam:<br />
<input type="text" name="user" /><br />
Wachtwoord:<br />
<input type="password" name="pass" /><br />
<input type="submit" name="submit" value="Log in" />
</form>

En de protect.php

<?php
session_start();
  if((!isset($_SESSION["logged_in"])) || !$_SESSION["logged_in"][1]){
    if(!isset($login)){
      header("Location: login.php"); //check to see if logged in, otherwise go to the login
    }
  } else if (isset($login) || isset($index)){
    echo "U bent al ingelogd! <a href='login.php?log_out'>Klik hier</a> om uit te loggen. Of om terug te gaan naar uw pagina, klik <a href='{$_SESSION['logged_in'][0]}'>hier</a>.";
    exit;
  }
?>

Index.php

<?php
session_start();
  if((!isset($_SESSION["logged_in"])) || !$_SESSION["logged_in"][1]){
    if(!isset($login)){
      header("Location: login.php"); //check to see if logged in, otherwise go to the login
    }
  } else if (isset($login) || isset($index)){
    echo "U bent al ingelogd! <a href='login.php?log_out'>Klik hier</a> om uit te loggen. Of om terug te gaan naar uw pagina, klik <a href='{$_SESSION['logged_in'][0]}'>hier</a>.";
    exit;
  }
?>

En de stock.php, waar de gegevens van 'klantnr' gebruikt moeten worden

<html>
<head>
    <title>Stock</title>
<style>
         body {
         padding-top: 40px;
         padding-bottom: 40px;
         padding-left: 150px;
         background-color: #ADABAB;
         padding: 10px;
         text-align: center;
         margin: 0px auto;
         }

         table.center {
         margin-left:auto;
         margin-right:auto;
         }

         h2 {
         text-align: center;
         color: #017572;
         }
</style>
</body>
</head>
<?php

require "protect.php";

session_start();
echo $_SESSION["logged_in"];

$host = '8.8.8.8:3306';
$database = 'database';
$table = 'tabel';
$table2 = 'tabel2';
$username = 'naam';
$password = 'wachtwoord';
$nummer22 = '22';

$klantnummer = [b]hier moet dat klantnummer komen[/b];

$html = '<form method="post">';
$html .= 'Artikel: (Incremental)<br />';
$html .= '<input type="text" value="' . @$_POST['nummer'] . '" name="nummer" /><br />';
$html .= '<input type="submit" value="Opvragen" />';
$html .= '</form>';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    $html .= '<table border=2 class="center">';
    $html .= "<tr><th>Artikel</th><th> Datum Inslag </th><th> #Opslageenh </th><th> #Verpakeenh </th><th> #Verkoopeenh </th><th>  #Stuks  </th></tr>";
    $mysql = mysql_connect($host, $username, $password);
    if (!$mysql) {
        die('Kon geen verbinding tot stand brengen: ' . mysql_error());
    }
    echo '<h2>Welkom</h2>';

    $nummer = mysql_real_escape_string($_POST['nummer'], $mysql);
    $nummer3 = $nummer.'%';

    $sql = "SELECT voorraad_artikelartikelID,voorraad_artikelmutatiedatum, voorraad_artikelaantops, voorraad_artikelaantverp, voorraad_artikelaantverk, voorraad_artikelaantkrimp ".
     " FROM {$database}.{$table} ".
     "WHERE ({$table}.voorraad_artikelartikelID LIKE '{$nummer3}') AND ({$table}.voorraad_artikelopslh = '{$klantnummer}') AND ({$table}.voorraad_artikelaantops > '0' )";

    $result = mysql_query($sql);

    if (!$result) {
        $message  = ' Fout in query! ' . "\n";
        //$message .= 'Query: ' . $query;
        die($message);
    }

    while ($data = mysql_fetch_assoc($result)) {
      $html.="<tr><td>{$data['voorraad_artikelartikelID']}</td><td>{$data['voorraad_artikelmutatiedatum']}</td><td>{$data['voorraad_artikelaantops']}</td><td>{$data['voorraad_artikelaantverp']}</td><td>{$data['voorraad_artikelaantverk']}</td><td>{$data['voorraad_artikelaantkrimp']}</td></tr>";

//      $html .= print_r($data, true);
    }
    $html .= '</table>';
}

echo $html;
?>


Hoe zorg ik er dus voor dat het 'klantnr' van het desbetreffende inlogaccount wordt gebruikt in de stock.php?

Bij voorbaat dank.
Je kan toch na het inloggen de klantnummer in een sessie opslaan? Dan kan je hem over de hele website gebruiken.

Verder zie ik dat je de mysql_* functies gebruikt. Deze zijn in de nieuwste PHP 7 verleden tijd. Ik raad aan om over te stappen op de functies van MySQLi of PDO. PHP 5 is wordt sinds kort niet meer doorontwikkeld, en hostingbedrijven zullen op de duur ook overstappen.
regel 34,

$_SESSION["logged_in"] = array($login["redirect"], true);


Je geeft alleen de redirect mee in de logged_in sessie.
Je zou eventueel een $_SESSION['id'] mee kunnen geven, en dan verwijzen naar de betreffende klantnummer van de user.

en dan bij
$klantnummer = [b]hier moet dat klantnummer komen[/b];

Haal je hier de $_SESSION['id'] op
Duidelijk.

Hoe zou ik een session ID kunnen meegeven in deze regel?
$_SESSION["logged_in"] = array($login["redirect"], true);


En moet ik dan het volgende doen?
$klantnummer = $_SESSION['id']


Moet ik dan als ID het klantnr doen?
Je kan het ID nummer prima opslaan in een andere sessie, zoals

$_SESSION["logged_in"] = array($login["redirect"], true, $login["klantnr"]);
Maar waarom sla je die klantgegevens niet in een database op? Stel je voor dat de klant direct vanwege veiligheidsredenen zijn wachtwoord moet wijzigen, wat moeten ze dan doen?

Je gebruikt al een database voor je producten, waarom dan niet voor je klanten?
Dank je.

Als ik nu op de 2e pagina ben en

echo '<pre>';
var_dump($_SESSION);
echo '</pre>';


doe, dan krijg ik alleen een NULL.

Ook als ik de zoekopdracht in SQL doe, krijg ik geen resultaten.

Ik heb de regel in de login.php aangepast naar
$_SESSION["logged_in"] = array($login["redirect"], true, $login["klantnr"]);

en in stock.php aangepast naar
$klantnummer = $_SESSION["klantnr"];


Zit er nog iets niet goed?

Ik doe het nu even op deze manier als tijdelijke oplossing.
Later ga ik de accounts in de database zetten.

Patrick - op 03/01/2017 15:18:57
Als ik nu op de 2e pagina ben en

Op elke pagina waar je een sessie wilt starten of voortzetten dient session_start(); te staan.
Patrick - op 03/01/2017 15:18:57

$_SESSION["logged_in"] = array($login["redirect"], true, $login["klantnr"]);


$klantnummer = $_SESSION["klantnr"];



Zoals je het nu doet zal $_SESSION["klantnr"] niet bstaan want die maak je niet aan.
Ik heb nu

$_SESSION["klantnr"] = array($login["klantnr"]);


aangemaakt en met de echo zie ik dit op de 2e pagina.

array(5) {
  ["valid"]=>
  bool(true)
  ["timeout"]=>
  int(1483361109)
  ["username"]=>
  string(14) "tutorialspoint"
  ["klantnr"]=>
  array(1) {
    [0]=>
    string(6) "613834"
  }
  ["logged_in"]=>
  array(3) {
    [0]=>
    string(9) "stock.php"
    [1]=>
    bool(true)
    [2]=>
    string(6) "613834"
  }
}


Toch doet hij het nog niet.
Ik zie nu wel dat hij mee komt in de sessie.

Wel is het raar dat er 'Tutorialspoint' als username staat, terwijl dit nergens in 1 van de bestanden voor komt.
Waarom alles in een extra array()?
$_SESSION IS al een array().

$_SESSION["klantnr"] = $login["klantnr"];
echo $_SESSION["klantnr"];
waarom

$_SESSION["klantnr"] = array($login["klantnr"]); 


en niet:

$_SESSION["klantnr"] = $login["klantnr"]; 

Reageren