costanti e accessi limitati
costanti e accessi limitati postato il 29/04/2014 21:10:03 nel forum programmazione, open source e hosting
Salve a tutti.
Nel creare il mio sito ho preso ad esempio, per fare questa cosa, il gdrcd poiché non sapevo come fare. Ho creato un file constant.inc.php in cui ci sono, appunti, delle costanti come i permessi del gdrcd (USER, ADMIN,...) richiamato nel file header.inc.php. Funziona tutto perfettamente tranne per questa cosa che vi vado a spiegare. Prendiamo ad esempio il gdrcd (tanto ho fatto la stessa identica cosa io). Nel file config.inc c'è il seguente codice per creare la pagina di gestione:
$PARAMETERS['administration']['forums']['text']='Bacheche';
$PARAMETERS['administration']['forums']['url']='main.php?page=gestione_bacheche';
$PARAMETERS['administration']['forums']['access_level']=SUPERUSER
e nel file gestione.inc questo codice:
[ciclo foreach]...
if((empty($link_menu['text'])===FALSE)&&(isset($link_menu['access_level'])===TRUE)&&($link_menu['access_level']<=$_SESSION['permessi'])){
...
e nel gdrcd funziona. copiando lo stesso codice nel mio sito, invece, non funziona e non capisco perché. se vado a scrivere "echo $link_menu['access_level'];" invece di "4" (il corrispettivo del gdrcd per il SUPERUSER) mi appare la scritta "SUPERUSER". qualcuno sa dirmi il perché?
Pagine → 1
29/04/2014 21:46:33
no quello c'è. lo utilizzo in altre pagine e funziona tutto. solamente in questa pagina non mi funziona e non capisco perché.
30/04/2014 02:37:07
La prima cosa che mi viene in mente è questa
visto che in quell'if usi la variabile $link_menu['access_level'] che dovrebbe essere associata al livello die permessi. non è che quando hai assegnato il valore della variabile non hai fatto qualcosa del tipo:
$link_menu['access_level'] = 'SUPERUSER';
invece di
$link_menu['access_level'] = SUPERUSER;
se il codice non è torppo lungo potresti comunque postare la pagina intera che magari si vede più facilmente se c'è qualche errore.
30/04/2014 13:25:28
Un'altra possibilità è che la veda come stringa perchè magari per una disattenzione nell'ordine di inclusione dei file alla variabile si assegni il valore di superuser prima che questo venge definito.
nel senso mi spiego:
se si ha un codice del tipo:
<?php
require 'config.inc.php';
require 'includes/constant_values.inc.php';
$link_menu['access_level'] = $PARAMETERS['administration']['forums']['access_level'];
echo 'access_level: '.$link_menu['access_level'];
?>
l'output sarà:
access_level: SUPERUSER
questo perchè venendo richiamato prima il config.inc.php e poi il constant_values.inc.php la costante non è ancora definita e quindi php trasforma l'ipotetica costante in stringa non trovandola definita.
mentre al contrario:
<?php
require 'includes/constant_values.inc.php';
require 'config.inc.php';
$link_menu['access_level'] = $PARAMETERS['administration']['forums']['access_level'];
echo 'access_level: '.$link_menu['access_level'];
?>
restituirà correttamente:
access_level: 4
Mi interessava veder eil codice per capire appunto i passaggi fatti nella definizione delle costanti assegnaizone variabili ecc, perchè secondo me si tratta di un semplice errore di ordine di inclusione o qualcosa di analogo che fa assegnare alla variabile la costante prima di definirla.
02/05/2014 12:23:30
Ricopio qui il codice interessato come da voi richiesto:
- file config
$PARAMETERS['administration']['maps']['text']='Mappe';
$PARAMETERS['administration']['maps']['url']='main.php?page=gestione_mappe';
$PARAMETERS['administration']['maps']['access_level']=SUPERUSER;
- file constant (richiamato dall'header)
define('SUPERUSER', 1);
- file gestione
foreach($PARAMETERS['administration'] as $link_menu){
if (empty($link_menu['url'])===FALSE){
if((empty($link_menu['text'])===FALSE)&&(isset($link_menu['access_level'])===TRUE)&&($link_menu['access_level']<=$_SESSION['permessi'])){
echo '<div class="link_gst"><a href="'.$link_menu['url'].'">'.$link_menu['text'].'</a></div>';
}
}
}
il codice funziona solo se tolgo la parte che limita i permessi. siccome un problema delle costanti non può essere poiché le uso in altre pagine senza problemi, il $_SESSION['permessi'] idem, non capisco dove sia l'errore, visto che il medesimo codice nel gdrcd funziona.
02/05/2014 22:22:15
Ho risolto il problema toccando il file header.inc. ho fatto questa modifica:
prima avevo questo codice:
require('config.inc.php'); //richiamo il file di configurazione
require('includes/constant.inc.php'); //includo le costanti
ora è così:
require('includes/constant.inc.php'); //includo le costanti
require('config.inc.php'); //richiamo il file di configurazione
ossia ho spostato il richiamo delle costanti prima del richiamo al config.
02/05/2014 23:18:06
Era il problema che avevo ipotizzato sopra. Venendo richiamata prima di essere definita la costante veniva interpretata come stringa dal php anzichè come costante.
03/05/2014 01:50:26
Si infatti è come avevi ipotizzato te. E' stata la tua risposta, una volta averla riletta con più attenzione, a farmi venire il dubbio.
Ho postato la soluzione perché se qualcun altro dovesse commettere la mia stessa disattenzione almeno sa come fare.
Grazie a tutti dell'aiuto.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
New Orleans ↗
Sea of Conquest ↗
Tibia ↗
World of Tanks ↗
World of Warship ↗
Raja Dunia ↗
AlterEgo ↗
Hero Wars ↗