Nei tuoi non ci sono particolari errori. È normale che ti ignori il controllo di $_SESSION['admin'] (spiegato alla fine).
Comunque, io li farei circa così (nota le differenze, e se non capisci qualcosa chiedi pure):
Codice PHP:
<?php
error_reporting(E_ALL);
session_start();
$db = mysql_connect("localhost", "*****", "*****") or die ('Errore durante la connessione');
mysql_select_db("*****", $db) or die ('Errore durante la selezione del db');
if (isset($_POST['username'], $_POST['password'])) {
$user = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$sql = "SELECT * FROM membri WHERE uname = '$user' AND pword = '$pass' LIMIT 1;";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$count = mysql_num_rows($result);
$adminsql = "SELECT * FROM admin WHERE uname = '$user' AND pword = '$pass' LIMIT 1;";
$adminresult = mysql_query($adminsql);
$admincount = mysql_num_rows($adminresult);
if($admincount==1){
$_SESSION['admin']=$user;
$_SESSION['utente']=$user;
$_SESSION['name']=$row['fullname'];
header("location: homepage.php");
}else if($count==1)
{
$_SESSION['utente']=$user;
$_SESSION['name']=$row['fullname'];
if(isset($_SESSION['admin']))
unset($_SESSION['admin']);
header("location: homepage.php");
}else
{
header("location: error1.php");
}
}else
{
header("location: error2.php");
}
?>
Codice PHP:
<?php
//codice che uso per il controllo sessioni nelle pagine a cui hanno accesso sia i membri sia gli admin
error_reporting(E_ALL);
session_start();
if(isset($_SESSION['utente'])){
header('location: index.php');
exit;
}
//altri codici...
?>
Nella condizione dell'esistenza di
$_SESSION['utente'] || $_SESSION['admin']
, il controllo di $_SESSION['admin'] è inutile perché se esiste, esisterà sicuramente anche $_SESSION['utente'].
Ciao!