Visualizzazione dei risultati da 1 a 6 su 6

Discussione: PHP e checkBox

  1. #1
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577

    PHP e checkBox

    Ciao a tutti

    Sto lavorando ad un sito che gestisce una rubrica telefonica come esercitazione(tutto bene )

    pero' volevo postare un piccolo problema che ho aime' risolto con una tecnica brutale

    Allora io costruisco in una pagina php iuna tabella , ad ogni riga cè una persona con i suoi dati ed una checkBox che indica l'opzione di cancellazione della Voce in rubrica

    posto un po di codice

    codice:
     print("<FORM action=\"cancella.php\" method=\"POST\" name=\"sezioneTabella\"> \n");
    			   print("<TABLE class=\"ContenitoreTabella\">\n");
    			   print("   <TR>\n");
    			   print("     <TD>Nome</TD>\n");
    			   print(" 	   <TD>Cognome</TD>\n");
    			   print(" 	   <TD>Data Nascita</TD>\n");
    			   print(" 	   <TD>Telefono</TD>\n");
    			   print(" 	   <TD>Email<TD>\n");
    			   print(" 	   <TD><input type=\"button\" onclick=\"Elimina()\" value=\"Elimina\"></TD>\n");
    			   print("	  </TR>\n");
    
    			   $i=1;
    			   $sentinella=true;
    			   while($record=mySql_fetch_object($Res))
    			   {
    			   			if($sentinella)
    						{
    							print("   <TR class=\"primo\">\n");
    							$sentinella=false;
    						}
    						else
    						{
    							print("   <TR class=\"secondo\">\n");
    							$sentinella=true;
    						}
    						print("        <TD> $record->nome </TD>\n");
    						print(" 	   <TD> $record->cognome </TD>\n");
    						print(" 	   <TD> $record->dataNascita </TD>\n");
    						print(" 	   <TD> $record->telefono </TD>\n");
    						print(" 	   <TD> <A HREF=\"mailto:$record->email\" alt=\"Contatta\">$record->email</A><TD>\n");
    						print(" 	   <TD><input type=\"checkBox\" id=\"$i\" name=\"$i\" value=\"$record->id\"></TD>\n");
    						print("	  </TR>\n");	
    						$i++;	
    			   }
    			   print("</TABLE>\n");
    			   
    			   $i--;//Numero di Voci immesse nella tabella
    			   print("<input type=\"hidden\" name=\"contatore\" value=\"$i\">\n");
    			
    			   print("</FORM>\n");
    Adesso quando invoco il submit() da questa pagina il file che riceve i dati (cancella.php) mi trova solo i valori delle checkBox spuntate e non tutti quanti .Il problema è consistente pochiè se vedete come attribuisco il valore name alle checkBox non posso sapere a priori nel fil cancella.php quali valori sono stati spuntati cioè in altre parole non so che valore dare dentro a $_POST[?] per ricavare il valore della checkBox

    La soluzione "grezza" che ho dato al problema è quella di usare una funziona JavaScript che prima di inviare il submit() mi spunta tutte le chekBox che non erano spuntate e pone il loro rispettivo valore a 0 in modo da poter controllare in cancella.php quali chekBox erano effetivamente state spuntate(valore != 0) .

    Questa soluzione non mi sembra un gran che ... anche se è funzionante

    qualche consiglio ?

  2. #2
    Non centra niente col tuo problema non ho ancora guardato.. Però.. VVoVe: intanto un, come lo chiami tu "submit()", non si invoca.. credo.. Se non c'è lo spirito html intrinseco nel pc..

    Poi son tanto brutti tutti quei "print" in tutto il codice.. VVoVe: è molto meglio se fai:
    Codice PHP:
    ?>
    <FORM action="cancella.php" method="POST" name="sezioneTabella">
    <TABLE class="ContenitoreTabella">
    <TR>
    <TD>[B]Nome[/B]</TD>
    <TD>[B]Cognome[/B]</TD>
    <TD>[B]Data Nascita[/B]</TD>
    <TD>[B]Telefono[/B]</TD>
    <TD>[B]Email[/B]<TD>
    <TD><input type="button" onclick="Elimina()" value="Elimina"></TD>
    </TR>
    <?php
    $i
    =1;
    $sentinella=true;
    while(
    $record=mySql_fetch_object($Res)){
        if(
    $sentinella)    {
           echo 
    "<TR class=\"primo\">\n";
             
    $sentinella=false;
           }else{
           echo 
    "<TR class=\"secondo\">\n";
           
    $sentinella=true;
        }
    ?>
    <TD><?php echo $record->nome ?></TD>
    <TD><?php echo $record->cognome ?></TD>
    <TD><?php echo $record->dataNascita ?></TD>
    <TD><?php echo $record->telefono ?></TD>
    <TD><?php echo "<A HREF=\"mailto:$record->email\" alt=\"Contatta\">$record->email</A>\n"?></TD>
    <TD><?php echo "<input type=\"checkBox\" id=\"$i\" name=\"$i\" value=\"$record->id\">\n"?></TD>
    </TR>    
    <?PHP
    $i
    ++;    
    }
    ?>
    </TABLE>
    <?PHP           
    $i
    --;//Numero di Voci immesse nella tabella
    echo "<input type=\"hidden\" name=\"contatore\" value=\"$i\">\n";
    echo 
    "</FORM>\n";
    Poi vabbè ogniuno ha il suo stile.. è tutto all'interno di una classe a quanto vedo.. tipo:

    <input type=\"checkBox\" id=\"$i\" name=\"$i\" value=\"$record->id\">

    Quanto vale $record->id ???? se non sbaglio è quello il valore passato dalla checkbox...
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    allora $record->id è un campo della tabella intero e auto-incrementato in più è anche chiave

    gli do quel valore cosi con la submit()(Guarda il PS) a cancella.php gli ripasso i valori degli id che devo cancellare

    P.S.
    La nota stilistica è da prendere in seria considerazione


    Pero io cè l'ho lo spirito intrinseco dell'html

    document.NomeForm.submit();

    anche se è js

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Effettivamente la soluzione è bruttina assai.
    Invece di chiamare le checkbox col valore di $i, potresti trasformarle in un array in cui $i costituisce l'indice. Ad esempio name="elimina[$i]"

    In questo modo nella pagina ricevente puoi fare un ciclo tipo

    Codice PHP:
    foreach($_POST['elimina'] as $key => $value) {
    //in $key hai l'indice da eliminare


  5. #5
    il problema è che se la checkbox non è stata spuntata il valore non viene passato con il post, di conseguenza php ti da un errore perchè la variabile non esiste.
    Le soluzioni a questo problema sono tante, quella che personalmente adotto io, e che è abbastanza semplice, è questa:

    - controllo se la checkbox è stata selezionata (in pratica, il controllo vede se esiste quella checkbox), se esiste ne prendo il valore, altrimenti gliene assegno uno di default.

    codice:

    Codice PHP:
    $checkbox = isset($_POST["nomecheckbox"]) ? $_POST["nomecheckbox"] : '0'
    questa istruzione cosa vuol dire?
    la checkbox esiste?
    - si: prendo il valore
    - no: le assegno come valore '0'

    quando devi andare a processare il valore di quella checkbox,basta un ciclo "if" che controlla se il valore è 0: se è zero vuol dire che non è stata selezionata, "else" hai il valore.

    spero di essere stato chiaro, in genere il mio codice è abbastanza incasinato

  6. #6
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    jos3ph hai centrato in pieno il mio problema e questa isset era proprio la funzione che adavo cercando adesso me la spulcio un pochino se trovo qualche risorsa la posto qui


    Grazie per tutti questi consigli

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.