J'ai essayé de créer un formulaire de connexion à partir d'un exemple. J'ai fait ça marche mais je ne comprends pas.
pourquoi $ _ session ['umsco'] code> est requis et pourquoi dois-je attribuer la variable code> $ (code> $). Je ne comprends pas non plus si
conn-> ferme () code> requis et quel est le résultat
$ code> variable. P>
// I include the database file so we can get the information from there and apply it in here as well.
include "dbc.php";
// here we select the variables we want from the table 'members'.
$sql = "SELECT id, firstName, lastName FROM members";
// here we do something that I dont really know but this is standard procedure.
$result = mysqli_query($conn, $sql);
// declaring username
$username = $_POST["username"];
$password = $_POST["password"];
// my result thing, again, standard procedure.
$result = $conn->query($sql);
// we insert all values in row, standard procedure.
$row = $result->fetch_assoc();
// here we check if the username is the same as the database.
if ($username == $row["firstName"]) {
// if it's correct then we start a session
session_start();
// we give a session some random letters or numbers and set it to $username, not exactly sure why, but it wont work without it.
$_SESSION['umsco'] = $username;
// we change the location to secrect.php
header("location: secret.php");
}
// we close the connection, not sure if this is needed, but it seems logical.
$conn->close();
4 Réponses :
Je vous conseille de Pour comprendre, vous devez comprendre ce qu'est une session Une session est un moyen de garder les variables sur toutes les pages de votre site pour un utilisateur actuel. P>
blockQuote>
Tout d'abord, vous devez demander à PHP d'initialiser la session. Pour ce faire, vous devez ajouter Lorsque le serveur répond au client, il appendit un cookie appelé à chaque demande, le navigateur envoie ce cookie sur le serveur afin que PHP puisse récupérer la session à partir du disque dur du serveur. P>
La manière la plus commune d'enregistrer une variable de session est Pour terminer, la ligne in Un autre Ressource: fermeture de la connexion MySQL IMPORTANT? P > session_start () code> au début de votre code strong> pour éviter le mauvais comportement. P>
Qu'est-ce qu'une session h2>
Comment ça marche h2>
session_start () code> au début de votre code. P>
phpsessid code> qui contient l'identifiant unique de la session de l'utilisateur. P>
_ session ['clé'] = valeur de $; code>. p>.
Réponse finale h2>
$ _ session ['umsco'] = $ nom d'utilisateur; code> stocke le nom d'utilisateur de l'utilisateur dans sa session jusqu'à. P>
session_destroy () Code>
li>
php.ini code > li>
secrets.php code> Vous êtes probablement vérifier strong> si cette valeur est attribuée ou
Le résultat est que la prochaine fois que vous appelle
session_start(); $loggedUserName = $_SESSION['umsco'];
Tout d'abord, vous devez interroger des membres où le nom d'utilisateur et le mot de passe correspondent à $ _Post Data. p>
Deuxièmement, tout ce qui est stocké en $ _session variable sera disponible entre les demandes. En règle générale, vous souhaitez "mémoriser" l'ID utilisateur ou similaire, vous n'avez donc pas besoin de soumettre Nom d'utilisateur / mot de passe et répéter la recherche de membre avec chaque demande. p>
Voir plus Description élaborée ici: https: // www. johnmorrisonline.com/build-php-login-formance-Sessions/ p>
Ce que d'autres ont dit à propos de la variable $ _session est correcte. Si vous utilisez En ce qui concerne l'objet $ de résultat, session_start (); code> ces valeurs peuvent être persistées sur plusieurs demandes du navigateur des utilisateurs. La valeur $ _Session sera particulière à l'utilisateur visitant votre site. P>
$ Résultat-> fetch_assoc (); code> n'atteindra qu'une ligne de votre table. Donc, votre code actuel ne fonctionnerait que si le nom d'utilisateur correspond à la 1ère ligne de la table de vos membres. Il serait préférable d'interroger uniquement des lignes où le nom d'utilisateur correspond à ce qu'ils ont entré. NOTE Il y a un grand risque de sécurité si vous venez de concaténer des cordes ensemble pour la requête, vous devez donc utiliser des déclarations préparées ( https://websitebeaver.com/prepared-statifs-in-php-mysqli-à-prevent-sql-injection ) P>
TutorialSpoint.com/php/php_sessions.htm . Le point d'utiliser la session ici est d'enregistrer le fait que l'utilisateur est connecté avec succès. De cette façon quand ils essaient d'aller à une autre page qui est privé, vous n'avez pas besoin de leur demander à nouveau leur nom d'utilisateur et leur mot de passe, vous venez de vérifier leur session pour voir s'il s'est déjà connecté
$ résultat = mysqli_query ($ Conn, $ SQL); code> et
$ résultat = $ Conn-> requête ($ SQL); code> sont deux façons de faire la même chose - ils les deux exécutent votre requête SQL (c'est-à-dire qu'ils envoient le texte SQL à la base de données, ce qui l'exécute et redonne le résultat. Résultat $ puis contient le résultat de la requête. Mais vous n'avez pas besoin de ces deux lignes, sinon vous n'avez pas besoin de ces lignes Exécutez la même requête deux fois. Une version est suffisante. PHP.net/manual/fr /mysqli.query.php
$ rang = $ Résultat-> fetch_assoc (); code> puis récupère la première ligne à partir des résultats de la requête et la met dans la variable $ à ligne afin que vous puissiez utiliser les données de cette ligne de votre programme. Dans les cas où vous vous attendez à ce que la requête renvoie de nombreuses lignes, vous enfermeriez cette ligne dans une boucle, ce qui le fait récupérer chaque rangée jusqu'à ce qu'il n'y ait plus de rangées à traiter. php.net/manual/fr/class.mysqli-result.php < / a> et php.net/manual/fr/mysqli- résultat.fetch-assoc.php . Tous les liens que je donne ont des exemples d'utilisation que vous pouvez étudier
Un autre problème logique dans votre code ci-dessus est que votre SQL revient simplement tous les membres. Vous n'avez pas essayé de le faire correspondre au nom d'utilisateur et mot de passe entré. Vous avez besoin d'une clause WHERE pour le dire de renvoyer la ligne où le nom d'utilisateur correspond à la valeur entrée par l'utilisateur et que le mot de passe correspond à la valeur entrée par l'utilisateur. Ensuite, si vous obtenez une ligne de retour, vous savez que l'utilisateur est valide. Si vous ne récupérez pas de rangées, l'utilisateur n'est pas valide.