Проверка запуска сессии с помощью 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>
Author: Luis Alfredo Serrano Díaz, 2018-05-04

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.

 2
Author: Albert Hidalgo, 2018-05-04 17:45:41