Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    ciclo che non riempie i campi

    Ragazzi c'è qualcosa che mi sfugge

    Per il controllo di alcuni campi, parecchi campi, uso questo sistema:
    codice:
        $errore = 0;
        $campo_nome = array('username','password','rip-password','nome',
          'cognome','indirizzo','citta','cap',
          'email','cf','telefono','tos','privacy');
        for ($index=0; $index <= count(campo_nome); $index++)
             if ($_POST['$campo_nome[$index]'] == "") {$errore = 1; break;}
    in pratica passando i valori con POST essi vengono iterati uno per volta secondo il nome del campo (è lo stesso del form ovviamente), se uno di questi campi è vuoto il campo $errore viene messo a 1 e il ciclo si ferma.
    Quindi subito sotto c'è il classico controllo: se $errore != 0 allora fa i questo.

    Ora i nomi dei campi sono giusti, i campi li riempio io quindi so che sono pieni, e il programma va immediatamente a mettere &errore = 1. E lo fa subito dal primo campo.
    Mentre se i campi sono vuoti, non lo fa. Cioè si comporta al contrario di come dovrebbe.

    E non capisco perché o meglio dove sia l'errore

  2. #2
    Che c'entra $_POST con quello che hai scritto prima? Cioe' che centra con $campo_nome.

    Stai confrontando le classiche patate con le cipolle...


    A parte poi la considerazione che se vuoi risolvere le variabili devi usare i doppi apici.... eventualmente potresti scorrere $_POST con un foreach.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    [supersaibal]Originariamente inviato da piero.mac
    Che c'entra $_POST con quello che hai scritto prima? Cioe' che centra con $campo_nome.

    Stai confrontando le classiche patate con le cipolle...
    No.
    mettiamo un form più semplice ok?
    codice:
    <form method='post' action='..'>
    <input type='text' name='nome' value='' />
    <input type='submit' name='invio' value='invia' />
    </form>
    
    posso iterarlo in due modi:
    classico.
    if ($_POST['nome'] == "") echo 'errore';
    
    oppure:
    $campo = array('nome');
    if ($_POST[$campo[0]] == "" echo 'errore';
    Ovvio questo è un caso semplice che non implica la costruzione di un array complesso.
    L'array si usa quando i campi sono molti, così si evita di scrivere una miriade di costrutti IF.

    A parte poi la considerazione che se vuoi risolvere le variabili devi usare i doppi apici.... eventualmente potresti scorrere $_POST con un foreach. [/supersaibal]
    Sulla questione dei doppi apici hai ragione, infatti ti avevo detto che c'era qualcosa che mi sfuggiva. e infatti funziona

    La questione del foreach: perfetto ma fa la stessa cosa quindi o uso un metodo o l'altro.

  4. #4
    il foreach e' piu' performante e sopratutto ti permette di non avere campi obbligati. e' piu' versatile in altre parole.

    Ho rivisto lo script del primo post sul mio pc. Dovresti abilitare gli allarmi ed i notice quando sviluppi o fai debug.....

    Non hai messo il $ alla variabile in count. Cosi' funzionerebbe:
    codice:
        for ($index = 0; $index <= count($campo_nome); $index++ )  {
             if ($_POST[$campo_nome["$index"]] == "") {
             $errore = 1;
             break;
             }
        }
    ma il foreach e' meglio....
    codice:
    foreach($_POST as $key => $value)  {
    if($value == '') {
      echo "Pippolo metti il dato in $key";
      exit;
      }
    }

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Il $ in count è stato un errore di battitura, infatti nello script originale non c'era.

    Vero sugli allarmi, brutta abitudine

    Sulle performance non so, mi dai dei tempi di esecuzione, così tanto per vedere?

  6. #6
    [supersaibal]Originariamente inviato da Marcolino's
    Il $ in count è stato un errore di battitura, infatti nello script originale non c'era.

    Vero sugli allarmi, brutta abitudine

    Sulle performance non so, mi dai dei tempi di esecuzione, così tanto per vedere? [/supersaibal]
    si tratta pur sempre di millisec. ma piu' del tempo sono l'impiego di risorse. Intanto devi definire l'array e gia' questo ti da portabilita' nulla allo script. Poi il ciclo for che e' pesantino di per se, la funz. count, la risoluzione della variabile...

    Invece se ti strutturi il controllo con foreach in una funzione, questa la potrai utilizzare quasi ovunque semplicemente richiamandola dove ti serve. si tratta solo di ottimizzazione. Poi che vuoi, ognuno ha lo stile nel concepire le cose che rispecchiano il proprio modo di ragionare.... personalmente sono un semplice e tendo a semplificare tutto...

    esiste anche il controllo dei campi lato client con jscript, ma sei condizionato dall'abilitazione da parte del browser.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.