J'ai un <div>
dans mon fichier onlinestore.html qui est mon menu qui contient de Login/Register. Ce que je veux, c'est après la connexion réussie, le <div>
pour la connexion/l'enregistrement change en nom d'utilisateur. Ce que j'ai fait ne va pas afficher le résultat attendu que je veux. Alors, y at-il un problème avec mon code?
Voici ce que j'ai fait:
onlinestore.html
<li class='active' style='float:right;'>
<?php
session_start();
if($_SESSION['logged']==true){
echo $_SESSION["username"];
echo '<a href="logout.php"><span>Logout</span></a></li>';
}
elseif($_SESSION['logged']==false)
echo '<a href="registerform.html"><span>Login/Register</span></a></li>';
?>
Voici un autre fichier Checklogin.php:
if($count==1){
session_start();
$_SESSION['logged']=true;
$_SESSION ['username']=$myusername;
header("refresh:1;url=onlinestore.html");
}
else{
$_SESSION['logged']=false;
header("refresh:2;url=login.html");}
Voici le résultat attendu:
Avant la connexion
Après la connexion
Voici ce que je reçois avec le code ci-dessus:
Soit vous devez renommer vos onlinestore.html
et login.html
en fichiers .php afin que le PHP fonctionne dessus, ou bien utiliser l’option addtype de votre fichier htaccess.
Dans votre onlinestore.html
, procédez comme suit:
<?php
session_start(); // Right at the top of your script
?>
<li class='active' style='float:right;'>
<?php
if($_SESSION['logged']==true)
{
echo $_SESSION["username"];
echo '<a href="logout.php"><span>Logout</span></a></li>';
}
elseif($_SESSION['logged']==false)
{
echo '<a href="registerform.html"><span>Login/Register</span></a></li>';
}
?>
Dans votre checklogin.php
, procédez comme suit:
<?php
session_start(); // Right at the top of your script
?>
if($count==1)
{
$_SESSION['logged']=true;
$_SESSION['username']=$myusername;
header("Location: onlinestore.html");
exit();
}
else
{
$_SESSION['logged']=false;
header("Location: login.html");
exit();
}
Si cela ne fonctionne pas, dites-moi ce qui se passe.
Avez-vous des fichiers HTML configurés pour analyser PHP - code?
Ou un fichier htaccess avec:AddType application/x-httpd-php .htm .html
?
Essayez ceci pour le débogage:
Dans votre checklogin.php
, procédez comme suit:
<?php
session_start(); // Right at the top of your script
?>
if($count==1)
{
$_SESSION['logged']=true;
$_SESSION['username']=$myusername;
echo "Login worked";
exit();
}
else
{
$_SESSION['logged']=false;
echo "Login failed";
exit();
}
Cela vous montrera si la connexion fonctionne. Si ce n'est pas le cas et que vous obtenez un "échec de connexion", c'est pourquoi vous obtenez le lien "Connexion/Inscription" sur votre page.
Si le message "Connexion utilisée" s'affiche, puis réglez le code à nouveau et ensuite sur la page onlinestore.html
, procédez comme suit:
echo "This is working";
exit();
Ce qui se produit? Avez-vous le message "Cela fonctionne" sur la page et rien d'autre?
Dans votre instruction else
, vous n'avez pas défini une session_start()
comme vous l'avez fait dans votre instruction if
.
Et sinon, au lieu de vérifier la valeur d'un $ _SESSION et d'en déterminer la valeur, vous pouvez utiliser les éléments suivants:
if (session_status() == PHP_SESSION_NONE) {
//Do something if the session is not existing
}
D'autres options stockent des variables dans un $_COOKIE
et vérifient ensuite si elle est isset
ou non (if(isset($_COOKIE["username"]){}
)
J'espère que cela vous a aidé
Eh bien, il manque beaucoup de code.
Où est votre script de connexion?
Tout d'abord, vous avez besoin d'un <form>
avec les champs de saisie (login et mot de passe) et d'un bouton d'envoi.
Par exemple:
<form action='login.php' method='post'>
<input type='text' name='loginname'></input>
<input type='password' name='loginpassword'></input>
<input type='submit'>Submit</input>
</form>
Votre login.php
<?php
session_start();
// Dont forget to check your variables
$loginname = $_POST["loginname"];
$password = $_POST["loginpassword"];
// Check the correct login (for example with a database)
if ($login_correct) {
$_SESSION["username"] = $loginname;
$_SESSION["logged"] = true;
header("index.html");
exit;
else {
$_SESSION["logged"] = false;
header("registerform.html");
exit;
}
}
?>
Dans votre index.html vous pouvez faire:
<?php
session_start();
if($_SESSION['logged'] == true){
echo $_SESSION["username"];
echo '<a href="logout.php"><span>Logout</span></a></li>';
}
else {
echo '<a href="registerform.html"><span>Login/Register</span></a></li>';
}
?>
Si vous souhaitez que le nom d'utilisateur soit affiché à la place, comme dans l'exemple, vous devez modifier votre code pour onlinestore.html comme suit:
<li class='active' style='float:right;'>
<?php
session_start();
if($_SESSION['logged']==true){
echo '<a href="logout.php"><span>' + $_SESSION["username"] + ' (Logout)</span></a></li>';
}
elseif($_SESSION['logged']==false)
echo '<a href="registerform.html"><span>Login/Register</span></a></li>';
?>
<div class="msg"><?php echo $msg;?></div>
<form type="submit">
<input type="text" name="Email">
<input type="password" name="Password">
<button type="submit" name="Login">Login</button>
</form>
<?php
require 'connection.php';
if (isset($_POST['Login'])) {
$email = $_POST['Email'];
$password = $_POST['Password'];
$user = "SELECT username FROM table_name WHERE email = '".$email."' and password = '".$password."'";
$user = mysqli_query($con, $user);
if (mysqli_num_rows($user) > 0) {
while ($row = mysqli_fetch_array($user)) {
$username = $row['username'];
}
} else {
$msg = "Can't Log in";
}
}
echo $username;
?>
Je pense que votre PHP devrait ressembler à cela:
<?php
session_start();
username = $_SESSION["username"]
if($_SESSION['logged'] == true) {
echo '<a href="logout.php"><span>' . username. 'Logout</span></a></li>';
}
else {
echo '<a href="registerform.html"><span>Login/Register</span></a></li>';
}
?>
Utilisez des crochets dans les deux cas, sinon, ou aucun. En passant, vous n'avez pas besoin d'autre chose si vous ne vérifiez qu'un booléen. (il n'y a que 2 possibilités)