Wyświetlenie alertu if session isset i zamknięcie sesji

0

Hej.

Mam taki kawałek kodu:

if(isset ($_SESSION["blad_logowania"]) && $_SESSION["blad_logowania"]==1){
	echo "<script type='text/javascript'>alert('Błędne hasło lub login.');</script>";
	unset($_SESSION["blad_logowania"]);
}

Ale niestety nie wykonuje się to poprawnie. Jeżeli wywalę unset... to działa jednak ja chciałbym aby jednorazowo pokazał się taki alert. Wydaje mi się że php nie wykonuje poleceń pokolei i po prostu unset wywala sesję przez co tak naprawdę nie wykonuje ostatecznie nic z tego ifa. Jak można z tego wybrnąć?

0

Powiedz co dokładniej chcesz zrobić, bo pewnie da się to lepiej rozwiązać niż tak mieszać z tym js. Coś w stylu session flash ?

0

Jeżeli chcesz uzyskać alert o stanie logowania to nie lepiej zobić to ajaxem i później wyświetlić coś javascriptem w zależności od zwróconej wartości?

Tutaj masz przykład (na pierwszy rzut oka wyglada ok) http://code.runnable.com/UyClLhrKWGFrcrQW/simple-php-mysql-jquery-login-script i jest prosty do zrozumienia

0

nie powinno się raczej nigdy używać alerta. jak już chcesz okienko, to możesz użyć tego z bootstrapa. poza tym, czy jest sens wyświetlania tego powiadomienia, skoro i tak zostaniesz przekierowany na nową stronę?

0

Chodzi o to aby po próbie logowania, jeżeli użytkownik poda złe dane wyświetlił się alert, że dane są nieprawidłowe.
Logowanie zrobiłem przy pomocy Ajax wobec tego nie przechodzę przez "inną stronę" tylko pozostaje cały czas na stronie z której użytkownik się loguje. Jest ona jednak odświeżana, żeby wyczyścić POST. Wobec tego wpadłem na pomysł żeby podczas logowania zapisać zmienną sesji 'blad_logowania' która będzie widoczna na odświeżonej stronie. Wtedy miałby pojawić się alert a zmienna musi zostać wyczyszczona bo inaczej przy przejściu na każdą kolejną stronę wyskakiwałby ten alert.
Teraz zrobiłem to tak że po alercie i kliknięciu ok odpalam kolejny skrypt ajax czyszczący tą sesję ale wydaje mi się, że jest to toporne rozwiązanie :).

0

Jest ona jednak odświeżana, żeby wyczyścić POST

Dlaczego czyścisz POST? Wyślij ajaxem dane i obsłuż walidację danych po stronie serwera tak, żeby zwrócił Ci konkretną daną w zależności od wyniku walidacji.
Zwróci np "false", no to ajaxem to odbierzesz i wyświetlisz alert, a jak odpowie czym innym to robisz przekierowanie.

Poaz tym nie wyświetlaj skryptu poprzez echo i w dodatku za pomocą:

<script type="text/javascript"></script>

To jest niezgodne ze standardem w tej chwili. Używaj:

<script></script>

I tak jak mówię, obsłuż ajaxem ten alert najlepiej przy użyciu jQuery. Jak tworzysz zapytanie ajaxowe? Jeżeli nie przez jQuery, to użyj go i wygodnie obsłużysz odpowiedź serwera. Nie zaprzęgaj sesji i nie wrzucaj pomieszanego kodu PHP z JS do strony HTML.

0

Witam.

Walczę z tym i nie mogę przejść jednego. Mam taki kod:

function login(){
   		$login = $("input#email").val();
   		$haslo = $("input#haslo").val();

   		$.ajax({
    		type: "POST",
    		url: "C:/wamp/www/tiptop/views/tiptop/login_user.php",
    		data: {
            	email : $login,
            	haslo1 : $haslo
    		},
    		success: function(msg){
            	alert (msg);
    		},
    			error: function(error){
       			 alert (error);
    		}
		});
   		}

plik login_user.php:

<?php
	unset($_SESSION['user']);
	$login = login_usr($_POST['email'],$_POST['haslo1']);
	if ($login)
	{
		$_SESSION["user"] = $_POST['email'];
		$_SESSION["user"] = $login;
		return true;
	}
	else{
		unset($_SESSION['user']);
		return false;
	}
?>

Ale zawsze pokazuje mi się alert alert (error) z napisem [object Object]

0

JS to nie PHP, gdzie nazwę zmiennej poprzedza się znakiem dolara.

$_SESSION["user"] = $_POST['email'];
$_SESSION["user"] = $login;

Tak trochę bez sensu, bo nadpisujesz sobie tę wartość z POST'a i już pomijam fakt, że nie jest filtrowana w żaden sposób.

Użyj sobie console.log na tej otrzymywanej wartości w sekcji error (w skrypcie JS) i zobacz co się pojawi w konsoli.

0

Oczywiście filtrowanie zrobię potem. Najpierw musi zadziałać bez :).

Poprawiłem kod, okazało się że nie widział pliku login_user.php

function login(){
	login = $("input#email").val();
	haslo = $("input#haslo").val();

	$.ajax({
	type: "POST",
	url: "/tiptop/views/layout/login_user.php",
	data: {
	email_ajax : login,
	haslo_login : haslo
	},
	success: function(obj){
		alert("ok");
	},
	error: function(error){
		console.log("error ".error);
    	}
	});
}

login_user.php

	include ('../../php/db_func.php');

	unset($_SESSION['user']);
	$odp="no";
	$login = login_usr($_POST['email_ajax'],$_POST['haslo_login']);
	if ($login)
	{
		$_SESSION["user"] = $login;
		$odp = "ok";
	}
	else{
		unset($_SESSION['user']);
		$odp = "no";
	}
	
 echo ($odp);

Konsola wyświetla błąd undefined.

0

Ok. Działa. Okazało się, że wczytywane dane HTML muszą być z tej samej domeny jeżeli używamy ajax.

0

Ale mam kolejny problem :D Bo strona p próbie logowania jest odświeżana i nie wykonuje mi zadania w success: function(obj){. Chyba że jest to Alert to na chwilę się tam zatrzymuje aż wcisnę ok i potem odświeża całą stronę.

<form class="login" id="login" method="post">
  <fieldset>
    <p class="login">
      <label for="email">E-Mail</label>
      <input id="email" type="email" name="email">
    </p>
    <p class="login">
      <label for="haslo">Hasło:</label>
      <input id="haslo" type="password" name="haslo">
    </p>
    <p>
      <input class="button" type="submit" value="Submit" onclick="login_ajax()">
    </p>
  </fieldset>
</form>
 		
   	function login_ajax(){
   		login = $("input#email").val();
   		haslo = $("input#haslo").val();

   		$.ajax({
    		type: "POST",
    		url: "index.php?view=login_user",
    		data: {
            	email_ajax : login,
            	haslo_login : haslo
    		},
    		success: function(obj){
				if(obj=="no"){
					$("div#bladLogowania").show(500);
				}
    		},
    			error: function(error){
    			console.log("error ".error);
    			alert ("Coś poszło nie tak. Spróbuj ponownie.");
    		}
		});
   		}

Jak wstawię w if(obj=="no") alerta to się odpala czyli wchodzi do środka.

No i udało się. button w formularzu nie mógł mieć typu submit a button.

1 użytkowników online, w tym zalogowanych: 0, gości: 1