Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Dubbio stilistico su implementazione pagina php con SWITCH annidati

    Salve a tutti, premetto che sono un principiante e sto muovendo i primi passi in questo meraviglioso mondo del PHP. Sto facendo un po' di esperimenti di vario tipo, e sono giunto a un dubbio anche perchè le mie capacità sono piuttosto limitate. Vi chiedo questo:

    Ho una pagina chiamata index.php
    ora so che mi sculaccerete ma dopo vi spiegherò perchè ho fatto così. in questa pagina ho un controllo di sessione prima di tutto per evidenziare se l'utente è loggato correttamente oppure no. Il parametro viene passato tramite GET e quindi la struttura è più o meno questa. (la scrivo male senza sintassi corretta)

    if $_GET[s]
    SWITCH ($_POST[mainmenu]){
    CASE uno:

    CASE due:

    CASE tre:

    DEFAULT:
    // visualizzo un form di selezione, ogni voce la precedo da un echo"" invece di usare HTML
    echo"<form method='POST' action='index.php?s=$idsessattiva'>";
    echo "<input name='menuadmin' type='radio' value='uno'> VOCE uno.
    ";
    echo "<input name='menuadmin' type='radio' value='due'> VOCE due.
    ";
    echo "<input name='menuadmin' type='radio' value='tre'> VOCE tre.
    ";
    echo "

    <input type='submit' name='submit' value='Seleziona'></p></form>";
    }

    Ora io però vorrei fare questo. Una volta ad esempio selezionata la (VOCE uno) vorrei fare in modo che l'utente compilasse un form, se però lo compila sbagliato o ad esempio con dei valori vuoti e quindi cliccando sul tasto INVIA e quindi ricaricando ancora la stessa pagina INDEX.php vorrei che non apparisse il primo menù del CASE, DEFAULT. Invece vorrei che l'utente fosse proiettato direttamente nel CASE che aveva selezionato prima, in questo caso l'uno. Come posso fare questo senza passare ad esempio a INDEX un altra variabile da catturare con GET ???
    Grazie spero di essere stato chiaro, a presto
    Patrizio

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    cominciamo dall'inizio, tu passi un valore in get per vedere se l'utente è in sessione, ma cosa succede se io forzo l'url in modo da farti credere che io sia in sessione?

    quale valore passi ?

    Se passi l'id di sessione ok, perchè difficile da recuperare se non lo conosci, ma se passi un semplice index facile da duplicare ci sono dei seri problemi di sicurezza.

    Quando parli di sessioni parli delle sessioni vere e proprie o solo di una variabile che imposti tu?

    ciao

  3. #3
    Passo un id di sessione, nessun valore troppo facile da rilevare e estremamente difficile da forzare (o si devono propio imbastardire per farlo) comunque la parte della sessione può essere anche tralasciata, la mia domanda era più che altro mirata al discorso dei multi annidamenti degli switch, è li che sono un po' perplesso

  4. #4
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    le sessioni non considerano get o post passano da pagina a pagina purchè sia impostasto sempre session start()

    ora per far si che il tuo utente se prima era nel case uno non devi far altro che in ogni case settare una variabile di sessione

    ad esempio(scrivo male pure io il codice)
    Codice PHP:
    switch($variabile)
    case 
    "uno":
      
    $_Session[controllo]=$variabile
      
    break;
    .....

    //che in questo caso vale uno....

    //una volta ricaricato la pagina fai cosi

    if (isset($_session[controllo])){
       
    $variabile=$_session[controllo]
    }
    else{
     
    $variabile=il parametro iniziale;

    questo sempre se alle 23.04 ho capito quello che ti serviva.....

    ps. la prossima volta e per script piu complessi ti consiglio di fare copia incolla e di metterlo nel tag php che aiuto molto a chi ti vuole rispondere ciao
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  5. #5
    Ciao

    Non so se ho capito bene.
    Tu vorresti che l'utente che compila in maniera errato il form, quando preme il pulsante gli venisse ricaricato lo stesso form?

    Se è cosi, fai un controllo sui campi del form e se il risultato è falso gli ricarichi il form, altrimenti se vero proseghi.

    ciao
    --

    __ [ K3iji ] __

  6. #6
    Grazie a tutti per l'aiuto prima di tutto, allora la variabile di sessione che di volta in volta passo alla pagina index se l'utente risulta loggato con user e password giusta è semplicemente questa variabile
    $s = md5(uniqid(microtime()));

    quindi di volta in volta passo all' index.php?s=$s

    e questo è ok ma il mio problema non è quello. Come avete letto nello pseudo codice non ho messo nessuna codifica html ma ho messo degli schifosi echo per far venire fuori i vari menù che si trovano nei vari CASE dello SWITCH primario. La mia domanda è, se nel CASE 1 metto un form ad esempio per permettere la modifica del nome utente, la password e l'email di un utente. Perfetto, l'utente lo compila ma magari lo compila sbagliato tipo manca password o email, a quel punto quando preme SUBMIT vorrei che ricaricando la pagina INDEX.PHP l'utente non visualizzi ancora il menù specificato nel case DEFAULT ma gli venga proposto il form di prima con ad esempio l'avviso che il post è stato compilato male. Scusatemi tutti se mi spiego male ma come detto sono alle prime armi e desidero capirci di più sul PHP e quando ho dei dubbi mi blocco di brutto E scusatemi anche per l'ora tarda ma per me questa è l'ora di ricreazione

  7. #7
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    tranquilla non qui ci facciammo pagare solo 30 euro a risposta....
    le sessioni come dici tu non sono nelle tue pagine tu passi solo un paramatero tramite get
    io ti ho consigliato come fare per far si che se l'utentte si trova nel case uno allroa ci resta...ribadisco posta tutto il codice che è meglio
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  8. #8
    hem sono masculo Comunque fai partire il tassametro, io il codice non lo ho scritto ancora lo ho solo abbozzato di qua e di la, volevo solo capirne il meccanismo, comunque ecco un pezzo di codice (ripeto scritto male senza dettagli) questo sarebbe l'index.
    poi c'è un file che contiene alcune funzioni per la gestione database e uno che contiene funzioni tra cui quelal checksession() che controlla lo scadere della sessione di un utente comparandola con un dato inserito in una tabella di un database (la sessione scade dopo 10 minuti di inattività)

    Codice PHP:

    require_once ("common_db.inc.php");
    require_once (
    "funzioni.inc.php");

    // effettuo la prima connessione al database
    $link_id db_connect("prova");

    // controllo se sono loggato correttamente o meno tramine la funzione CheckSession
    // e se la mia sessione è ancora attiva.

    if (CheckSession()){
      
    // recupero la sessione corrente dal parametro in imput
      
    $idsessattiva=$_GET['s'];
      
    // se è stato passato il valore logout procedo alla pulizia della sessione e all ritorno all indice
      
    if ($_POST['logout']==true){
        echo 
    "Logout dal sito eseguito con successo, verrai reindirizzato alla pagina di login entro pochi secondi.";
        
    // pulisco il database dalla sessione corrente
        
    $query "DELETE FROM sessioni WHERE id_sess='{$idsessattiva}'"
        if (!
    mysql_query($query)) die (sql_error()); 
        echo 
    "<meta http-equiv=\"refresh\" content=\"4;url=login.php\">";
        exit;
      }else{
      
    // faccio apparire in caso un messaggio di errore o altro
      
    if (isset($_GET['msg'])){
        echo 
    $_GET['msg']; 
      }
     
        switch (
    $_POST['menu']){
            
            case 
    "UNO":
                     echo 
    "

    [b]Aggiunta Utente:[/b]</p>
    "
    ;
             echo
    "<form  method='POST' action='index.php?s=$idsessattiva'>";
             echo
    "Nome Utente: <input type ='text' name='usname' value=''>
    "
    ;
             echo
    "Password: <input type ='text' name='uspass' value=''>
    "
    ;
             echo
    "Email: <input type ='text' name='usemail' value=''>
    "
    ;
             echo
    "Amministratore ? <input name='usisadmin' type='radio' value='yes'> SI. <input name='usisadmin' type='radio' value='no'> NO.
    "
    ;
                     
    // se l'utente preme Cancella ritorna all'Index e al menù principale
                     // altrimenti è qui che vorrei fare il controllo sui valori passati e in caso ritornare
                     // ancora qui.
                     
    echo "

    <input type='submit' name='submit' value='Seleziona'><input type='button' value='Cancella' onclick=window.location.href='index.php?s=
    $idsessattiva'></p></form>";
             break;
             
            case 
    "DUE":
            
    bla bla bla
                    
    exit;
            break;
             
            case 
    "TRE":
            
    BLA BLA BLA
                    
    exit;
            break;
        
            default:
              echo 
    "

    [b]Menu Selezione:[/b]</p>
    "
    ;
              echo
    "<form  method='POST' action='index.php?s=$idsessattiva'>";
                echo 
    "<input name='menu' type='radio' value='UNO'> AGGIUNGI UTENTE SITO.
    "
    ;
                echo 
    "<input name='menu' type='radio' value='DUE'> bla bla.";
          
                echo 
    "<input name='menu' type='radio' value='TRE'> BLA BLA.";
          
               echo 
    "<input type='hidden' name='posted' value='true'>";
              echo 
    "

    <input type='submit' name='submit' value='Seleziona'></p></form>"
    ;
      
            
        echo
    "<form  method='POST' action='index.php?s=$idsessattiva'>";
            echo 
    "<input type='hidden' name='logout' value='true'>";
            echo 
    "

    <input type='submit' name='logoutbutton' value='Logout'></p></form>"
    ;
            
            break;
         }
       }
       }else {
         echo 
    "Non hai eseguito la procedura di login correttamente !
    "
    ;
         echo 
    "Chiudi la pagina e riprova più tardi o verrai rediretto alla pagina di login entro pochi secondi.";
         echo 
    "<meta http-equiv=\"refresh\" content=\"4;url=login.php\">";
         exit;
       }
    ?> 

    La notazione fa schifo ma spero che si sia capito qualcosa, ah per la cronaca anche nei CASE Due e TRE potrei mettere dei form simili quindi come faccio a fare questi tipi di controlli annidati ? Grazie a tutti :master:

  9. #9
    La notte ha portato consiglio a qualcuno di voi ? Mi sa che mi tocca passare una variabile da catturare con il $_GET per fare quello che mi interessa a me, voi che ne dite ? E' la soluzione più rapida immagino.

  10. #10
    Ciao

    Se usi dei form in tutti i case potresti usare una var $_POST, nel form aggiungi un campo hide e ci metti la var relativa al case in cui ti trovi.

    Non so se ti sia utile, ma è un' idea.
    Usando un campo nascosto nessuno può forzare il case.

    Ciao
    --

    __ [ K3iji ] __

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.