Visualizzazione dei risultati da 1 a 10 su 10

Discussione: form con campi input variabili

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    321

    form con campi input variabili

    salve ragazzi possego un file txt dove devo estrapolare dei dati e memorizzare in un db.
    vi mostro il tracciato del mio file:

    a|4|543543|534546|6564|4654|||true
    b|2|3232|4343|||||true
    c|6|||||||false
    d|2|||||||false

    vi spiego spiego il tracciato del mio file
    a,b,c,d sono i record, mentre il campo immediatamente al suo fianco indica, quante celle dovrà avere riempite al suo fianco, nel caso finale di true vuol dire che il record è completo, quando termina con false, vuol dire che le celle del record non sono compilate.
    il mio form è composto da un massimo di 6 input questo vuol dire che il secondo valore del record potrà avere come valore massimo 6 come nel record "c" del file.
    il mio dubbio sorge ora:
    quando nel caso "d" il record al suo fianco è 2 vorrei generare un form con 2 input oppure con 6, ma i primi 2 attivi e gli untimi 4 restanti o non visibili oppure non digitabili.
    in poche parole il secondo valore di ogni record indica quante input avrà ogni form.
    ciò è possibile?
    qualcuno pùò indicarmi magari qualche script sulla rete che possano indirizzarmi.
    saluti
    spero sia chiaro il mio problema

  2. #2
    Leggi il file txt ed effettui un ciclo for il numero di volte necessario generando di volta in volta un campo input:

    Codice PHP:
    ...
    for (
    $i 0numero_letto$i++) {
        echo 
    "<input type='text' name='nome[]' />";
    }
    ... 
    Nella pagina del submit recuperi $_POST['nome'] che conterrà un array con i vari valori.
    Oppure crei sempre 6 input ed in base al numero letto aggiungi o meno un disabled.
    "L'intelligenza totale è una costante. La popolazione sta aumentando." (L. Boltzmann)

    "Mai discutere con uno stupido, la gente potrebbe non capire la differenza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    321
    Ciao allego il mio codice, il fatto dell'array non mi è molto chiaro, io so che al massimo num_pagine puo avere valore 6 dunque al massimo 6 input
    il codice qui sotto è ok, mi stampa i giusti input,ma non riesco a memorizzare nel db
    Codice PHP:
    for ($i = 0; $i <$enti["num_pagine"]; $i++) {
                        
                ?>
                <form action="modifica.php" class="insert" name="frm_enti" id="frm_enti" method="post">
                <fieldset>
                <h4>dati anagrafici</h4>
                <div class="item">
                <label for="nome">nome <em>*</em></label>
                <?
                
    echo "<input type='text' name='nome' value='$barc1' class='input w300'/>";
                }
                
    ?>
                </div>
                <div class="item">
                <label for="cognome">cognome <em>*</em></label>
                <div class="itembutton">
                    <input class="button" type="submit" name="salva" value="salva" />
                </div>            
                </fieldset>                                            
                <div class="form-submit">
                <input type="hidden" name="id_lotti" value="<?=$id_lotti?>" />
                <input type="hidden" name="action" value="modifica" />
                </div>
                
                </form>
    barc1 è una colonna della tabella del db e ne estiono sei barc2,barc3.....

    saluti

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    827
    Mi pare che satifal sia stato molto chiaro...
    1 Nel tuo codice, l'apertura del form va fatta fuori dal ciclo (prima del for), altrimenti hai n <form > aperti e non mi pare abbia senso
    2 Come ti è stato detto, devi mettere come nome dell input un array (name="nome[]"). Così ti viene passato solo l'ultimo.

    Inoltre, se hai 6 variabili $barcX, per assegnare il value all'input puoi fare così:
    Codice PHP:

    // da qualche parte assegno i valori a $barc1, $barc2....
    <form ... >
    ...
    <?php
    for ($i 0$i <$enti["num_pagine"]; $i++) {
            ....
           
    $barc 'barc'.($i+1);
           echo 
    "<input type='text' name='nome[]' value='${$barc}' class='input w300'/>";

    }
    ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    321
    ragazzi ho fatto passi avanti:
    form:
    Codice PHP:
    <form action="modifica.php" class="insert" name="frm_enti" id="frm_enti" method="post">
                <fieldset>
                <h4>dati</h4>
                <div class="item">
                <?
                
    echo "<br>";
                for (
    $i 0$i <$enti["num_pagine"]; $i++) 
                {
                
    $barc 'barc'.($i+1);
                echo 
    "<br>";
                echo 
    "$barc";
                echo 
    "<input type='text'  name='nome[]'  value='${$barc}' class='input w300'/>";
                
    $value $nome[$barc];
                }
                
    ?>
               
                </div>
                <div class="item">
                <div class="itembutton">
                    <input class="button" type="submit" name="salva" value="salva" />
                </div>            
                </fieldset>                                            
                <div class="form-submit">
                  <input type="hidden" name="id_utenti" value="<?=$id_lotti?>" />
                <?
                
    echo "$id_lotti";
                
    ?>
                <input type="hidden" name="<?=$nome[$barc]?>" value="<?=$value?>" > 
                <input type="hidden" name="action" value="modifica" />
                </div>
                
                </form>
    invio al db
    Codice PHP:
    $idi $_POST["id_utenti"];
    echo 
    "$idi";


    if(isset(
    $_POST['nome'])){
        print 
    "Stampa dell'array con i valori selezionati\n";
        
    print_r($_POST['nome']);
        print 
    "
    \n"
    ;
        
    $a $_POST['nome'];
        print 
    "Valori selezionati in formato stringa: " .implode('|'$a). "\n";
        print 
    "
    \n"

    echo 
    "<br>";
    }
    while(list(,
    $value) = each($a))
    {
    list(
    $barc1,$barc2) = explode('|'$value);
        
    $stringa1 str_replace ("'""&#039"$barc1);
        
    $stringa2 str_replace ("'""&#039"$barc2);
    echo 
    "$barc1";
    echo 
    "<br>";
    echo 
    "$barc2";
    echo 
    "<br>";
    $query "UPDATE lotti SET barc1 = '".$stringa1."', barc2 = '".$stringa2."' WHERE id_lotti = ".$idi;
    mysql_query($query) or die(mysql_error());


    però quando eseguo la query memorizza solo il valore di echo "$barc2"; e inoltre nel db nel record barc1
    come mai?
    Ultima modifica di 84morena; 17-01-2014 a 01:15

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    827
    Scusa, ma non capisco il senso di quel che fai...
    Hai una array di valori ($a = $_POST['nome']) che ti scorri con

    while(list(,$value) = each($a))

    Presumo che questi tutti valori contengano un '|', visto che poi fai l'explode su quel carattere.
    Ad esempio : $a=array('111|222', '222|333', '333|444');

    A questo punto fai l'explode ed effettivamente (se i valori contengono uno | ) dovresti avere ad esempio $barc1=111 e $barc2=222
    Fai la query e aggiorni il record con id_lotti = $idi.

    Ma a questo punti rinizia il ciclo del while con il seguente elemento di $a (222|333) e dopo l'explode rifai la query, sovrascrivendo i valori di barc1 e barc2 ($idi e sempre lo stesso)

    PS: per evitare problemi con gli apici e di sql injection, usa mysql_real_escape_string() e non str_replace
    PS2: ma al posto del while(list() = each()), non è meglio usare foreach($a as $value) ?

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    321
    salve usando il foreach il problema rimane lo stesso, mi sovrascrive la variabile e va a memorizzare sempre l'utimo valore passato e nello stesso record barc1 del database e non scrivendo mai nel successivo..
    il mio problema è che l'array può avere da 1 a 6 valori e deve valorizzare i campi barc1,barc2..barc6 del db.
    ti giuro mi sto incasinando...

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    827
    La cosa che non ho capito del tuo codice è quell explode ...
    Cmq, ti faccio un esempio di quello che ho capito:
    Dal form ti arrivano da 2 a 6 valori

    $_POST['nome'] = array('12345', '23456', '34567');

    ed un id

    $idi= $_POST['id_utenti']

    Tu vorresti aggiornare il record che ha id_lotti = $idi con questi valori. La tabella lotti è fatta così

    id_lotti | barc1 | barc2 | barc3 | barc4 | barc5 | barc 6 | ...

    Se è così allora puoi fare:

    Codice PHP:
    <?php
    $idi 
    $_POST['id_utenti'];

    $set = array();
    $i 1;
    foreach(
    $_POST['nome'] as $barc){
         
    $set[] = 'barc'.$i."='".mysql_real_escape_string($barc)."'";
         
    $i++;
    }

    $query 'UPDATE lotti SET 'implode(', ' $set).' WHERE id_lotti='.$idi;
    mysql_query($query) or die(mysql_error());
    In caso il tuo problema sia diverso, cerca di spiegarti meglio

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    321
    ok perfetto con il tuo codice...risolto
    grazie

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    827

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 © 2014 vBulletin Solutions, Inc. All rights reserved.