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

    Istruzioni case su ciclo for

    Salve a tutti,
    avrei bisogno del vostro aiuto :
    Ho creato un semplice generatore di creazione form, (molto spartano... ) ma non funziona in modo corretto... In breve la pagina 1.php passa dei parametri di campo alla pagina 2.php specificando vari parametri. Quando passo il paramento "campo richiesto" dalla pagina 1.php alla pagina 2.php lo stesso non viene applicato correttamente al campo interessato ma viene applicato a caso. Non riesco a capire dove risiede l'errore... Ringrazio chiunque possa aiutarmi

    ho le seguenti pagine 1.php:

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    </head>
    
    <body>
    <form id="form1" name="form1" method="post" action="2.php">
      <table border="1" cellpadding="2" cellspacing="2">
        <tr>
          <td>dati tabella</td>
          <td>label</td>
          <td>richiesto</td>
          <td>tipo campo</td>
        </tr>
        <tr>
          <td><label for="nome">nome
            
              <input name="nome_campo[]" type="hidden" id="nome_campo[]" value="nome" />
          </label></td>
          <td><label for="label"></label>
          <input type="text" name="label[]"  /></td>
          <td><input name="richiesto[]" type="checkbox" id="richiesto[]" value="1" />
          <label for="richiesto[]"></label></td>
          <td><label for="tipo_campo[]"></label>
            <select name="tipo_campo[]" id="tipo_campo[]">
              <option value="1">Campo Nascosto</option>
              <option value="2">Campo di testo</option>
              <option value="3">Area di Testo</option>
          </select></td>
        </tr>
        <tr>
          <td>cognome
          <input name="nome_campo[]" type="hidden" id="nome_campo[]" value="cognome" /></td>
          <td><label for="textfield2"></label>
          <input type="text" name="label[]"  /></td>
          <td><input name="richiesto[]" type="checkbox" id="richiesto[]" value="1" />
          <label for="richiesto[]"></label></td>
          <td><select name="tipo_campo[]" id="tipo_campo[]">
            <option value="1">Campo Nascosto</option>
            <option value="2">Campo di testo</option>
            <option value="3">Area di Testo</option>
          </select></td>
        </tr>
        <tr>
          <td>telefono
          <input name="nome_campo[]" type="hidden" id="nome_campo[]" value="telefono" /></td>
          <td><label for="textfield3"></label>
          <input type="text" name="label[]"  /></td>
          <td><input name="richiesto[]" type="checkbox" id="richiesto[]" value="1" />
          <label for="richiesto[]"></label></td>
          <td><select name="tipo_campo[]" id="tipo_campo[]">
            <option value="1">Campo Nascosto</option>
            <option value="2">Campo di testo</option>
            <option value="3">Area di Testo</option>
          </select></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><input type="submit" name="button" id="button" value="Invia" /></td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
      </table>
    </form>
    </body>
    </html>
    e 2.php

    codice:
    <?php
    if (isset($_POST)) {
    $label = $_POST['label'];    
    $richiesto = $_POST['richiesto'];
    $tipo_campo = $_POST['tipo_campo'];
    $nome_campo = $_POST['nome_campo'];
    // conto il numero degli elementi partendo dalla variabile label
    $conta = count($_POST['label']);
    
    $file = "tabella_inserisci.php";
    //apro il file e lo svouto prima di scrivere gli elementi 
    $fileA=fopen("inserisci.php","w");
    fclose($fileA);
    
    
    for($i=0; $i<$conta; $i++){
        
        switch ($tipo_campo[$i]){
            
        case 1:
          $tipo_campo[$i] =  "<input name=\"$nome_campo[$i]\" type=\"hidden\" value=\"\" />";
           break; 
        case 2:
          $tipo_campo[$i] = "<div class=\"form-group\">
                            <label class=\"control-label col-md-3\">$label[$i]";
                            if ($richiesto[$i] == '1'){ $tipo_campo[$i].="
                            <span class=\"required\">*</span>";}
                            $tipo_campo[$i].="</label>
                            <div class=\"col-md-4\">
                            <input type=\"text\" name=\"$nome_campo[$i]\" data-required=\"1\" class=\"form-control\"/>
                            </div>
                            </div>";   
           break;
        case 3:
            /*$richiesto[$i] ='';*/
            $tipo_campo[$i] = "<div class=\"form-group\">
                            <label class=\"control-label col-md-3\">$label[$i]";
                            if ($richiesto[$i] == '1'){ $tipo_campo[$i].="
                            <span class=\"required\">*</span>";}
                            $tipo_campo[$i].="</label>
                            <div class=\"col-md-4\">
                            <input type=\"text\" name=\"$nome_campo[$i]\" data-required=\"1\" class=\"form-control\"/>
                            </div>
                            </div>"; 
           break;    
        }
        
     echo $tipo_campo[$i] . $richiesto[$i] . "<br>";
     $var=fopen("inserisci.php","a+");
     fwrite($var, $tipo_campo[$i]."\n");
     fclose($var);
    } 
    }
    ?>

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Credo che dipenda dal fatto che "campo_richiesto" sia di tipo checkbox: Se non è spuntato non viene inviato, questo ti porta ad avere la dimensione di $richiesto variabile e "disallineato" con il resto delle variabili.
    Ad esempio, se selezioni solo il richiesto di telefono, su 2.php avrai
    $richiesto = array([0] => 1)
    Che, come puoi immaginare, verrà considerato spuntato per "nome" (tra l'altro dovresti avere anche dei errori sugli indici per $i>0)

    Ora, le soluzioni che mi vengono in mente sono:
    1, assegni una chiave a richiesto:
    nome:
    <input type="checkbox" name="richiesto[0]" ...>
    cognome:
    <input type="checkbox" name="richiesto[1]" ...>
    telefono:
    <input type="checkbox" name="richiesto[2]" ...>

    e su 2.php ne verifichi l'esistenza: if(isset($richiesto[$i]))

    2, usi javascript per passare l'array completo, contente anche i checkbox non spuntati
    Ultima modifica di boots; 28-07-2014 a 11:34

  3. #3
    Ciao Boots,
    ti ringrazio della risposta,
    solo una conferma:
    l'assegnazione e la verifica della chiave "checkbox" deve essere fatta all'interno del ciclo for già esistente opure devo creare un nuovo ciclo ?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    La verifica puoi farla nel ciclo for, invece di fare
    Codice PHP:
    if ($richiesto[$i] == '1'
    fai
    Codice PHP:
    if(isset($richiesto[$i])) 
    PS:
    Ovviamente, questo funziona se alla chiave che metti nel name (<input type="checkbox" name="richiesto[0]") poi effettivamente corrisponde con gli altri paramentri ($tipo_campo[0], $nome_campo[0])
    Ultima modifica di boots; 28-07-2014 a 12:10

  5. #5
    Ottimo +++ funziona alla grande !!
    Grazie

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.