Goeiedag iedereen,

Ik ben de ontwerper van een online game die gebruikt maakt van sqlite.
Nu ben ik gestart met PHP om een UCP te maken.
Dit gaat tot nu toe goed en dus heb ik een simpel login formuliertje gemaakt.
In het script worden na het inloggen de goede data getoond.
Het probleem is eigenlijk dat als je weer naar de home pagina gaat waar ook de staat worden laten gezien, dat er niks word laat gezien. En ik denk dat dit komt omdat het script niet weet waar het de data vandaan moet halen.
Nu vraag ik me af, kan ik niet de gebruikersnaam in een soort tijdelijke array opslaan en vandaar ophalen?(zo werkt dat in de code waar ik de game mee ontwerp ook.) En als dit mogelijk is? Hoe doe ik dit dan?

Mocht het nodig zijn is hier de pagina login.php:

<?php
error_reporting(E_ALL);
class MyDB extends SQLite3
{
function __construct()
{
$this->open('LARPSERVER/scriptfiles/Data/database/testdatabase.db');
}
}
$db = new MyDB() or die ("Unable to open");


$sql = 'SELECT * FROM USERS WHERE MAIL="'.$_POST["MAIL"].'" AND PASSWORD="'.$_POST["PASSWORD"].'"';

$stmt = $db->query($sql);
while($row = $stmt->fetchArray(SQLITE3_ASSOC) )
{
$email_address = $row["MAIL"];
$password = $row["PASSWORD"];
if($password==$_POST["PASSWORD"])
{

echo "<h1>Logged In</h1>";
echo "ID = ". $row['ID'] . "<br>";
echo "NAME = ". $row['NAME'] . "<br>";
echo "USERNAME = ". $row['USERNAME'] . "<br>";
echo "MAIL = ". $row['MAIL'] . "<br>";
}
}
while(!$row = $stmt->fetchArray(SQLITE3_ASSOC) )
{
header("Location: login_fail.html");
exit("Try again.");
}

$db->close();

?>
Jasper Schellekens op 20/02/2018 11:44:05

Nu vraag ik me af, kan ik niet de gebruikersnaam in een soort tijdelijke array opslaan en vandaar ophalen?

Ja, PHP heeft daarvoor een interne array: $_SESSION voor sessies.
Ward van der Put op 20/02/2018 13:46:09

[quote="Jasper Schellekens op 20/02/2018 11:44:05"]
Nu vraag ik me af, kan ik niet de gebruikersnaam in een soort tijdelijke array opslaan en vandaar ophalen?

Ja, PHP heeft daarvoor een interne array: $_SESSION voor sessies.
[/quote]

Dankjewel, met de gegeven link is het gelukt. Nu vraag ik me af, hoe zou uitloggen dan werken?
Word er met session_destroy(); uitgelogd?
En hoe kan ik checken of iemand ingelogd is?

Je kan kijken of er een bepaalde sessie bestaat met isset:
<?php
if(isset($_SESSION['LoggedIn'])) {
// ingelogd
} else {
// je bent niet ingelogd
}
?>

Als je alles wilt wissen, dan raad ik dit aan:
<?php
// open de sessie-handler
session_start();

// leeg de SESSION-global
$_SESSION = array();

// Verwijder alle sessies.
session_destroy();
?>
Aanvulling: ook doe je er verstandig aan om het sessie-cookie te verwijderen. En dit alles zou je in een routine moeten zetten, zodat je dit lijstje altijd in zijn geheel afwerkt, dus bijvoorbeeld zoiets als:
<?php
function session_stop() {
    // @see php.net/session_destroy
    // Empty $_SESSION.
    $_SESSION = array();

    // Do not close the session as this will make it readonly, preventing the physical file from being deleted.

    // Delete session cookie.
    if (ini_get('session.use_cookies')) {
        $params = session_get_cookie_params();
        setcookie(
            session_name(),
            '',
            time() - 42000,
            $params['path'],
            $params['domain'],
            $params['secure'],
            $params['httponly']
        );
    }

    // Destroy the session.
    session_destroy();
} // function session_stop
?>
Bedankt voor jullie reacties, ik ben er zeer door gevorderd.

@Rob Doemaarwat
Ik ben bekend met SQL injectie en in de code waarmee ik de game ontwerp word dit voorkomen op de volgende manier:

format(szQuery2, sizeof(szQuery2), "INSERT INTO `PINCODES` (`PlayerName`, `Pin1`) VALUES('%s', '%d')", DB_Escape(GetName(playerid)), DB_Escape(inputchar[playerid]));

In de bovenstaande query word DB_Escape() gebruikt om SQL injectie te voorkomen.

Hoe voorkom ik zo een SQL injectie nou in PHP/SQLite3? Ik neem aan door de query te escapen? Ik vind er helaas niks over.
Het ligt eraan wat DB_Escape precies doet. Als deze op de juiste manier je string met de SQL-query escaped, dan is er niks aan de hand.
Bedankt voor de snelle reactie.

DB_Escape is inderdaad om te escapen maar is geen php functie en ik betwijfel of het compitabel met PHP/sqlite3 is.
Dit is de functie DB_Escape:

DB_Escape(text[])
{
	new
		ret[MAX_INI_ENTRY_TEXT * 2],
		ch,
		i,
		j;
	while ((ch = text[i++]) && j < sizeof (ret))
	{
		if (ch == '\'')
		{
			if (j < sizeof (ret) - 2)
			{
				ret[j++] = '\'';
				ret[j++] = '\'';
			}
		}
		else if (j < sizeof (ret))
		{
			ret[j++] = ch;
		}
		else
		{
			j++;
		}
	}
	ret[sizeof (ret) - 1] = '\0';
	return ret;
}


Wat is de juiste manier om te escapen in PHP/SQLite3?
- Ariën - op 21/02/2018 13:15:18
Die code zal zeker niet werken in PHP.
Kijk hier eens naar:
http://php.net/manual/en/sqlite3.escapestring.php

Mja, maar dat is em ook niet helemaal, kijk maar eens naar de omschrijving (waarschuwing: niet binary safe) en naar de user comments (escaped geen dubbele quotes die wel een speciale betekenis hebben en er gebeurt ook iets wanneer een string \0 (een "null byte") bevat).

Reageren