Visualizzazione risultati 1 fino 9 di 9

Discussione: Escludere variabile da un foreach?

  1. #1
    Guest

    Predefinito Escludere variabile da un foreach?

    Mi avevano fornito questi codici per fare un controllo dei campi e delle variabili relative ( $_POST ).. però dovrei escluderne una che non è obbligatoria.. come faccio? Questo è il codice:

    Codice PHP:
    <?

    $validato
    = FALSE;

    if ( ! empty(
    $_POST))
    {
    foreach (
    $_POST as $chiave=>$valore)
    {

    if (
    $valore == '')
    {
    $validato = FALSE;
    break;
    }
    else
    {
    $validato = TRUE;
    }
    }
    }

    if (
    $validato)
    {
    }
    else
    {
    header("Location: index.php?errore=1");

    }

    ?>

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non c'è una regola predefinita, anche se di solito si cerca di identificare l'elemento per la sua chiave. Nel tuo caso, puoi inserire questo codice all'inizio del ciclo foreach:
    Codice PHP:
    if ($chiave = 'optional')
    continue;
    inserendo al posto di 'optional' la chiave che non deve essere esaminata.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Quindi così verrebbe:

    Codice PHP:
    <?

    $validato
    = FALSE;

    if ( ! empty(
    $_POST))
    {

    if (
    $chiave = 'optional')
    continue;

    foreach (
    $_POST as $chiave=>$valore)
    {

    if (
    $valore == '')
    {
    $validato = FALSE;
    break;
    }
    else
    {
    $validato = TRUE;
    }
    }
    }

    if (
    $validato)
    {
    }
    else
    {
    header("Location: index.php?errore=1");

    }

    ?>

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non proprio... l'aggiunta devi inserirla subito dopo l'inizio del ciclo foreach, non prima...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    Codice PHP:
    <?

    $validato
    = FALSE;

    if ( ! empty(
    $_POST))
    {



    foreach (
    $_POST as $chiave=>$valore)
    {
    if (
    $chiave = 'optional')
    continue;

    if (
    $valore == '')
    {
    $validato = FALSE;
    break;
    }
    else
    {
    $validato = TRUE;
    }
    }
    }

    if (
    $validato)
    {
    }
    else
    {
    header("Location: index.php?errore=1");

    }

    ?>
    Così? Se non è corretto neanche così puoi mettere tu la sintassi corretta? :S

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Fai un po' di chiarezza, quel codice è troppo disordinato:
    Codice PHP:
    <?php
    $validato
    = false;

    if(
    count($_POST)) {
    foreach(
    $_POST as $chiave => $valore) {
    if(
    $chiave == 'optional')
    continue;
    $validato = !empty($valore);
    }

    if(!
    $validato) {
    header('Location: index.php?errore=1');
    }
    }
    ?>
    Comunque, questo procedimento è piuttosto inutile.
    Se tutti i campi sono vuoti eccetto l'ultimo, $validato sarà true e quindi il controllo fallisce.

    Dovresti fare qualcosa di più specifico.
    Ultima modifica di javascripter : 19-02-2011 alle ore 21.17.11

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,813

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Se tutti i campi sono vuoti eccetto l'ultimo, $validato sarà true e quindi il controllo fallisce.
    Vero.

    Si potrebbe risolvere in questo modo:
    Codice PHP:
    <?php
    $validato
    = true;

    if(
    count($_POST)) {
    foreach(
    $_POST as $chiave => $valore) {
    if(empty(
    $valore) && ($chiave != 'optional'))
    $validato = false;
    }
    if(!
    $validato) {
    header('Location: index.php?errore=1');
    }
    }
    ?>
    Ciao!
    Ultima modifica di alemoppo : 19-02-2011 alle ore 21.34.37

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Vero.

    Si potrebbe risolvere in questo modo [...]
    Ciao!
    Esatto, in più io fermerei il loop se si verifica la condizione:
    Codice PHP:
    <?php
    $validato
    = true;

    if(
    count($_POST)) {
    foreach(
    $_POST as $chiave => $valore) {
    if(
    $chiave != 'optional' && empty($valore)) { // l'ordine conta, se il primo controllo è falso, php, non si "sforza" di fare anche l'altro controllo. In questo caso conviene prima controllare che sia una $chiave valida e poi controllare il valore.
    $validato = false;
    break;
    }
    }
    if(!
    $validato) {
    header('Location: index.php?errore=1');
    }
    }
    ?>

  9. #9
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,813

    Predefinito

    l'ordine conta, se il primo controllo è falso, php, non si "sforza" di fare anche l'altro controllo. In questo caso conviene prima controllare che sia una $chiave valida e poi controllare il valore.
    Se guardi il mio messaggio è editato: originariamente avevo scritto nell'ordine che hai scritto te; poi li ho invertiti! (i mod o chi ha i poteri di vedere le modifiche potranno confermare ). Però non ricordo il motivo di averli invertiti: effettivamente è giusto come avevo scritto originariamente (e come hai scritto te) .

    Per il berak, giustissimo!

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •