Dubbio stilistico su implementazione pagina php con SWITCH annidati

Salve a tutti e buona sera, premetto che sono un principiante di PHP e quindi mi accingo a farvi una domanda a riguardo di una implementazione che vorrei sperimentare: Vi posto un abbozzo di codice che ho buttato giù a grandi linee (sbagliato sicuro ma mi interessa più che altro farvi capire il concetto)

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 "<p><strong>Aggiunta Utente:</strong></p><br>";
         echo"<form  method='POST' action='index.php?s=$idsessattiva'>";
         echo"Nome Utente: <input type ='text' name='usname' value=''><BR>";
         echo"Password: <input type ='text' name='uspass' value=''><BR>";
         echo"Email: <input type ='text' name='usemail' value=''><BR>";
         echo"Amministratore ? <input name='usisadmin' type='radio' value='yes'> SI. <input name='usisadmin' type='radio' value='no'> NO.<BR>";
                 // 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 "<p><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 "<p><strong>Menu Selezione:</strong></p><br>";
          echo"<form  method='POST' action='index.php?s=$idsessattiva'>";
            echo "<input name='menu' type='radio' value='UNO'> AGGIUNGI UTENTE SITO.<BR>";
            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 "<p><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 "<p><input type='submit' name='logoutbutton' value='Logout'></p></form>";
        
        break;
     }
   }
   }else {
     echo "Non hai eseguito la procedura di login correttamente !<BR>";
     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;
   }
?>

Come vedete questa è una pagina chiamata index.php e l'obbiettivo è quello di visualizzare un menù con varie scelte possibili come da CASE DEFAULT, se ora però mettiamo che vado nel CASE UNO e compilo il form, però sbagliando qualcosa, ad esempio il nome utente che risulta già presente in un mio database, nel momento in cui l'utente preme il SUBMIT e la pagina mi viene ricaricata vorrei che l'utente si ritrovi ancora nello steso menù del case UNO , e quindi non visualizzando il case DEFAULT, e magari con un messaggio sul tipo di errore. E' possibile fare una cosa di queste senza impiegare un passaggio di variabileda catturare con il $_GET ??? Grazie a tutti, attendo i vostri consigli !!!!

inviato 9 anni fa
Plaguebreath
X 0 X

Visto che il titolo della discussione parla di stile allora mi permetto di indirizzare il discorso su un altro problema, solo apparentemente slegato. Realizzare script che mischiano codice PHP e HTML è sbagliato. Sono difficili da manutenere e da debuggare. Trovare gli errori e correggerli diventa impossibile quando la complessità aumenta.

Quindi per prima cosa ti consiglio di realizzare uno script PHP con la logica del programma e diverse pagine HTML con i contenuti che vorresti mostrare agli utenti nelle diverse occasioni. Attraverso degli include() carichi di volta in volta l'HTML che vuoi mostrare.

Se poi non stai usando realmente un form per l'immissione dei dati allora evita il POST e usa dei link per selezionare le varie funzionalità del sito.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie per la risposta, beh io ho messo stile, perchè di stile di programmazione si tratta suppongo, poi per il discorso di mischiare html e php ho chiesto apposta inquanto non sono assolutamente bravo nel php e su internet non si trovano tutte le informazioni così facilmente, ci sono molti esempi ma fino adesso non ne ho trovati incentrati sulla mia problematica. Tu mi parli di include, ma quindi dovrei creare delle pagine separate e poi richiamarle di volta in volta ? ad esempio uno.php due.php default.php ??? Chiedo lumi  ::)

PS. vorrei appunto fare nel CASE UNO un form dove l'utente inserisce nome utente password e mail :)

risposto 9 anni fa
Plaguebreath
modificato 9 anni fa
X 0 X

Si, ma è importante che ci siano pagine con il 90% di HTML e 10% di PHP (i template) e pagine con le percentuali invertite (i controller).

I controller dovrebbero includere i template. I template possono includere altri template (intestazione e piè di pagina). I template non dovrebbero includere i controller.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Scusami ma mi sono perso  :D

Insomma ho fatto uno schifo :( Hehehe comunque ammettendo che questo schifo sia mezzo accettabile, come potri aggirare il problema evidenziato sopra ?? Grazie

risposto 9 anni fa
Plaguebreath
X 0 X

Risolvere il problema iniziale con la struttura che proponi non è affatto banale perché vuoi gestire 2 POST distinti con un unico switch. Ammettendo che ci si riesca verrebbe fuori qualcosa di orribile...

Devi dividere lo script almeno in 2 file, quello che si occupa di gestire le diverse opzioni attivabili da menù e quello che gestisce l'inserimento dell'utente.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie mi sa che farò tesoro del tuo consiglio, una ultima domanda, io volevo evitare di fare tanti piccoli file ma da quello che mi dici è la cosa migliore da realizzare vero ? Dove posso trovare qualcosa di diretto sull'implementazione dell'HTML all'interno delle pagine PHP dove sono molto carente ? sopratutto mi interessa il discorso che mi hai citato degli include () grazie mille sei stato molto chiaro.

risposto 9 anni fa
Plaguebreath
X 0 X

COnfermo, devi dividere il sito in diversi file, in modo da separare sia le diverse funzionalità erogate sia l'HTML dal PHP.

Non so indicarti nessuna risorsa per documentarti poiché le uniche fonti che utilizzano esplicitamente questo approccio sono legate a sistemi molto complessi e non credo sia il caso partire da lì.

Il mi consiglio è quello di fare dei semplici test, del tipo:

index.php

<?php
$variabile = 'prova';
include tpl1.php
?>

tpl1.php

<h1>Test</h1>
<p>Questa è una <?php echo $variabile?></p>

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie mille, credo di aver capito e farò tesoro sei stato gentilissimo, a presto !

risposto 9 anni fa
Plaguebreath
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda