Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19

    Problema con array multidimensionale e checkbox

    Buongiorno a tutti.

    Vado subito al sodo.
    Ho un form composto da una tabella html con quattro colonne: le prime tre corrispondono ai campi di una tabella Mysql; l'ultima, denominata "Conferma", contiene (per tutte le righe) una checkbox

    |Campo1|Campo2|Campo3|Conferma

    Il mio ipotetico utente deve selezionare una o piu' righe spuntando la relativa checkbox. Cliccando sul pulsante "submit" viene portato ad una pagina in cui vengono presentate le sole righe selezionate che poi con un nuovo pulsante submit invia ad una seconda tabella Mysql con identica struttura.

    Nella pagina che genera il form ho creato la checkbox in questo modo:

    Codice PHP:
    echo '<input type="checkbox" name="nome_var[]" value="'.$row_scad['Id'],'',$row_scad['Campoo1'],'',$row_scad['Campo2'],'',$row_scad['Campo3'].'" 

    Il form viene inviato con il metodo POST.

    Nella pagina di arrivo recupero l'array associato alla checkbox in questo modo:


    Codice PHP:
    $nome_var $_POST['nome_var'];
          foreach (
    $nome_var as $key => $value) {
          echo 
    "$value"; } 
    Problema: all'interno dell'array perdo la distinzione tra i campi. Questi, infatti, vengono concatenati in tante stringhe quanti sono gli elementi dell'array stesso (per capirci se l'utente seleziona una sola riga in cui Campo1 vale abc Campo2 vale qwe e Campo3 e' uguale a utw, l'array sara' 0 => abc qwe utw).

    Come posso mantenere la denominazione dei campi cosi' che sia possibile inviarli alla seconda tabella?

    Spero di essere stato chiaro.

    Grazie a tutti

    Emanuele

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Codice PHP:
    // ciclo sui record con la variabile $i...

    <input type="text" value="..." name="field[<?php print $i ?>][1]"/>
    <input type="text" value="..." name="field[<?php print $i ?>][2]"/>
    <input type="text" value="..." name="field[<?php print $i ?>][3]"/>
    <input type="checkbox" value="..." name="chk[<?php print $i ?>]"/>
    poi stampati il valore di $_POST che ti torna

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Ciao.

    Ho provato ad inserire il ciclo nella pagina che crea il form, ma non ottengo niente: sempre lo stesso risultato. non riesco a mantenere la distinzione tra i campi.

    Forse se posto un po' di codice e' meglio....

    I nomi campo1 campo2 campo3 erano solo di comodo.

    Ovviamente la tabella html contenuta nel form e' generata con una query sul db

    Codice PHP:
    while ($risultato mysql_fetch_assoc($query)) {
     
    $Cognome htmlentities($risultato['Cognome']);
     
    $Nome  htmlentities($risultato['Nome']); 
     
    $Descrizione htmlentities($risultato['Descrizione']);
       echo
    "<tr><td>$Cognome</td>
              <td>
    $Nome</td>
              <td>
    $Descrizione</td>";
      echo
    '<td><input type="checkbox" name="nome_var[]" value="'.$isultato['Cognome'],
          
    ' ',$risultato['Nome'],' ',$risultato['Descrizione'].'"</td></tr>';
    }
     echo
    "</table>"
    Questo e' il contenuto del form.
    Nella nuova pagina se faccio un echo di nome_var[] (ipotizzando di aver spuntato due checkbox) ottengo questo:

    0 => contenuto1 di Cognome contenuto1 di Nome contenuto1 di Descrizione
    1 => contenuto2 di Cognome contenuto2 di Nome contenuto2 di Descrizione
    con 1 e 2 intendo il contenuto dei rispettivi campi della due righe selezionate.

    Come posso estrapolare dall'array i singoli campi da inviare alla seconda tabella?

    Ho provato a inserire nel form il ciclo che mi hai suggerito, ma non ottengo il risultato sperato.

    Grazie per l'aiuto a te e a quanti vorranno intervenire.

    Emanuele

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    prova:

    Codice PHP:
    echo"<table>";
    $i=0;
    while (
    $risultato mysql_fetch_assoc($query)) { 
     
    $i++;
     
    $Cognome htmlentities($risultato['Cognome']); 
     
    $Nome  htmlentities($risultato['Nome']);  
     
    $Descrizione htmlentities($risultato['Descrizione']); 
       echo
    "<tr><td>$Cognome</td> 
              <td>
    $Nome</td> 
              <td>
    $Descrizione</td>";
      echo
    '<td>
    <input type="hidden" value="'
    .$risultato['Cognome'].'" name="field['.$i.'][cognome]"/> 
    <input type="hidden" value="'
    .$risultato['Nome'].'" name="field['.$i.'][nome]"/> 
    <input type="hidden" value="'
    .$risultato['Descrizione'].'" name="field['.$i.'][descrizione]"/> 
    <input type="checkbox" name="chk['
    .$i.']"/> </td></tr>'

    echo
    "</table>"
    non ho testato... ma in pratica dovresti avere un vettore "chk" indicizzato cui corrisponderebbe un vettore "field[...]" con lo stesso indice e i tre campi

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Grazie eiyen per le dritte.

    Ho fatto come mi hai suggerito. Avevo pensato ad utilizzare dei campi hidden, ma proprio non avevo idea di come fare.

    Ora riesco a portare alla nuova pagina il contenuto dei tre campi e, con un doppio ciclo foreach, ne mantengo le intestazioni.
    Non riesco a mettere i dati in forma tabellare. Ci sto girando intorno.

    Grazie ancora per i preziosi suggerimenti )

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Selezionando una sola checkbox, nella pagina di riepilogo vengono comunque riportate tutte le righe che compaiono nel form...

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    nel ciclo dovresti recuperare solo i campi field il cui chk corrispondente è attivo, tipo..


    Codice PHP:
    print '<table>';
    $chk $_POST['chk']; $fields $_POST['field'];
    $ids array_keys($chk); // questo dovresti verificarlo... sto scrivendo on-the-fly :)
    foreach ($ids as $id) {
      
    $dati $fields[$id];
      print 
    '<tr>';
      print 
    '<td>'.$dati['nome'].'</td>';
      print 
    '<td>'.$dati['cognome'].'</td>';
      print 
    '<td>'.$dati['descrizione'].'</td>';
      print 
    '</tr>';
    };
    print 
    '<table>'
    SOLO COME GUIDA... da sistemare!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    GRANDE!!!!!!!! )

    Grazie infinite!!!!!!!

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.