Creare pagina con scelta password
Creare pagina con scelta password postato il 29/06/2012 00:54:55 nel forum programmazione, open source e hosting
Quello che vorrei creare non è una cosa semplice (almeno, per me non lo è). Vorrei creare una pagina php in cui l'unica cosa presente è la richiesta di una password. A seconda di che password inserisco mi rimanda ad una pagina. Ovvero:
- se inserisci la password XXX rimanda alla pagina A
- se inserisci la password YYY rimanda alla pagina B
- se inserisci la password ZZZ rimanda alla pagina C
e così via.
Penso che una cosa del genere possa andar bene:
if (pass==XXX){
<?php
include 'nome_cartella/fileA.php';
?>
}else{
if (pass==YYY){
<?php
include 'nome_cartella/fileB.php';
?>
}else{
if (pass==ZZZ){
<?php
include 'nome_cartella/fileC.php';
?>
}
}
(se non va bene ditemelo per favore).
Supponendo che vada bene, passiamo alla parte più complicata per me: inserire lo spazio in cui inserire la password e far sì che riconosca il codice sopra scritto e che quindi, a seconda della password messa, rimandi al fileA, al fileB, etc..
potete aiutarmi?
29/06/2012 01:41:28 e modificato da leoblacksoul il 29/06/2012 01:44:50
Il codice di kidemonas è ottimo (nota: php supporta il costrutto elseif! Attenzione allo spazio mancante tra else e if).
La sua soluzione però frammenta una funzionalità in due file diversi. Non è sbagliato, ma può risultare scomodo. è possibile inserire l'intero sistema nello stesso file, così da poter gestire tutto da un punto solo.
if(!empty($_POST['pass'])){//Questo controllo non genera Notice, al contrario di quello vecchio
switch($_POST['pass']){
case 'XXX':
include 'nome_cartella/fileA.php';
break;
case 'YYY':
include 'nome_cartella/fileB.php';
break;
case 'ZZZ':
include 'nome_cartella/fileC.php';
break;
default:
echo 'La password che hai inserito non è valida!';
}
} else {
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">
<input type="password" name="pass" />
</form>
FORM;
}
Così evitiamo che creare 3500 file, quando in realtà abbiamo solo la metà delle funzioni
29/06/2012 02:30:55 e modificato da astro991 il 29/06/2012 03:51:04
Intanto grazie ad entrambi.
Ho una domanda però: ho copiato il codice di leoblacksoul mettendolo tra i tag <?php e ?>, ma mi esce la seguente scritta:
errore di sintassi, T_STRING inaspettato, in attesa ',' or ';' in / membri / magturmmitologia / password.php on line 18
le ho provate tutte, ma mi esce sempre quell'errore...non riesco a capire in cosa consiste...ho aggiunto e tolto virgole e punti e virgole, ma niente....non riesco a capire in cosa consiste...
se copio il codice di kidemonas (quindi lo divido in due parti) non mi da problemi...quella scritta mi esce solo con quello in file unico...
29/06/2012 08:42:12
Si funziona grazie :-D
Che capita non ci son dubbi ;-)
Nel provare a correggere, io avevo messo solo il ; senza il ' XD
30/06/2012 17:28:15
ops. ho mischiato sintassi HEREDOC con la stringa a apici singoli XD
Se per la stanza1 la pass fosse "one" avrei due modalità per entrare nella pagina.
La prima e scrivere "one" nell'apposito form, la seconda è scrivere direttamente il link completo della stanza1 ed andarci direttamente.
Consiglio quindi di implementare dei controlli password anche sulle singole pagine delle stanze
Il nostro script gestisce solo la porta d'ingresso....non ci è stato detto niente sulle pagine che vengono incluse. Ovviamente ci si aspetta che siano sicure.
Io non implementerei il controllo di nuovo all'interno della pagina (dispersione del codice, duplicazione, etc), io impedirei completamente l'accesso web a quei file attraverso una regola htaccess apposita. Perchè non ci si aspetta comunque che la gente possa accedere a quei file senza passare attraverso la nostra porta d'accesso (che usando il filesystem non è toccato dai settaggi di htaccess)
30/06/2012 20:00:50
Ho notato una cosa...se la pagina che includo contiene a sua volta una scelta di password, questa non mi compare nella pagina...cioè, inserisco la password e la pagina che mi compare è vuota, non mi dà la possibilità di includere un'altra pagina che a sua volta contiene la scelta password...perché? Non posso far sì che la scelta password mi rimandi ad un'altra pagina con la scelta password? Non capisco perché non me le fa includere...
Riguardo alla regola regola htaccess...eh? Non l'ho mai fatto, non so nemmeno come funzioni l'htaccess...
01/07/2012 16:22:10
"impedire l'accesso ai file con htaccess" cerca su google ci sono moltissime guide dettagliate.
Se stai usando variabili con gli stessi nomi nelle pagine interne si saranno dei problemi con eventuali scelte password nelle pagine incluse. Devi assicurarti che ogni pagina usi variabili con nomi diversi e allo stesso tempo devi assicurarti che tutte le password inserite nelle pagine precedenti siano automaticamente reinserite. Altrimenti ti ritrovi con il problema che inserisci la pagina password, poi inserisci la seconda password ma la prima pagina ti blocca perchè non c'è più la prima password. Questo problema è dettato dalla staticità del tuo codice...la funzionalità è stata semplicemente progettata male.
01/07/2012 20:55:45
Ok, vedo se risco a risolvere il problema..altrimenti mi invento un altro modo...
Grazie
02/07/2012 20:54:05
Niente, ho usato tutte le mie conoscenze ma niente...nemmeno con un libro accanto ci sono riuscito...l'unica soluzione che è trovato è quella di creare, invece di un INCLUDE, un ECHO con un link alla pagina...ma questa soluzione non mi piace molto, perché a quel punto per accedere alla pagina basta scrivere
www.nomesito.dominio/pagina.php
e si accede alla pagina senza inserire la password...
Qualcuno mi potrebbe dire come sistemare il codice affinché possa includere pagine che a loro volta hanno la scelta password? Mi serve perché le pagine da includerci che hanno a loro volta la scelta password sono 5...per favore, non riesco a capire cosa modificare...
02/07/2012 23:52:33
in teoria potrebbe non occorrerti mettere un controllo sulla pass anche sulle pagine interne cosa che è scopmoda perchè se cambi la pass su una pagina ti tocca cambiare anche il codice sulla pagina interna.
Semplicemente ti basterebbe mettere un controllo che la pagine non venga eseguita se non inclusa.
All'inizio di ogni pagina interna puoi mettere un codice tipo questo:
if (strtolower(realpath(__FILE__)) == strtolower(realpath($_SERVER['SCRIPT_FILENAME']))) {
exit('la pagina non è stata inclusa');
}
__FILE__ è una delle costanti predefinite di php. Contiene il path completo del file in cui è contenuta.
Anche se il file dovesse essere incluso ritornerà sempre il nome del file i cui si trova.
fonte: http://www.php.net/manual/en/language.constants.predefined.php ↗
$_SERVER['SCRIPT_FILENAME'] è la variabile globale che contiene il path completo del file in esecuzione se il file è incluso in un altro file restituisce il path del fale che lo include.
fonte: http://www.php.net/manual/en/reserved.variables.server.php ↗
realpath() è una funzione che aiuta la risoluzione dei link.
Fonte: http://au.php.net/manual/en/function.realpath.php ↗
In questo modo dovresti essere sicuro che le pagine che vuoi eseguite in quell'include siano eseguite solo se sono state incluse e lo script si femri se non lo sono state
03/07/2012 00:13:37
astro, il tuo approccio al problema è errato. Il fatto stesso che vuoi creare delle pagine fatte in quel modo è errato.
Io cercherei di definire meglio cosa vuoi realmente implementare, magari ti possiamo suggerire qualcosa di meglio di un labirinto di password. Se proprio deve rimanere così, io farei diventare tutto più astratto portando un po' di parti sul database e usando i dati di sessione per ricordarsi fino a che livello di profondità si è arrivati nei livelli di password
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Wuthering Waves ↗
Raja Dunia ↗
RAID Shadow Legends ↗
CRSED: F.O.A.D. ↗
Enlisted ↗
Exclusive Villa GdR ↗
Tibia ↗
Project Entropy ↗
World of Warship ↗
Sea of Conquest ↗