Repository 32bit  Forum
Repository 64bit  Wiki

php / sql - dubbi e domande varie...

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

php / sql - dubbi e domande varie...

Messaggioda danix » gio giu 12, 2008 19:18

Ciao a tutti,
apro un nuovo thread per non sporcare quest'altro thread...
non riesco a lavorare con i database, o meglio, con le tabelle...
provo a spiegarmi meglio, sto imparando da qualche giorno un po' di php e mysql, dalla shell riesco a gestire bene una tabella degli utenti con le password in chiaro, riesco a visualizzare selettivamente i vari contenuti, però ho un paio di dubbi...
leggendo l'ottimo tutorial di Nino "aschenaz" B. :D , quando è spiegato come gestire l'autenticazione, nel codice della pagina che si occupa di gestire i dati c'è questo commento:
Codice: Seleziona tutto
#  Altrimenti registriamo le nostre variabili di sessione; per praticità, visto che la query,
#+ in questo caso, ci restituisce un'unica riga, usiamo la funzione "mysql_result", coi parametri
#+ "risorsa","riga","chiave", non essendoci bisogno di dover "sfogliare" più righe...

non conoscendo il php ho pensato che non si potesse estrarre più di una riga con questo statement:
Codice: Seleziona tutto
$_SESSION["utenteautorizzato"]=mysql_result($risultatoamministratore,0,0);

giusto??
ma se io ho più utenti, come faccio a gestire le varie autenticazioni anche contemporaneamente??
ad esempio, io ho creato una tabella "users" strutturata così:
Codice: Seleziona tutto
mysql> DESCRIBE users;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type                | Null | Key | Default | Extra          |
+-------+---------------------+------+-----+---------+----------------+
| ID    | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| USER  | varchar(50)         | NO   |     | NULL    |                |
| PASS  | varchar(255)        | NO   |     | NULL    |                |
+-------+---------------------+------+-----+---------+----------------+
3 rows in set (0,00 sec)

e con questi dati:
Codice: Seleziona tutto
mysql> SELECT * FROM users;
+----+--------+------------+
| ID | USER   | PASS       |
+----+--------+------------+
|  1 | admin  | 123321     |
|  2 | danix  | mypass     |
|  3 | poster | posterpass |
|  4 | user1  | 555888     |
|  5 | user2  | 777333     |
+----+--------+------------+
5 rows in set (0,00 sec)

come faccio a sapere quale utente si sta loggando?

Spero mi aiuterete, grazie mille a tutti...


Ciau
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda aschenaz » gio giu 12, 2008 20:54

Non è che abbia capito molto bene... :-k

Considera che le variabili di sessione sono, per così dire
(ma non è un'espressione felice), come delle variabili lato-client.
Nel momento in cui tu memorizzi l'id dell'utente in una variabile
di sessione, quella variabile rimane memorizzata globalmente
finché non chiudi il browser (o finché non la de-registri tu).
Allo stesso modo, puoi registrare altre variabili di sessione
con l'username etc...
La funzione mysql_result($risorsa,$riga,$chiave) restituisce
un valore unico, corrispondente alla riga di $risorsa numero
$riga ed alla voce numero $chiave. Ad esempio, se la risorsa
$risorsa restituita dalla query "SELECT * FROM utenti", è così
formata...
Codice: Seleziona tutto
ID   user   password
 1    tizio   hjhjhj
 2    caio   llklkll

se voglio sapere la password di tizio, devo richiamare
mysql_result($risorsa,0,2) (ricordando che gli indici partono da 0,
come per gli array), se voglio l'username di caio, avrò
mysql_result($risorsa,1,1) etc...

Ma hai altre possibilità per indicizzare le risorse restituite dalle query:
Codice: Seleziona tutto
while($righequery=mysql_fetch_row($risorsa)) {
   echo 'id = '.$righequery[0].' - user = '.$righequery[1].' ...\n';
}

oppure...
Codice: Seleziona tutto
while($righequery=mysql_fetch_array($risorsa)) {
   echo 'id = '.$righequery["id"].' - user = '.$righequery["user"].' ...\n';
}

oppure ancora (il mio preferito)...
Codice: Seleziona tutto
while($righequery=mysql_fetch_object($risorsa)) {
   echo 'id = '.$righequery->id.' - user = '.$righequery->user.' ...\n';
}

Se vuoi lasciare traccia dei log, puoi scrivere un file di
testo con tutti i login, oppure puoi creare una tabella mysql
ad hoc.

Ma, probabilmente, non ho capito nulla di quello che intendevi. :lol:
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4421
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: php / sql - dubbi e domande varie...

Messaggioda danix » gio giu 12, 2008 23:01

Adesso che ho un po' più chiaro il discorso delle tabelle di mysql (e anche di php in genere) forse riesco ad esprimermi un po' più chiaramente (nonostante mi stia per addormentare ;) )...
Avevo capito male il senso di quel commento, quando dici che la query ci restituisce un'unica riga, avevo capito che questo statement
Codice: Seleziona tutto
$_SESSION["utenteautorizzato"]=mysql_result($risultatoamministratore,0,0);

avrebbe letto solo dalla riga 0,0, cioè la prima della tabella... invece la query:
Codice: Seleziona tutto
$risultatoamministratore=mysql_query("SELECT ID FROM amministratori WHERE User='$user' AND Pass='$pass'");

si occupa di fare la ricerca, e ovviamente restituisce una sola riga, per cui la sessione viene registrata correttamente utilizzando l'unica riga che si ha a disposizione, e cioè il risultato della query...

Grazie lo stesso dell'aiuto Nino, stasera posso andare a dormire soddisfatto, sono riuscito a creare una sezione nascosta del sito che è visibile solo se si è loggati, e dentro questa sezione sono riuscito a mettere una tabella degli utenti simile a quella che ho postato prima... :D


Ciau...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda danix » ven giu 13, 2008 7:07

un altro dubbio più che altro concettuale, per gestire utenti con permessi diversi, come mi consigliate di organizzarmi?? una singola tabella con un campo admin (di tipo bool) o 2 directory, una per tutti gli utenti e un'altra solo per quelli amministratori??

Non riesco a organizzare bene le varie tabelle tra loro, si nota?? :D


Grazie mille...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda aschenaz » ven giu 13, 2008 8:31

danix85 ha scritto:un altro dubbio più che altro concettuale, per gestire utenti con permessi diversi, come mi consigliate di organizzarmi?? una singola tabella con un campo admin (di tipo bool) o 2 directory, una per tutti gli utenti e un'altra solo per quelli amministratori??

Non riesco a organizzare bene le varie tabelle tra loro, si nota?? :D


Grazie mille...

Io in genere uso la prima ipotesi. Anche in Asche è così: un campo, che,
se flaggato, al login registra un'ulteriore variabile di sessione.

Certo, se devi gestire un sito con la registrazione di utenti e devi
raccogliere tante informazioni (indirizzo, telefono, e-mail...), a questo
punto ti conviene usare due tabelle, una degli utenti ed una degli admin
(per questi, infatti, ti bastano username, password, al limite e-mail...).

Per quanto riguarda l'uso del database, leggiti (se non l'hai già fatto) il
paragrafo delle tabelle sul tutorial:
http://www.slacky.eu/wikislack/index.ph ... Le_Tabelle ;
è un buon cosnsiglio che mi ha dato anni fa un docente in un minicorso di
ah-ccess (ovvero ah... che cess di programma! :badgrin: ).

Ciao,
nino
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4421
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: php / sql - dubbi e domande varie...

Messaggioda danix » ven giu 13, 2008 12:57

ok. adesso ho un'altra domanda (non legata con la precedente)... il sito che sto sviluppando per imparare deve servire delle foto in jpg agli utenti, quindi pensavo di fare una tabella per le immagini con un riferimento al percorso sul disco fisso, ma cercando in rete mi sono imbattuto in un pdf in cui si paragonavano le prestazioni di php nel servire le immagini sia partendo da un database sia dal disco rigido... leggendo ho quindi appreso che si possono memorizzare le immagini direttamente nel database... non sono riuscito però a trovare altre info in merito, qualcuno mi può dare dei chiarimenti??

Grazie mille...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda aschenaz » ven giu 13, 2008 17:02

danix85 ha scritto:ok. adesso ho un'altra domanda (non legata con la precedente)... il sito che sto sviluppando per imparare deve servire delle foto in jpg agli utenti, quindi pensavo di fare una tabella per le immagini con un riferimento al percorso sul disco fisso, ma cercando in rete mi sono imbattuto in un pdf in cui si paragonavano le prestazioni di php nel servire le immagini sia partendo da un database sia dal disco rigido... leggendo ho quindi appreso che si possono memorizzare le immagini direttamente nel database... non sono riuscito però a trovare altre info in merito, qualcuno mi può dare dei chiarimenti??

Grazie mille...

Si, in teoria puoi salvare anche dei file su database, ma è una cosa
che non ho mai fatto né approfondito.
Io mi limito a salvare il percorso delle immagini...

Ciao,
nino
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4421
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: php / sql - dubbi e domande varie...

Messaggioda puzuma » ven giu 13, 2008 17:14

Per salvare dati di tipo binario su db devi usare il tipo "blob", normalmente però è sconsigliabile salvare file di grosse dimensioni su db per vari motivi che trovi facilemente elencati su internet.

Quindi su db metti tutte le "meta-info" (nome, descrizione, dimensioni, altezza, larghezza e tutto quello che ti passa per la testa) e il percorso del file salvato su disco.

Se gli utenti possono fare l'upload dei file sta attento a come salvi i file, di solito si salva il nome originale del file su db mentre il file su disco viene salvato con un nome generato sul momento. Questo sia per motivi di sicurezza sia per evitare che se un utente ti carica un file con lo stesso nome di uno già caricato venga sovrascritto il primo.
The quiet ones are the ones who change the world. The loud ones only take the credit.
Avatar utente
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 480
Iscritto il: mar lug 04, 2006 16:14
Località: Udine
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0

Re: php / sql - dubbi e domande varie...

Messaggioda danix » ven giu 13, 2008 18:20

grazie ragazzi, 'sto thread sta diventando sempre più interessante... :D

adesso ho bisogno di un aiuto più "pratico"...
Ho questo codice in una pagina di errore che è effettivamente troppo ripetitivo,
Codice: Seleziona tutto
    <?php
      if ($error_id==1) {
        $error_1_query="SELECT ERR_TEXT FROM site_errors WHERE ID = 1";
        $error_1_result=mysql_query($error_1_query, $connessione);
        $error_1_line = mysql_fetch_row($error_1_result);
        echo "<p id=\"error\">";
        echo "$error_1_line[0]";
        echo "</p>";
        echo "\n";
      }
      elseif ($error_id==2) {
        $error_2_query="SELECT ERR_TEXT FROM site_errors WHERE ID = 2";
        $error_2_result=mysql_query($error_2_query, $connessione);
        $error_2_line = mysql_fetch_row($error_2_result);
        echo "<p id=\"error\">";
        echo "$error_2_line[0]";
        echo "</p>";
        echo "\n";
      }
      elseif ($error_id==3) {
        $error_3_query="SELECT ERR_TEXT FROM site_errors WHERE ID = 3";
        $error_3_result=mysql_query($error_3_query, $connessione);
        $error_3_line = mysql_fetch_row($error_3_result);
        echo "<p id=\"error\">";
        echo "$error_3_line[0]";
        echo "</p>";
        echo "\n";
      }
      elseif ($error_id==4) {
        $error_4_query="SELECT ERR_TEXT FROM site_errors WHERE ID = 4";
        $error_4_result=mysql_query($error_4_query, $connessione);
        $error_4_line = mysql_fetch_row($error_4_result);
        echo "<p id=\"error\">";
        echo "$error_4_line[0]";
        echo "</p>";
        echo "\n";
      }
      elseif ($error_id==5) {
        $error_5_query="SELECT ERR_TEXT FROM site_errors WHERE ID = 5";
        $error_5_result=mysql_query($error_5_query, $connessione);
        $error_5_line = mysql_fetch_row($error_5_result);
        echo "<p id=\"error\">";
        echo "$error_5_line[0]";
        echo "</p>";
        echo "\n";
      }
      elseif ($error_id==6) {
        $error_6_query="SELECT ERR_TEXT FROM site_errors WHERE ID = 6";
        $error_6_result=mysql_query($error_6_query, $connessione);
        $error_6_line = mysql_fetch_row($error_6_result);
        echo "<p id=\"error\">";
        echo "$error_6_line[0]";
        echo "</p>";
        echo "\n";
      }

    ?>

vorrei trasformarlo in una funzione ma non saprei da dove partire per metterci mano... :(
qualcuno mi sa consigliare??

Giusto per esporre meglio il tutto, $error_id va a controllare il valore di eid che è un parametro passato con GET alla pagina in questione... sul database (a cui mi connetto tramite $connessione) ho una tabella così strutturata:
Codice: Seleziona tutto
mysql> SELECT * FROM site_errors;
+----+---------------------+-------------------------------------------------------------------+
| ID | ERR_NAME            | ERR_TEXT                                                          |
+----+---------------------+-------------------------------------------------------------------+
|  1 | 1_login_nouser      | You forgot to insert your login name                              |
|  2 | 2_login_nopass      | You forgot to insert your password                                |
|  3 | 3_register_nouser   | You are trying to register a new user with no username            |
|  4 | 4_register_nopass   | You are trying to register a new user with no password            |
|  5 | 5_register_db_error | An error occurred in the users database, contact an administrator |
|  6 | 6_username_exists   | You are trying to register with an already existing username      |
+----+---------------------+-------------------------------------------------------------------+


Ovviamente il tutto funziona in questo modo, ma è poco estetico per i miei gusti... ;)

mi date una mano??


Grazie mille a tutti...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda aschenaz » sab giu 14, 2008 8:43

Codice: Seleziona tutto
$errors=array(
  "1"=>"You forgot to insert your login name",
  "2"=>"You forgot to insert your password",                               
  "3"=>"You are trying to register a new user with no username",           
  "4"=>"You are trying to register a new user with no password",
  "5"=>"An error occurred in the users database, contact an administrator",
  "6"=>"You are trying to register with an already existing username"
);
echo "<p id=\"error\">{$errors["$error_id"]}</p>\n";

Senza bisogno di scomodare mysql. KISS, nevvero? ;)
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4421
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: php / sql - dubbi e domande varie...

Messaggioda danix » sab giu 14, 2008 12:31

e questa è stata la successione di facce che si sono alternate sul mio volto leggendo il tuo post...

:shock:
:)
:D
:lol:
:badgrin:
:evil:
:cry:
:banghead:

credo che farò una gigantografia della KISS rule (la versione di Berkley però) e la metterò nel muro di fronte al mio pc...

Grazie nino... :D
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda danix » sab giu 14, 2008 13:47

rieccomi...
non riesco a gestire i permessi degli utenti, nel senso che riesco a gestire le sessioni, solo che non so come distinguere tra utenti admin e utenti semplici... nel database ho la tabella users con i valori che ho postato sopra, il login lo eseguo come ha consigliato Aschenaz nel suo tutorial, in cima alla index.php ho:
Codice: Seleziona tutto
$pagineutenti=array("gestione","utenti","upload");
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
if(in_array($pagina,$pagineutenti) && !isset($_SESSION["utenteautorizzato"])) {
  header("Location: index.php?pagina=secondaria&messaggio=MUST-AUTHENTICATE!");
  exit;
}

e disegno il menu con queste righe:
Codice: Seleziona tutto
        $vocimenu=array("home","gallery","products","contacts", "gestione", "utenti", "upload");
        foreach($vocimenu as $voce) {
          if(!in_array($voce,$pagineutenti) || isset($_SESSION["utenteautorizzato"])) {
            if($pagina==$voce) echo '
            <li id="current">';
          elseif($pagina!=$voce) echo "
            <li>";
            if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
            echo $voce;
            if($pagina!=$voce) echo "</a>";
            echo "</li>";
          }
        }

in fondo alla pagina ho
Codice: Seleziona tutto
include("pages/$pagina.php");

che mi visualizza la pagina selezionata...
riguardo alla funzione di autenticazione ho nella pagina di raccolta dei dati:
Codice: Seleziona tutto
$azione=$_GET["action"];

if($azione=="login") {
  $User=$_POST["user"];
  $Pass=$_POST["pass"];
  if ($User=="") {
    reindirizza("pagina=error&eid=1");
  }
  elseif ($Pass=="") {
    reindirizza("pagina=error&eid=2");
  }
  else {
    $risultatoutente=mysql_query("SELECT ID FROM users WHERE USER='$User' AND PASS='$Pass'", $connessione);

    if(mysql_num_rows($risultatoutente)==0) {
      reindirizza("pagina=register&user=$User");
    }

    else {
      $_SESSION["utenteautorizzato"]=mysql_result($risultatoutente,0,0);
      reindirizza("pagina=home&sezione=secondaria&messaggio=$User-LOGGED-IN");
    }
  }
}


mi aiutate a capire?? Grazie mille a tutti per l'infinita pazienza...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda aschenaz » sab giu 14, 2008 21:56

danix85 ha scritto:... non so come distinguere tra utenti admin e utenti semplici... nel database ho la tabella users con i valori che ho postato sopra...

Dovresti aggiungere un campo admin alla tabella. Poi verifichi con una
query se il campo admin è flaggato e registri una variabile di sessione
(che so $_SESSION["admin"] per esempio)... Puoi farlo benissimo
nella stessa query dell'accesso autenticato.
A questo punto, decidi quali pagine devono essere accessibili solo
agli admin e le metti un altro array, verificando, nel caso la pagina
attiva sia compresa nell'array, se è registrata la variabile di sessione
degli admin (allo stesso modo in cui verifichi l'accesso autenticato).
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4421
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: php / sql - dubbi e domande varie...

Messaggioda danix » sab giu 14, 2008 22:52

oops, mi sono accorto che nella tabella sopra non c'è il campo admin... l'avevo aggiunto però... :oops:
comunque, ho modificato la pagina di raccolta dati così:
Codice: Seleziona tutto
$azione=$_GET["action"];
if($azione=="login") {
  $User=$_POST["user"];
  $Pass=$_POST["pass"];
  if ($User=="") {
    reindirizza("pagina=error&eid=1");
  }
  elseif ($Pass=="") {
    reindirizza("pagina=error&eid=2");
  }
  else {
    $risultatoutente=mysql_query("SELECT ID FROM users WHERE USER='$User' AND PASS='$Pass'", $connessione);
    $risultatoadmin=mysql_query("SELECT ADMIN FROM users WHERE USER='$User' AND PASS='$Pass'", $connessione);
    if(mysql_num_rows($risultatoutente)==0) {
      reindirizza("pagina=register&user=$User");
    }
    elseif(mysql_num_rows($risultatoadmin)==0) {
      $_SESSION["utenteautorizzato"]=mysql_result($risultatoutente,0,0);
      reindirizza("pagina=home&sezione=secondaria&messaggio=$User-LOGGED-IN");
    }
    else {
      $_SESSION["adminautorizzato"]=mysql_result($risultatoadmin,0,0);
      reindirizza("pagina=home&sezione=secondaria&messaggio=$User-ADMIN-LOGGED-IN");
    }
  }
}

In questa pagina ho qualche dubbio sulla verifica del campo admin, in quella colonna della tabella ho messo solo valori binari, 1 se l'utente è admin e 0 se è un utente normale...


Poi ho modificato index.php in questo modo:
Codice: Seleziona tutto
$pagineutenti=array("upload");
$pagineadmin=array("gestione","utenti");
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
if(in_array($pagina,$pagineutenti) && !isset($_SESSION["utenteautorizzato"])) {
  header("Location: index.php?pagina=secondaria&messaggio=MUST-AUTHENTICATE!");
  exit;
}
elseif(in_array($pagina,$pagineadmin) && !isset($_SESSION["adminautorizzato"])) {
  header("Location: index.php?pagina=secondaria&messaggio=NOT-ADMIN");
  exit;
}

per il menu (che è la parte su cui ho più dubbi) ho fatto così:
Codice: Seleziona tutto
        $vocimenu=array("home","gallery","products","contacts", "gestione", "utenti", "upload");
        foreach($vocimenu as $voce) {
          if(!in_array($voce,$pagineutenti) || isset($_SESSION["utenteautorizzato"])) {
            if($pagina==$voce) echo '
              <li id="current">';
            elseif($pagina!=$voce) echo "
              <li>";
              if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
              echo $voce;
              if($pagina!=$voce) echo "</a>";
              echo "</li>";
          }
          elseif(!in_array($voce,$pagineadmin) || isset($_SESSION["adminautorizzato"])) {
            if($pagina==$voce) echo '
              <li id="current">';
            elseif($pagina!=$voce) echo "
              <li>";
              if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
              echo $voce;
              if($pagina!=$voce) echo "</a>";
              echo "</li>";
          }
        }

solo che anche senza essermi loggato il menu mi mostra tutte le pagine, ma l'accesso mi viene negato in quelle contenute nell'array pagineadmin e in quelle riservate agli utenti autenticati...

dove sto sbagliando??


Grazie dell'aiuto...

PS
per completezza questa è la tabella users:
Codice: Seleziona tutto
+----+--------+------------+-------+
| ID | USER   | PASS       | ADMIN |
+----+--------+------------+-------+
|  1 | admin  | 123321     |     1 |
|  2 | danix  | mypass     |     1 |
|  3 | poster | posterpass |     0 |
|  4 | user1  | 555888     |     0 |
|  5 | user2  | 777333     |     0 |
|  6 | dammit | danix      |     0 |
|  7 | zazza  | azazz      |     0 |
+----+--------+------------+-------+
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: php / sql - dubbi e domande varie...

Messaggioda danix » sab giu 14, 2008 23:58

ho modificato ancora la index.php...
Codice: Seleziona tutto
$pagineutenti=array("upload");
$pagineadmin=array("gestione","utenti");
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
if(in_array($pagina,$pagineutenti) && !isset($_SESSION["utenteautorizzato"]) || in_array($pagina,$pagineadmin) && !isset($_SESSION["adminautorizzato"])) {
  header("Location: index.php?pagina=secondaria&messaggio=MUST-AUTHENTICATE!");
  exit;
}

e poi:
Codice: Seleziona tutto
        $vocimenu=array("home","gallery","products","contacts", "gestione", "utenti", "upload");
        foreach($vocimenu as $voce) {
          if(!in_array($voce,$pagineutenti) || isset($_SESSION["utenteautorizzato"]) && !in_array($voce,$pagineadmin) || isset($_SESSION["adminautorizzato"])) {
            if($pagina==$voce) echo '
              <li id="current">';
            elseif($pagina!=$voce) echo "
              <li>";
              if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
              echo $voce;
              if($pagina!=$voce) echo "</a>";
              echo "</li>";
          }
        }


adesso funziona parzialmente, nel senso che non mi viene visualizzata nel menu la pagina "upload" (che è nell'array $pagineutenti), ma mi vengono ancora visualizzate le pagine "gestione" e "utenti" che si trovano nell'array $pagineadmin, non posso accedervi se non faccio il login, ma non dovrebbero proprio vedersi... cosa sto sbagliando??

Mi rimangono ancora i dubbi relativi alla pagina di raccolta dati che ho esposto nel precedente post, ma non credo che c'entrino con questo problemino...

se avete suggerimenti fatemi sapere... :D


Grazie mille
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite