Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    utilizzo "return" e concatenazione cicli if

    Ciao a tutti;
    Premesso che pare funzionare allo stesso modo in entrambe le soluzioni, mi chiedevo quale fosse la maniera più corretta di controllare delle condizioni nei cicli ed eventualmente reindirizzare...
    Faccio un esempio banale in pseudocodice:

    Codice PHP:
    if [$nomeutente != corretto]  {
        echo 
    "nome utente errato";
        
    header("Refresh -> homepage");
        return;
    }

    if [
    $password != corretta]  {
        echo 
    "password errata";
        
    header("Refresh -> homepage");
        return;
    }
    ...
    altri if...

    [
    corpo della pagina
    Oppure

    Codice PHP:

    if [$nomeutente  corretto]  {
         if [
    $password corretta]   {
               ...
    altri if...
                     [
    corpo della pagina]
         }else{
               echo 
    "nome utente errato";
               
    header("Refresh -> homepage");
         }
    }else{
         echo 
    "password errata";
        
    header("Refresh -> homepage");


    C'è un motivo per cui l'uno o l'altro metodo è d evitare?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Il return serve in una funzione di solito con un valore.

    Il codice che hai postato non puo' funzionare anche se scritto in pseudo codice in quanto non devono esserci "scritte" (echo ad esempio) prima del comando header.

    Per me c'è una terza via; cioè come il tuo primo esempio ma che funziona come il secondo. Lo scopo è di poter aggiungere delle condizioni senza dover modificare il codice già scritto e "fermarsi" al primo errore riscontrato.
    Di più, ti consiglio di fattorizzare quanto possibile il codice. Nel tuo esempio se tu dovessi cambiare il re-indirizzamento dello header dovresti fare tante modifiche quante condizioni.

    Codice PHP:
    $errorMessage '';
    if [
    $nomeutente != corretto]  {
       
    $errorMessage "utente errato";
    }

    if (
    $errorMessage == "") {
     if [
    $password != corretta]  {
        
    $errorMessage =  "password errata";
     } 
    }

    if (
    $errorMessage == "") {
     if [
    $email != corretta]  {
        
    $errorMessage =  "email errata";
     } 
    }

    if (
    $errorMessage != "") {
      
    header("Refresh -> homepage + $errorMessage ");

    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao e grazie per la risposta prima di tutto...
    La 3a via che hai indicato mi sembra effettivamente la più corretta e pulita...
    Però mi viene da chiederti, se avessi ad esempio 100 o più condizioni da verificare prima di poter proseguire, se già la prima non risulta verificata, a me non importa verificare le restanti 99... c'è un modo corretto in quel caso di spezzare il flusso della pagina e reindirizzare?
    Per quanto riguarda il discorso dell'echo prima dell'header, se ne era parlato in un'altra discussione qualche tempo fa e ricordo che qualcuno confermò che funziona anche in questo modo perché dipende da una configurazione nel php.ini se non erro... tanto è vero che i moduli tipo accesso.php li ho sempre scritti in questo modo e funzionano al 100% (magari sbagliando concettualmente però!)
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Volendo puoi fare cosi (per certi goto is evil).

    Codice PHP:
    $errorMessage '';
    if [
    $nomeutente != corretto]  {
       
    $errorMessage "utente errato";
       goto 
    fine_controllo;
    }

    if [
    $password != corretta]  {
        
    $errorMessage =  "password errata";
        goto 
    fine_controllo;
    }

    if [
    $email != corretta]  {
        
    $errorMessage =  "email errata";
        goto 
    fine_controllo;



    fine_controllo:
    if (
    $errorMessage != "") {
      
    header("Refresh -> homepage + $errorMessage ");

    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Premesso che penso sia molto una questione di stile di ciascuno (come dire 'de gustibus') comunque volendo 'risparmiare' righe di codice e avendo centinaia di controlli da fare io opterei per una soluzione di questo tipo:

    Codice PHP:
    $arrControllare = array("utente"   => array($_POST['user'],'admin'),"password" => array($_POST['pass'],'abcdf') );

    function 
    controlla($arrControllare){
        foreach(
    $arrControllare AS $campo => $arrCoppieValori){
            if(
    $arrCoppieValori[0]!=$arrCoppieValori[1]){
                
    header("Refresh -> homepage + $campo errato");
            }
        }
    }

    controlla($arrControllare); 
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Perfetto, grazie ad entrambi!
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

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.