sessie en $_GET probleem

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Dit ter lering

Via een submenu selecteer ik een jaartal.
Met dit jaartal moeten er foto's getoond worden van dat jaar.
Er wordt gekeken of een sessie met dat jaar aanwezig is.
dan worden de juiste foto's getoond.
Bij verandering van de keuze wordt er een nieuwe sessie aangemaakt met de naam van het nieuwe jaartal.
de vorige sessie moet dan verwijderd worden.
a: $_SESSION met variabele $jaar werkt niet
b: hoe kom je te weten welke sessie er aanwezig is bij verandering van $jaar
b.v.d.

PHP:
public function get_images($conn)
{
    $jaar = (isset($_GET['jaar']));
    //print_r($_SESSION);
    //print_r ($_SESSION[".$jaar."]);
    // kijk of array aanwezig is
    if (isset($_SESSION[$jaar])){
        $this->files_arr = $_SESSION[$jaar];
        // unset($_SESSION); // destroy oude sessie
    }else{
        $sql= "SELECT * from fotos where jaar = '".$jaar."'";
        $result = mysqli_query($conn,$sql);
        if($result){
            while($row=mysqli_fetch_assoc($result)){
                $this->files_arr[] = $row;
            }
        }else{
            echo "Fout met de database";
        }
    }
    $_SESSION[$jaar] = $this->files_arr;
    //print_r ($this->files_arr);
}
 
Laatst bewerkt door een moderator:
Start je wel de sessie met start_session(); ?

Verder hoeft het jaar niet als string te worden behandeld:
//print_r ($_SESSION[$jaar]);

Daarnaast zie ik SQL-injection!!!!!!!
 
@Aar

Bij de lib.inc.php wordt de sessies gestart.
Wordt in de andere pagina's ge-included.
 
Heb je al naar je array-boom gekeken van $_SESSION ?
 
Ik heb een aantal jaren en een item historie. Jaartallen worden middels mijn vorige vraag meegegeven en de Historie = 0 wat ook in de tabel staat van Jaar.
De sessie krijgt in ieder geval geen naam.
Code:
..|a:15:{i:0;a:6:{s:6:"fotoid";s:2:"19";s:8:"fotonaam";s:8:"IMG_1199";s:8:"fotoinfo";s:141:"Garderens
Daardoor wordt $jaar leeg en dus 0 en krijg ik de Historie foto's te zien.
Ala dan een jaartal kies moet de sessie hierboven verwijderd worden
 
unset() is een handige functie
 
@Aar

weet alleen niet waar dat moet staan. Ik mag m volgens mij hier niet legen
omdat hij kennelijk elke keer als ik op next klikt dit array gebruikt.
Dat zal ik even moeten uitvogelen of dit werkelijk gebeurt.
Maar ik moet dan wel de sessie voorzien van een naam, en dat gebeurt niet
PHP:
if (isset($_SESSION[$jaar])){
    $this->files_arr = $_SESSION[$jaar];
    // unset($_SESSION); // destroy oude sessie
 
Laatst bewerkt door een moderator:
het lukt mij nog steeds niet om een sessie te vullen met de naam van het jaartal met een array van uit het submenu.
Geprobeerd middels $_GET['jaar'] en zoals nu met een variabele. hetgeen ook niet werkt.
De sessie moet een naam hebben, dus het jaartal, zodat ik bij een ander jaartal bestaande sessie moet unsetten.
Kan iemand mij verder helpen na een dag stoeien om het werkend te krijgen?
De sql-injectie is mij bekend
PHP:
public function get_images($conn)
{
    // run actions only if img array session var is empty
    $jaar= $_GET['jaar'];
    echo $jaar;
    if (isset($_SESSION[$jaar]))
    {
        $this->files_arr = $_SESSION[$jaar];
        echo "Hij gaat hier langs sessie aanwezig";
        //unset($_SESSION[]);
    }else{
        $sql= "SELECT * from fotos where jaar = '".$jaar."'";
        $result = mysqli_query($conn,$sql);
        if($result){
            while($row=mysqli_fetch_assoc($result)){
                $this->files_arr[] = $row;
            }
        }else{
            echo "Fout";
        }
        $_SESSION[$jaar] = $this->files_arr;
    }
    //print_r ($this->files_arr);
}
 
Laatst bewerkt door een moderator:
Probeer het eens te unsetten voordat je de nieuwe sessie aanmaakt?
 
@Aar
Bedankt voor de ondersteuning.

Zo werkt het wel.
Moet alleen nog proberen als er geen jaartal wordt gevonden, dat er melding komt
dat er niet is gevonden. Maar dat moet niet moeilijk zijn

Code:
public function get_images($conn)
	{  
	  	
        if  ($_SESSION['jaartal'] == $_GET['jaartal']){
            unset ($_SESSION['jaartal']);                
        }else{
                //doe niets
        }    
        if (isset($_SESSION['jaartal'])) 
		{ 		  
			$this->files_arr = $_SESSION['jaartal'];            	
	    }else{
	        $sql= "SELECT * from fotos where jaar = '".$_GET['jaartal']."'";            
            $result = mysqli_query($conn,$sql);          
            if($result){
                while($row=mysqli_fetch_assoc($result)){
                    $this->files_arr[] = $row;
                }              
            }else{
                echo "Fout";
            }                    
        } 
        $_SESSION['jaar'] = $_GET['jaartal'];       
        $_SESSION['jaar'] = $this->files_arr;  
            //print_r ($this->files_arr);
   }
 
Nu session kan je ruimer bekijken ter info
ref:https://code.tutsplus.com/tutorials/how-to-use-sessions-and-session-variables-in-php--cms-31839
nu moet je even op de link kijken en doorlopen tot je onderstaande code ziet .
nu wordt het leuk (ik heb even een voorbeeld opgesnort weet dat je ook je eigen sessiecode kan geven en hierdoor kan je verhinderen dat gebruikers weten dat het php die draait maar dan moet je nog extenties verbergen ectr)

PHP:
<?php
class MySQLSessionHandler implements SessionHandlerInterface
{
    private $connection;
 
    public function __construct()
    {
        $this->connection = new mysqli("HOST_NAME","USERNAME","PASSWORD","DATABASENAME");
    }
 
    public function open($savePath, $sessionName)
    {
        if ($this->connection) {
            return TRUE;
        } else {
            return FALSE;
        }
    }
 
    public function read($sessionId)
    {
        try {
            $stmt = $this->connection->prepare("SELECT session_data FROM sessions WHERE session_id = ?");
            $stmt->bind_param("s", $sessionId);
            $stmt->execute();
            $stmt->bind_result($sessionData);
            $stmt->fetch();
            $stmt->close();
 
            return $sessionData ? $sessionData : '';
        } catch (Exception $e) {
            return '';
        }
    }
 
    public function write($sessionId, $sessionData)
    {
        try {
            $stmt = $this->connection->prepare("REPLACE INTO sessions(`session_id`, `created`, `session_data`) VALUES(?, ?, ?)");
            $stmt->bind_param("sis", $sessionId, $time=time(), $sessionData);
            $stmt->execute();
            $stmt->close();
 
            return TRUE;
        } catch (Exception $e) {
            return FALSE;
        }
    }
 
    public function destroy($sessionId)
    {
        try {
            $stmt = $this->connection->prepare("DELETE FROM sessions WHERE session_id = ?");
            $stmt->bind_param("s", $sessionId);
            $stmt->execute();
            $stmt->close();
 
            return TRUE;
        } catch (Exception $e) {
            return FALSE;
        }
    }
 
    public function gc($maxlifetime)
    {
        $past = time() - $maxlifetime;
 
        try {
            $stmt = $this->connection->prepare("DELETE FROM sessions WHERE `created` < ?");
            $stmt->bind_param("i", $past);
            $stmt->execute();
            $stmt->close();
 
            return TRUE;
        } catch (Exception $e) {
            return FALSE;
        }
    }
 
    public function close()
    {
        return TRUE;
    }
}
 
Nu session kan je ruimer bekijken ter info
ref:https://code.tutsplus.com/tutorials/how-to-use-sessions-and-session-variables-in-php--cms-31839
nu moet je even op de link kijken en doorlopen tot je onderstaande code ziet .
nu wordt het leuk (ik heb even een voorbeeld opgesnort weet dat je ook je eigen sessiecode kan geven en hierdoor kan je verhinderen dat gebruikers weten dat het php die draait maar dan moet je nog extenties verbergen ectr)

PHP:
<?php
class MySQLSessionHandler implements SessionHandlerInterface
{
    echo "Blaat! ";
}
Hij vraagt niet eens een eigen sessionhandler... :confused:
Kenika van Bis, houd het graag bij relevante code die met het onderwerp te maken hebben.
Hier help je niemand mee.
 
Laatst bewerkt:
@aar
Hier ligt het verschil dat jij vanuit de hoogte probeert te praten en anderen hindert in het leiden naar progressie.
Een forum is om iet bij te brengen en als je aan iets programmeert en merkt later maar op dat er code is die op lange termijn handiger is.
En ja u hebt zelf al een beweging gemaakt en weet nu ook al dat beveiliging goed moet gebeuren (wat je voordien ook bij hoog en laag de grond in boord)
En nee het antwoord komt niet van u.

één advies je moet meer het licht in ander hun ogen ook toelaten zodat anderen je willen opmerken als je in een tunnelvisie zit .(als je kijkt merk je wel dat je nu weinig mensen een open mening delen met jou zullen delen )
 
Hij heeft/had gewoon een probleem met het implementeren van sessies in PHP. Daar hoef je niet een (half) compleet niet-relevant script voor neer te plempen die sessies op een totaal andere manier afhandelt.

De topicstarter zit bij hoofdstuk 5: Sessies in PHP, terwijl jij al hoofdstuk 15 behandelt waarbij er over OOP en Interfaces gesproken wordt. Vind je dat niet vreemd?

Ter vergelijking: Je lijkt wel een autoverkoper die voor de garage van een Skoda-dealer staat om vervolgens iedereen een Ferrari aan te smeren, wat te hoog gegrepen is voor de meeste rijders. Leef je toch eens in in de topicstarter. :)
Zo lastig is het toch ook weer niet?

Lees je het topic überhaupt wel, vraag ik mij vaak af?
Gezien hier veel beginners zijn die niet de intentie hebben om een pro te worden, is een gevorderd forum zoals http://gathering.tweakers.net niet beter voor je?
 
Laatst bewerkt:
Helaas ben ik er nog niet uit. Hou de vraag dus nog even open en kom er op terug.
Mijn logisch denken laat mij even in de steek.
 
Met mysqli_num_rows() kan je kijken of een record (bijv. in jou geval een jaar) bestaat.
Als dit 0 teruggeeft, is dit niets, en als dit hoger is dan 0 (dus > 0) dan heb je wel records.
 
Als je een keuze heb gemaakt van het jaar wil ik het jaartal gebruiken, dus $_GET['jaartal'].
Als er geen sessie aanwezig is, gaat moet het naar de sql gaan en haalt alles op in een array hetgeen in $this->files_arr[] wordt gestopt.
daar wordt dan een sessie van gemaakt.

a: Bij keuze verandering moet dan zeker de sessie die aanwezig is, ge-unset worden.
b: Mag ik bij het benoemen van een sessie een variabele gebruiken?
In de hoop dat men mij begrijpt, mijn logisch denken werkt even niet goed.
Maar kan het ook niet loslaten.
b.v.d.
PHP:
//dit staat bovenin
//verkrijg het jaartal via het menu
if (isset($_GET['img']) == ""){ $_GET['img'] = 1; }
if (isset($_GET['jaartal']) <> ""){ $jaar = $_GET['jaartal']; }
PHP:
public function get_images($conn)
{
    //als deze gevuld is met bv 2016 en is die sessie aanwezig
    if (isset($_SESSION[$jaar]))
    {
        $this->files_arr = $_SESSION[$jaar];
    }else{
        // als een ander jaar is gekozen dan die in de sessie
        $sql= "SELECT * from fotos where jaar = '".$_GET['jaartal']."'";
        echo $sql;
        $result = mysqli_query($conn,$sql);
        if($result){
            while($row=mysqli_fetch_assoc($result)){
                $this->files_arr[] = $row;
            }
        }else{
            echo "Fout";
        }
    }
    //$_SESSION['jaartal'] = $_GET['jaartal'];
    $_SESSION[$jaar] = $this->files_arr;
}
 
Laatst bewerkt door een moderator:
PHP:
if (isset($_GET['img']) == ""){ $_GET['img'] = 1; }
if (isset($_GET['jaartal']) <> ""){ $jaar = $_GET['jaartal']; }

Volgens mij kijk je hier of een Boolean wel of niet leeg is, kan dat wel ?

Frank
 
Laatst bewerkt door een moderator:
Volgens mij kijk je hier of een Boolean wel of niet leeg is, kan dat wel ?
Het is mogelijk om een lege string te vergelijken met een boolean maar het is totaal niet netjes.
Persoonlijk zou ik het nooit doen want het ziet er vreselijk uit en debuggen is ellende. Dit is netter:
PHP:
if (isset($_GET['img'])) {
    if ($_GET['img'] == "") $_GET['img'] = 1;
}
if (isset($_GET['jaartal'])) {
    if ($_GET['jaartal'] <> "") $jaar = $_GET['jaartal'];
}

Het is eigenlijk ook niet netjes om een globale variabele te wijzigen(waarde of data type) zoals dit
PHP:
$_GET['img'] = 1

Je kan een kopie array maken waarmee je verder werkt
PHP:
// kopie van $_GET
$_gGet = $_GET;
// verder $_gGet gebruiken
if (isset($_gGet['img'])) {
    if ($_gGet['img'] == "") $_gGet['img'] = 1;
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan