Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Zenida
    Registrato dal
    Mar 2011
    Messaggi
    19

    Gestire Checkbox in FORM multipli

    Ciao ragazzi devo creare una semplice funzione che mi sta dando più rogne del previsto.

    Nel mio sito web ho una sezione dedicata alla gestione dei messaggi privati scambiati tra utenti.
    Attualmente i messaggi sono elencati una riga sopra l'altra, generati da un while e di fianco ad ogni riga ci sono 3 form che mi servono rispettivamente per:

    [list=1][*]Rispondere al PM[*]Rispondere con allegato al PM[*]Eliminare il PM[/list=1]

    questi form sono generati di volta in volta sempre all'interno dello stesso while.
    Ora vorrei aggiungere di fianco a questi 3 form una checkbox per poter selezionare i messaggi ed eliminare tutti i selezionati in un colpo solo (perchè ora sono costretto ad eliminarli ad uno ad uno oppure ad eliminarli tutti)

    Solo che ho alcuni problemi (il primo è che non ho mai fatto una cosa simile).
    Dato che i PM sono in riga uno sopra l'altro (generati mediante un while) per aggiungere una checkbox sulla riga devo creare di volta in volta un nuovo FORM con dentro la casella di controllo e quindi questo mi comporta l'obbligo di inserire tanti Submit quante checkbox vengono create, cosa inutile dato che il submit deve essere unico a fondo pagina.

    Purtroppo il Form per le checkbox non posso crearlo prima del while perchè al suo interno ci finirebbero gli altri 3 form già esistenti con i relativi submit ed un form nel form mi sembra una cosa assurda (probabilmente impossibile), specie perchè la pagina che elabora i dati del modulo non è un file esterno ma è la stessa pagina che viene ricaricata e controlla una variabile $_POST per determinare quale azione è stata richiamata e quindi quale azione intraprendere.

    Se riuscite a darmi una soluzione vi sarei grato... altrimenti devo ricorrere ad un altro trucchetto che mi sta già gironzolando per la testa.

  2. #2
    Immagino che il ciclo while l'hai fatto all'incirca così:
    Codice PHP:
    1)while($a mysql_fetch_assoc($b)) 2)while($this->....  = mysql_fetch_assoc($b)){
     
    $c[] = ...[$a/$this]

    Ho messo nell'esempio 2 ipotesi possibili su come potresti avere il ciclo, comunque dovresti andare a vedere la classe $c a cosa corrisponde, perchè è lì che devi inserire la check box.
    Ovvero hai configurato un'altra pagina php per la stampa dei dati, e adesso il ciclo prende quei dati e li stampa, se tu metti la check box insieme ai vari $valore che vengono stampati, allora verrano stampate tante check box. Adesso per far agire ogni checkbox come singola non devi far altro che settare la checkbox con valore 'id', visto che può essercene soltanto uno corrispondente nel database andrà benone.

    P.S. questo sistema funziona se fai una stampa unica, non tante stampe separate, inoltre è i lciclo while che crea tutti i dati che vede l'utente, compresa la checkbox.

  3. #3
    Utente di HTML.it L'avatar di Zenida
    Registrato dal
    Mar 2011
    Messaggi
    19
    Scusami non ho capito molto bene la tua spiegazione... purtroppo non posso copiarti per intero il codice altrimenti la lettura risulterebbe davvero scomoda qui sul forum.

    ma diciamo che attualmente funziona così:

    La pagina PHP ha in cima degli if di questo tipo:
    Codice PHP:
    if (isset($_POST['funzione'])){
        ...
    fai qualcosa...

    In questo modo controllo se è stato premuto il tasto cancella, rispondi, rispondi con allegato, ecc...

    solo 1 alla volta di questi if può essere vero (nel caso in cui viene premuto il tasto relativo)
    altrimenti nessuno di questi sarà vero e verrà caricata la pagina richiesta (che può essere la lista PM, la composizione di un nuovo PM oppure la lettura di un PM selezionato)

    Quindi tutto viene gestito mediante l'uso di un'unica pagina PHP che nel caso in cui viene chiamata una funzione passa a se stessa la variabile $_POST piuttosto che passarla ad un altro file esterno.

    per quanto riguarda la parte che interessa risolvere a me, ovvero la lista PM, ad un certo punto dopo aver creato un pò la struttura con qualche div viene utilizzato un while
    Codice PHP:
    while ($row mysql_fetch_array($result)) {
        ... 
    disegna la riga corrispondente ad un solo PMcompresi i tasti cancellarispondirispondi con allegato.

    Ora vorrei aggiungere la checkbox vicino questi tasti, però se mettessi il form all'interno del while che genera di volta in volta n messaggi...
    Codice PHP:
    <form method="post" action="me_stesso.php">
        <
    input type="checkbox" name="A[]" value="valore" />
        <
    input type="submit" value="invia form" />
    </
    form
    mi verrebbe creato un tasto di l'invio per ogni checkbox.

    purtroppo il submit ed il form sono costretto a chiuderli nel while perchè se li chiudessi all'esterno (facendo generare un unico submit) mi verrebbero dei form innestati (per via del fatto che di volta in volta sono generati i tasti di cancella, rispondi, rispondi con allegato e se non sbaglio i form non si possono innestare.

    A questo punto credo che come soluzione serva l'uso di un codice lato client tipo Javascript/jQuery che mi crei le checkbox però non saprei come gestirlo

  4. #4
    Ciao, dovresti mettermi la stampa del ciclo while, se il ciclo stampa una classe predefinita, dovresti copiarmi anche la classe (la classe viene settata prima nel php, se ad esempio hai "$C=new Prova[]", vuol dire che stamperà tutti i dati contenuti nella classe prova).
    Per quanto riguarda la condizione iniziale, ovveri l'if su 'funzione' immagino che sia un semplice 'invia', che serve solo per vedere quale tasto viene premuto, per poi andare con i vari settaggi dei dati, update, ecc.
    Per quanto riguarda la form mi sembra sbagliata, da quello che ho capito leggendo, hai inserito tutta la form nella stampa del ciclo, quindi ogni volta fai apri e chiudi?
    Prova così per esempio:
    Codice PHP:
    ?><form method="post" action="me_stesso.php"> <?php
    while ($row mysql_fetch_array($result)) {
        ... 
    disegna la riga corrispondente ad un solo PMcompresi i tasti cancellarispondirispondi con allegato.
    }
    ?>
        <input type="submit" value="invia form" />
    </form>
    e nel ciclo while alleghi a ogni dato solo questo:
    Codice PHP:
        <input type="checkbox" name="A[]" value="valore" /> 
    Poi per l'ultimo errore che hai segnalato, che sembra quello più grave, mi sembra molto strano che la pagina si comporti in questo modo, molto probabilmente l'errore potrebbe non strare nelle checkbox, ma da qualche altra parte. Se vuoi posta almeno la stampa dei dati con i vari tasti che dò un'occhiata. Poi se vuoi usare una funzione Jquery o Java non saprei, perchè nel tuo caso mi sembra molto meglio i lsemplice php, visto che è tutto generato da un ciclo.

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Secondo me, per evitare di creare form annidati, dovresti cambiare il form per cancella, rispondi, rispondi con allegato in un link. In questo modo puoi fare il form per la cancellazione multipla con i checkbox

    Esempio:
    Codice PHP:

    <form method="post" action="me_stesso.php"> <?php
    while ($row mysql_fetch_array($result)): ?>
        <tr>
         <td><input type="checkbox" name="A[<?php echo $row['id'?>]" /></td>
         ...
         <td>
            [url="me_stesso.php?action=cancella&id=<?php echo $row['id'?>"]cancella[/url]
         </td>
         ...
        </tr>
    <?php endwhile ?>
        <input type="submit" value="Cancella Selezionati" />
    </form>
    Ps: l'unico inconveniente è che potresti essere esposto ad un attacco CSS, almeno per quento quanto rigurda la cancellazione del messaggio, tramite link

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.