Проверка запуска сессии с помощью PHP / Postgresql PDO
я работаю с формой запуска сессии в html / PDO PHP. Поскольку мои знания PDO почти нули, я продвигался вперед в том, что указывает мне логика, и с stackoverflow. Я уже сделал свое соединение и захват данных и проверил информацию (я повторяю, как логика указала мне, логика новичка), но у меня есть проблема, когда страница загрузки запускает мне предупреждение о проверке, и я не могу найти, как сделать, чтобы он активировался только при отправке формы, к сожалению, я не могу работать проверку на часть файла, то код:
<?php
session_start();
include ('pdoconnectexpo.php');
$usuario = $_POST['usuario'];
$contrasena = $_POST['pwd'];
if(isset($_POST['iniciar_sesion'])){
$query = 'SELECT id_usuario, usuario FROM "public".usuarios WHERE usuario=:usuario AND contrasena=:contrasena';
//Usuario
$registros = $conn2->prepare( $query ); //Preparamos la consulta
$registros->execute( array(":usuario" => $usuario,":contrasena" => $contrasena) ); //Le pasamos el valor al marcador, esto es un array por lo que soporta tanto valores requiera la query, separador por coma
$registros = $registros->fetchAll( PDO::FETCH_OBJ ); //convirtiendo el resultado en objetos para poder iterar en un ciclo.
if(!isset($registros[0]->usuario)){
echo "<script type=\"text/javascript\">alert(\"Usuario Errado o Contraseña Errada\");</script>";
}else{
// code...
$_SESSION['usuario'] = $usuario;
$_SESSION['id_usuario'] = $id_usuario;
header('Location: inicio.php');
}
}
?>
и под php я называю следующий html-код (я просто помещаю форму):
<form class="login100-form validate-form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<span class="login100-form-title p-b-34">
Inicio de Sesión
</span>
<div class="wrap-input100 rs1-wrap-input100 validate-input m-b-20" data-validate="Type user name">
<input id="first-name" class="input100" type="text" name="usuario" placeholder="Usuario">
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 rs2-wrap-input100 validate-input m-b-20" data-validate="Type password">
<input class="input100" type="password" name="pwd" placeholder="Contraseña">
<span class="focus-input100"></span>
</div>
<div class="container-login100-form-btn">
<button class="login100-form-btn">
Iniciar Sesión
</button>
</div>
</form>
1 answers
Во-первых, вы можете оптимизировать свой запрос вместо 2 иметь 1;
session_start();
include ('pdoconnectexpo.php');
$usuario = $_POST['usuario'];
$contrasena = $_POST['pwd'];
/*echo $usuario;
echo $contrasena;*/
$query = 'SELECT usuario FROM "public".usuarios WHERE usuario=:usuario AND contrasena = :contrasena';
//Usuario
$registros = $conn2->prepare( $query ); //Preparamos la consulta
$registros->execute( array(":usuario" => $usuario,":contrasena" => $contrasena) ); //Le pasamos el valor al marcador, esto es un array por lo que soporta tanto valores requiera la query, separador por coma
$registros = $registros->fetchAll( PDO::FETCH_OBJ ); //convirtiendo el resultado en objetos para poder iterar en un ciclo.
if(!isset($registros[0]->usuario)){
echo "<script type=\"text/javascript\">alert(\"Usuario Errado o Contraseña Errada\");</script>";
}else{
$_SESSION['usuario'] = $usuario;
$_SESSION['id_usuario'] = $id_usuario;
header('Location: inicio.php');
}
Затем в вашем HTML
на кнопке входа создайте его типа submit
и присвоите ему имя с атрибутом name
, таким образом, вы проверяете, что эта кнопка нажата;
<div class="container-login100-form-btn">
<input type="submit" name="iniciar_sesion" class="login100-form-btn" value="Iniciar Sesión">
</div>
Примечание: просто добавьте кнопку html.
С этим остается только проверить, что при нажатии кнопки это показывает предупреждение;
if(isset($_POST['iniciar_sesion'])){
//todo tu codigo de inicio se sesion aqui
}
Объединяя все это, вы остаетесь так;
if(isset($_POST['iniciar_sesion'])){
$query = 'SELECT usuario FROM "public".usuarios WHERE usuario=:usuario AND contrasena = :contrasena';
//Usuario
$registros = $conn2->prepare( $query ); //Preparamos la consulta
$registros->execute( array(":usuario" => $usuario,":contrasena" => $contrasena) ); //Le pasamos el valor al marcador, esto es un array por lo que soporta tanto valores requiera la query, separador por coma
$registros = $registros->fetchAll( PDO::FETCH_OBJ ); //convirtiendo el resultado en objetos para poder iterar en un ciclo.
if(!isset($registros[0]->usuario)){
echo "<script type=\"text/javascript\">alert(\"Usuario Errado o Contraseña Errada\");</script>";
}else{
$_SESSION['usuario'] = $usuario;
$_SESSION['id_usuario'] = $id_usuario;
header('Location: inicio.php');
}
//todo tu codigo de inicio se sesion aqui
}
HTML
<form class="login100-form validate-form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<span class="login100-form-title p-b-34">
Inicio de Sesión
</span>
<div class="wrap-input100 rs1-wrap-input100 validate-input m-b-20" data-validate="Type user name">
<input id="first-name" class="input100" type="text" name="usuario" placeholder="Usuario">
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 rs2-wrap-input100 validate-input m-b-20" data-validate="Type password">
<input class="input100" type="password" name="pwd" placeholder="Contraseña">
<span class="focus-input100"></span>
</div>
<div class="container-login100-form-btn">
<input type="submit" name="iniciar_sesion" class="login100-form-btn" value="Iniciar Sesión">
</div>
</form>
Я объясняю вам немного больше, что мы сделали, это создать новый элемент типа input, чтобы отправить его на сервер, когда пользователь отправил форму, чтобы мы проверили, что этот элемент существует в запросе данных на сервер, и мы можем быть уверены, что это загружается только тогда, когда форма отправляется POST.