Mysqli et Php avec l'ouverture d'une session formulaire de garder l'échec
Quand j'appuie sur mon bouton submit pour la connexion, rien ne se passe. Je suis juste en train de la même page, et même pas un message d'erreur. La connexion à la db doit être fine. J'ai été en regardant le code pour 10 heures maintenant, et je ne peux pas comprendre pourquoi. Quelqu'un a une idée?
dbconfic.inc.php:
<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "root";
$db_name = "testdb";
//connection:
$mysqli = new mysqli($db_host, $db_user, $db_pass , $db_name);
//tjek conenction:
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
}
//vi kører utf-8 på connection:
$mysqli->set_charset("utf-8");
?>
index.php:
<?php
include('login.php'); //Include Login Script
if(isset($_SESSION['username']))
{
header('Location: home.php');
}
exit();
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>PHP Login Form with Session</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<h1>PHP Login Form with Session</h1>
<div class="loginBox">
<h3>Login Form</h3>
<br><br>
<form method="post" action="">
<label>Username:</label><br>
<input type="text" name="username" placeholder="username" /><br><br>
<label>Password:</label><br>
<input type="password" name="password" placeholder="password" /> <br><br>
<input type="submit" value="Login" />
</form>
<div class="error"><?php echo $error;?></div>
</div>
</body>
</html>
login.php:
<?php
session_start();
include("dbconfic.inc.php"); //Establishing connection with our database
$error = ""; //Variable for storing our errors.
if(isset($_POST["submit"]))
{
if(empty($_POST["username"]) || empty($_POST["password"]))
{
$error = "Both fields are required.";
}else
{
//Define $username and $password
$username=$_POST['username'];
$password=$_POST['password'];
//To protect from MySQL injection
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysqli_real_escape_string($db, $username);
$password = mysqli_real_escape_string($db, $password);
$password = md5($password);
//Check username and password from database
$sql="SELECT uid FROM users WHERE username='$username' and password='$password'";
$result=mysqli_query($db,$sql);
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
//If username and password exist in our database then create a session.
//Otherwise echo error.
if(mysqli_num_rows($result) == 1)
{
$_SESSION['username'] = $login_user; //Initializing Session
header("location: home.php"); //Redirecting To Other Page
}else
{
$error = "Incorrect username or password.";
}
}
}
?>
home.php:
<?php
include("check.php");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<h1 class="hello">Hello, <em><?php echo $login_user;?>!</em></h1>
<br><br><br>
<a href="logout.php" style="font-size:18px">Logout?</a>
</body>
</html>
check.php:
<?php
include('dbconfic.inc.php');
session_start();
$user_check=$_SESSION['username'];
$sql = mysqli_query($db,"SELECT username FROM users WHERE username='$user_check' ");
$row=mysqli_fetch_array($sql,MYSQLI_ASSOC);
$login_user=$row['username'];
if(!isset($user_check))
{
header("Location: index.php");
}
?>
logout.php
<?php
session_start();
if(session_destroy())
{
header("Location: index.php");
}
?>
votre formulaire n'a pas d'action, vous devez définir l'action. Essayez $_SERVER['PHP_SELF'];
éviter
Tout d'abord,
Merci beaucoup pour vos commentaires. Donc, cela voudrait dire que la forme ressemble à ceci: <form method="post" action="$_SERVER['SCRIPT_NAME']">
Si vous postez à la même page, vous pouvez omettre l'action au total
éviter
PHP_SELF
, car il est vulnérable - au lieu d'utiliser $_SERVER['SCRIPT_NAME']
~ bien que dans ce cas avoir aucune action signifie que le formulaire est posté à la même page, ce qui est correct.Tout d'abord,
if ((isset($_SESSION['username']) != '')){ ...
est incorrecte, il doit être if(isset($_SESSION['username'])){ ...
. Ensuite, ajoutez exit();
après header();
déclaration, l'en-tête n'est pas suffisant pour rediriger l'utilisateur vers une autre page. Et enfin, lorsque vous ne echo $error;
, qu'il ne montre aucune erreur?Merci beaucoup pour vos commentaires. Donc, cela voudrait dire que la forme ressemble à ceci: <form method="post" action="$_SERVER['SCRIPT_NAME']">
Si vous postez à la même page, vous pouvez omettre l'action au total
OriginalL'auteur Julie24 | 2016-01-31
Vous devez vous connecter pour publier un commentaire.
La page d'index semble plus ou moins ok, une modification mineure à l'utilisation de
isset
et l'inclusion de la login.php script.La
check.php
ne un supplément de db de recherche, vous devriez être capable d'utiliser simplement les informations de la session de juger si ou de ne pas rediriger l'utilisateur - donc, plutôt que de l'écho$login_user
dans le code html utiliser$_SESSION['username']
Dans le login.php utiliser un script, déclarations préparées à l'avance, si possible, pour aider à atténuer contre les injections sql, et si possible, éviter de hachage des mots de passe avec md5!
Je dirais que c'est pas le problème. Je test que vous avez défini une variable de session, dans
home.php
, en ajoutantsession_start();exit($_SESSION['username']);
en haut avantcheck.php
et essayez de vous connecterJe pense que... le problème est que le
submit
bouton n'a pas de nom et vous tester pour$_POST['submit']
~ lui donner un nomsubmit
et essayerje vous remercie. Ok quand j'ajoute ed session_start();exit($_SESSION['username']); nom="submit" je suis arrivé à mon index.php page, mais j'obtiens l'erreur Serveur 500
c'est parce que ( j'ai recréé vos scripts ), le bouton soumettre manque le nom
submit
utilisé dans la logique des tests. J'ai eu ce que tous travaillent ici - qui a été un problème difficile à repérer.OriginalL'auteur RamRaider
Base de données:
Index:
De connexion:
MAISON:
Vérifier:
je fixe la session de connexion.php..essayez à nouveau..
OriginalL'auteur cos nik