У меня проблема, я создаю страницу входа в DashBoard (с SqlSrv в базе данных)
Когда пароль в БД и пароль, введенный пользователем, совпадают, я даже не могу подключиться, когда.
Это мой код:
<?php
session_start();
$serverName = "A106MVP19\SQLEXPRESS";
$uid = "sa";
$pwd = "root";
$databaseName = "FormaSport";
$connectionInfo = array( "UID"=>$uid,
"PWD"=>$pwd,
"Database"=>$databaseName);
/* Connect using SQL Server Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
die( print_r( sqlsrv_errors(), true));
}if(isset($_POST) && !empty($_POST['emailCo']) && !empty($_POST['mot_de_passeCo']))
{
$login = $_POST["emailCo"];
$pass = $_POST["mot_de_passeCo"];
extract($_POST);
$sql = "SELECT pass FROM Formateur WHERE mail='".$login."'";
$req = sqlsrv_query($conn, $sql) or die('Erreur SQL!<br>'.$sql.'<br>');$data = sqlsrv_fetch_array($req, SQLSRV_FETCH_ASSOC);
echo $data['pass']."<br />"; //for view the pass for the user in database
echo $pass."<br />"; //for view the input pass
echo gettype($data['pass'])."<br />"; // type of pass in DB
echo gettype($pass)."<br />"; // type pass input
if($pass !== $data['pass'])
{
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('index.html'); // On inclut le formulaire d'identification en dessous du message d'information
exit;
}
else
{
$_SESSION['login'] = $login;
echo 'Vous etes bien logué';
// Mettre une redirection ici
// redirection here
}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('index.html'); // On inclut le formulaire d'identification
exit;
}?>
Как вы можете посмотреть здесь:
echo $data['pass']."<br />"; //for view the pass for the user in database
echo $pass."<br />"; //for view the input pass
echo gettype($data['pass'])."<br />"; // type of pass in DB
echo gettype($pass)."<br />"; // type pass input
Я проверил тип пароля, и они одинаковы.
Если все увидят, где я сделал ошибку, мне нужна ваша помощь!
Большое спасибо.
Pokky.
PS: (извините за «френглиш»)
Вы должны поместить свой запрос в цикл PHP, чтобы поиск выполнялся в базе данных.
$sql = "SELECT pass FROM Formateur WHERE mail='".$login."'";
$req = sqlsrv_query($conn, $sql) or die(print_r(sqlsrv_errors(),true));
if(sqlsrv_has_rows($req) != 1){
echo "* Error! no result found OR more than one result found";
}else{
while($data = sqlsrv_fetch_array($req, SQLSRV_FETCH_ASSOC)){
$_SESSION['id'] = $data[0];
$_SESSION['login'] = $data[1];
}
}
Также я рекомендую проверить пароль в базе данных и использовать класс PDO для аутентификации, но в этом случае вам нужно проверить, включено ли расширение для PDO в вашей конфигурации PHP на сервере.
Других решений пока нет …