Controllo elseif su un array

elpirata

Utente Attivo
18 Mar 2009
230
7
18
Buongiorno a tutti,
ho questo codice che mi permette di autenticare gli utenti e contestualmente registrare la sessione:

Questo è il codice perfettamente funzionante.

PHP:
...

// preparo ed invio la query
	$query = "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
	$result = mysql_query($query);
	
	// controllo l'esito
	if (!$result) {
		die("Errore nella query $query: " . mysql_error());
	}

	$record = mysql_fetch_array($result);

	if(!$record) {
		$messaggio = urlencode('Nome utente o password errati');
		header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
		
	} else {
		session_start();
		$_SESSION['username'] = $record['username'];
		$messaggio = urlencode('Login avvenuto con successo');
		header("location: home.php");
}
}
?>
Il problema nasce nell'implementazione di un elseif all'interno del codice, che sostanzialmente dovrebbe intercettare l'utente che si logga e in base al suo nome mostrargli un header location diversa. Questo il codice:

PHP:
	// preparo ed invio la query
	$query = "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
	$result = mysql_query($query);
	
	// controllo l'esito
	if (!$result) {
		die("Errore nella query $query: " . mysql_error());
	}

	$record = mysql_fetch_array($result);

	if(!$record) {
		$messaggio = urlencode('Nome utente o password errati');
		header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
		
	} 		
		elseif (in_array("pippo", $record, TRUE)){
		session_start();
		$_SESSION['username'] = $record['username'];
		$messaggio = urlencode('Login avvenuto con successo');
		header("location: pippo.php");
}
	 else {
		session_start();
		$_SESSION['username'] = $record['username'];
		$messaggio = urlencode('Login avvenuto con successo');
		header("location: default.php");
}

?>
Mi dareste una mano a capire dove sbaglio, visto che ottengo sempre un errore alla riga di chiusura ?

Codice:
unexpected $end
:byebye:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
generalmente l'errore unexpected $end avviene quando php non trova la fine di un'istruzione es. graffa aperta, ma non chiusa e quindi procede sino al ?> dandoti quell'errore
ora nella parte dello script che hai postato non vedo cosa può produrre quell'errore
comunque io modificherei lo script così
PHP:
<?php
//..........
// preparo ed invio la query
$query = "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
	die("Errore nella query $query: " . mysql_error());
	//e qui un rimando a dove vuoi
}else{
	$record = mysql_fetch_array($result);
	if(mysql_num_rows($result)==0){
			$messaggio = urlencode('Nome utente o password errati');
			header("location:". $_SERVER['PHP_SELF']."?msg=$messaggio");
			exit(); 
	}else{
		session_start();
		if(in_array("pippo", $record, TRUE)){
			$_SESSION['username'] = $record['username'];
			$messaggio = urlencode('Login avvenuto con successo');
			header("location: pippo.php");
			exit();
		}else{
			$_SESSION['username'] = $record['username'];
			$messaggio = urlencode('Login avvenuto con successo');
			header("location: default.php");
			exit();
		}
	}
}
?>
anche se, come ho detto, l'errore probabilmente non si trova nello script che hai postato, ma prima.
p.s.
dopo l'header che riinvia conviene mettere exit()
nella parte ok a cosa ti serve $messaggio se poi non lo trasmetti?
ultimo: passa a mysqli