PHP - RadioButton multipli

di il
11 risposte

PHP - RadioButton multipli

Buonasera a tutti,
sono un neofita in questo forum.
Avrei bisogno del vostro aiuto per un errore che mi sta bloccando da alcuni giorni.

Ho una tabella Mysql che riepilogo a video ponendo vicino ad ogni record un RadioButton di selezione per eventuali azioni di cancellazione modifica visualizzazione e stampa.

Tutto avviene nel giusto modo, ma quando vado a fare il Submit ad esempio di cancellazione del record selezionato, mi pone un errore:
<Undefined array key "numero_cl"> (dove numero_cl è il nome dei vari campi radiobutton che la procedura pone all'inizio di ogni record).

<td style='text-align: left; width: 70px;'>
<form name="cancella_cl" method="POST">
<button name='cancella_clist' type="submit"><img src="\\images\ICONE\recycle.ico" width="70" height="60" vspace="7" ><br><b><i>Cancella</i></b></button>
<?php
if(!isset($_POST['cancella_clist'])){
if (empty($_REQUEST['numero_cl']))
{
$numero_cl = $_REQUEST['numero_cl'];
echo $numero_cl;
}
else
{
$error = "Selezionare un Check-List!";
echo "<font color=red><b> $error </b></font>";
}
}
?>
</td>

La procedura PHP per creare a video la lista di record è la seguente ed effettivamente funziona:

foreach ($risultato as $val_record):
$codice_ID = $val_record['ID'];
$inserito_il = $val_record['Inserito_il'];
$data_ins = date('d-m-Y', strtotime($inserito_il));
$descrizione = $val_record['Descrizione'];
$inserito_da = $val_record['Inserito_da'];
$tipo = $val_record['Tipo'];
echo "
<table align='center' border=0 width='100%' bgcolor: #000000 margin-left=30>
<thead>
<tr>
<th style='text-align: center; width: 45px; valign; centre;'>
<input type='radio' name='numero_cl' value='$codice_ID'>
</th>
<th style='text-align: center; width: 95px; valign; left;'> $data_ins </th>
<th style='text-align: center; width: 480px; valign; left;'> $descrizione </th>
<th style='text-align: center; width: 175px; valign; left;'> $inserito_da </th>
<th style='text-align: center; valign; left;'> $tipo </th>
</tr>
</thead>
</table>
";

....... ma evidentemente qualcosa non va.

11 Risposte

  • Re: PHP - RadioButton multipli

    Quando fai il debug impara a identare il codice attraverso ide, ridurre al minimo il codice individuare il problema e poi risolverlo.

    Ti mostro un un'esempio di un form autocompilato. Sarà necessario aggiungere il tag form action url il method e anche il button submit o l'input type submit. [CODE]<?php $name = 'username'; $email = 'user@mail.com'; $website = 'www.example.com'; $comment = 'this a test'; $gender = 'other'; ?> Name: <input type="text" name="name" value="<?php echo $name;?>"> E-mail: <input type="text" name="email" value="<?php echo $email;?>"> Website: <input type="text" name="website" value="<?php echo $website;?>"> Comment: <textarea name="comment"><?php echo $comment;?></textarea> Gender: <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked ";?> value="female">Female <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked ";?> value="male">Male <input type="radio" name="gender" <?php if (isset($gender) && $gender=="other") echo "checked ";?> value="other">Other ?> Adesso supponendo che i dati corrispondano con quelli presenti nel database, avrò quattro scelte per il radio e la quarta può significare diversa dalle tre valide o mancante.
    empty in php indica se è vuota ritorna il valore true invece dovresti usare isset o più articolato che dovrai validare ID se corrisponde dentro al tuo database con nome etc.
    Giustamente per recuperare l'ultimo radio Button di questo esempio è [CODE]if(isset($_REQUEST['gender']) && in_array($_REQUEST['gender'], array('female', 'male', 'other', true) ) ){ //valid radio echo 'gender ' . $_REQUEST['gender']; }
  • Re: PHP - RadioButton multipli

    Hormus,
    ti ringrazio per i preziosi consigli, ma purtroppo non funziona neanche con ISSET.
    Il fatto è che i radio buttons creati in un ciclo di FOREACH uno per ogni record della tabella, al submit non restituisce alcun valore o quantomeno non sono riuscito a captarne nessuno.
    forse perchè questo ciclo è creato da istruzioni HTML inserite in una procedura PHP con ECHO "...... html .....".

    Il controllo dei dati di ritorno sembrano essere sempre vuoti e la funzione di controllo qui sotto è sempre negativa come se $record fosse sempre vuoto, infatti facendo una ECHO $record non pone nulla a video.

    $record = (isset($_POST['nome_radio_button']));
    if(!empty($record) and is_array($record)

    Purtroppo mi sono "piantato" su questo errore e non riesco ad andare avanti.
  • Re: PHP - RadioButton multipli

    Non è importante che tu lo usi nel foreach, indubbiamente avrai l'idea Chiara di come funziona html, php e le richieste tramite GET o POST.
    Anch'io nel mio codice utilizzo echo per preimpostare i valori che forse dopo il submit siano uguali o diversi perché alterati dall'utente. Ho aggiornato il codice precedente sperando ti sia chiaro, in quel contesto esistono solo tre possibili valori mentre nel tuo ID potranno anche essere meno o di più. Una variabile da fonte esterna è di tipo stringa.
    Prova il mio esempio.
    Inoltre potrà esistere l'ultimo radio button con lo stesso nome nel caso più di uno hanno lo stesso nome.
    Dal momento che forse in teoria avrai un ID univoco puoi usare name="radio[]" e php senza chiave esplicita tra parentesi quadre lo crea a partire da 0, quindi in php scorrerai l'array con if(isset($_REQUEST['radio'])) {
    //Giustamente è di tipo array la variabile che il programma si aspetta
    //per brevità non uso is_array($_REQUEST['radio']);
    foreach sintassi per scorrere array
    }
  • Re: PHP - RadioButton multipli

    Grazie mille per la tua riflessione.

    Ho fatto numerosi tentativi ma il problema è che questa istruzione:
    (isset($_REQUEST['nome_radio_button']))
    E' sempre falsa.

    I RadioButton non restituiscono niente..... come se non esistessero. Questo è il motivo per cui ho espresso dubbi su come ho creato l'elenco e nello specifico i RadioButton.

    La $_REQUEST['nome_radio_button'])) non restituisce il numero del codice del record assegnato nell'opzione VALUE anche se ho fatto delle prove ed il codice è associato.
    E' come se non riuscisse ad individuare il radio button premuto o come se non ci fosse un radio selezionato.

    Le ho provate tutte..... mi sto demoralizzando....
  • Re: PHP - RadioButton multipli

    Puoi provare la struttura html fissa senza interazione al database? Per capire se il problema sta perché non è annidato correttamente.
  • Re: PHP - RadioButton multipli

    Come posso fare???
  • Re: PHP - RadioButton multipli

    Un buon punto di partenza è leggere l'output dal sorgente della pagina https://support.google.com/campaignmanager/answer/2828688?hl=it oppure antepone view-source:http://www.examlle.com
    Poi per utenti esperti si dovrebbe sniffare il traffico http.
    Per destare il dubbio fai
    if(isset($_REQUEST['nome'])) {
    echo 'ok';
    }
    Senza prima verificare il bottone submit che probabilmente senza value non verrà inviato. Potrai anche scegliere dal tuo modulo html method GET, vedrai il name=value direttamente nella tua url (se non più grandi di 255 bytes).
  • Re: PHP - RadioButton multipli

    Sono passato al metodo $_GET come mi ahi suggerito per poter verificare il passaggio delle informazioni.

    Sulla barra di comando, una volta premuto il bottone, mi appare:
    http://localhost/passaggio/index.php/check-list?cancella_cl=

    Siccome cancella_cl= blank, l'ISSET è sempre falso.
    Dovrei forse inserire una sorta di "VALUE" per il passaggio del codice $ruolo. Non riesco poi a capire perché appare il cancella_cl (nome bottone) con il segno di uguale come se aspettasse la ricezione/trasmissione di qualche parametro.
    Oppure dovrei rimandare il bottone ad una function() che controlla il codice del record e poi effettua il submit con il paramentro (sempre se si puo fare).


    Il listato è questo:
    <form name="cancellazione" method="GET" action="/passaggio/index.php/check-list">
    <button name="cancella_cl" type="submit"><img src="\\images\ICONE\recycle.ico" width="70" height="60" vspace="7" ><br><b> <i>Cancella</i></b></button>
    </form>
    <?php
    if(isset($_GET['cancella_cl']))
    {
    $record = (isset($_GET['numero_cl']));
    if(!empty($record) and is_array($record))
    {
    $ruolo = $record[0];
    //cancella_CL($connessione, $numero_cl);
    echo $ruolo;
    }
    else
    {
    $error = "Selezionare un Check-List!";
    echo "<font color=red><b> $error </b></font>";
    }
    }
    ?>
  • Re: PHP - RadioButton multipli

    No isset verifica se è almeno inizializzata ad esempio $_GET['cancella_cl'] = ''; è comunque inizializzata e in questo caso ritorna vero.
    Il radio button con name e value (tipo stringa) dovrà essere inserito primo del tag di chiusura </form>.
    Se il browser produce unicamente quella query string significa non invia altri dati altrimenti era ?cancella_cl=&numero_cl%5B0%5D=12 se si usa la sintassi tra parentesi quadre e in php crea l'array 0 per $_GET['numero_cl'].
    var_dump($_GET['numero_cl'][0]); // 12
  • Re: PHP - RadioButton multipli

    Riporto di seguito il listato del modulo .PHP e come puoi vedere non è possibile spostare sotto il TAG <FORM> la compilazione del listato con il relativo RADIOBUTTON.

    <br>
    <table align='center' valign='middle' border=0 width='100%' cellpadding='10px'>
    <tr>
    <td style='text-align: left; width: 20px;'> </td>

    <td style='text-align: left; width: 70px;'>
    <form name="home_CL" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <button name="tasto_home" type="submit"><img src="\\images\ICONE\home.ico" width="70" height="60" vspace="7" ><br><b><i>Home</i></b></button>
    </form>
    </td>

    <td style='text-align: left; width: 70px;'>
    <form name="inserici_CL1" method="POST" action="/passaggio/index.php/nuovo-check-list">
    <button name="nuovo_cl" type="submit"><img src="\\images\ICONE\new_file_21047.ico" width="70" height="60" vspace="7" ><br><b><i>Nuovo</i></b></button>
    </form>
    </td>

    <td style='text-align: left; width: 70px;'>
    <form name="modifica_cl" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <button name="modifica_cl" type="submit"><img src="\\images\ICONE\modifica.ico" width="70" height="60" vspace="7" ><br><b><i>Modifica</i></b></button>
    </form>
    </td>

    <td style='text-align: left; width: 70px;'>
    <form name="cancellazione" method="GET" action="/passaggio/index.php/check-list">
    <button name="cancella_cl" type="submit"><img src="\\images\ICONE\recycle.ico" width="70" height="60" vspace="7" ><br><b><i>Cancella</i></b></button>
    </form>
    <?php
    if(isset($_GET['cancella_cl']))
    {
    $record = (isset($_GET['numero_cl']));
    if(!empty($record) and is_array($record))
    {
    $ruolo = $record[0];
    //cancella_CL($connessione, $numero_cl);
    echo $ruolo;
    }
    else
    {
    $error = "Selezionare un Check-List!";
    echo "<font color=red><b> $error </b></font>";
    }
    }
    ?>

    </td>

    <td style='text-align: left; width: 70px;'>
    <form name="visualizza_cl" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <button name="visualizza_cl" type="submit"><img src="\\images\ICONE\visual.ico" width="70" height="60" vspace="7" ><br><b><i>Visualizza</i></b></button>
    </form>
    </td>

    <td style='text-align: left; width: 70px;'>
    <form name="stampa_cl" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <button name="stampa_cl" type="submit"><img src="\\images\ICONE\printer.ico" width="70" height="60" vspace="7" ><br><b><i>Stampa</i></b></button>
    </form>
    </td>

    </tr>
    </table>

    <br>
    <table align='center' border=0 width='100%' margin-left=30>
    <tr>
    <td style='text-align: center; width: 350px; valign; middle;'>
    <font color='blue' size='+1'><strong><i><u><b> = GESTIONE CHECK LIST ATTIVI = </b></u></i></strong></font>
    </td>
    </tr>
    <br/>
    </table>

    <br/>
    <table align='center' border=0 width='100%' margin-left=30>
    <thead>
    <tr>
    <th style='text-align: center; width: 57px; valign; left;'></th>
    <th style='text-align: center; width: 25px; valign; left;'><en><b>Data</b></en><br/><b><en>Inserimento</en></b></th>
    <th style='text-align: center; width: 500px; valign; left;'><b>Descrizione<br/>Check List</b></br> </th>
    <th style='text-align: center; width: 175px; valign; left;'><b>Creato<br/> Da</b></th>
    <th style='text-align: center; valign; left;'><b>Stato<br/> Check List</b></th>
    </tr>
    </thead>
    </table>
    <hr align='left' size='1' color='black'></hr>

    <?php
    $ricercaSQL = "SELECT * FROM CHECK_LIST ORDER BY Inserito_il";
    $risultato = mysqli_query($connessione, $ricercaSQL);
    //$numeri=mysqli_num_rows($risultato);
    //echo $numeri;

    If (!$risultato){
    echo "Errore" . mysqli_error($connessione);
    }

    //$righe = mysqli_fetch_array($risultato);
    foreach ($risultato as $val_record):
    $codice_ID = $val_record['ID'];
    $inserito_il = $val_record['Inserito_il'];
    $data_ins = date('d-m-Y', strtotime($inserito_il));
    $descrizione = $val_record['Descrizione'];
    $inserito_da = $val_record['Inserito_da'];
    $tipo = $val_record['Tipo'];

    echo "
    <table align='center' border=0 width='100%' bgcolor: #000000 margin-left=30>
    <thead>
    <tr>"
    ?>
    <td style='text-align: center; width: 45px; valign; centre;' >
    <input type="radio" Name="numero_cl[]" value ="$codice_ID">
    </td>
    <?php
    echo "
    <td style='text-align: center; width: 95px; valign; left;'> $data_ins </td>
    <td style='text-align: center; width: 480px; valign; left;'> $descrizione </td>
    <td style='text-align: center; width: 175px; valign; left;'> $inserito_da </td>
    <td style='text-align: center; valign; left;'> $tipo </td>
    </tr>
    </thead>
    </table>
    ";
    $nl;
    $nl;
    endforeach;

    //mysqli_close($connessione);
    ?>


    Hai qualche altro suggerimento??
  • Re: PHP - RadioButton multipli

    L'elemento input può solo essere racchiuso tra <form> e </form> perché è previsto l'invio dal modulo html e dovrà anche avere il submit, per la maggior parte degli elementi sarà necessario l'attributo name e value per inviare name e valore. Altrimenti non stai scrivendo correttamente il markup html. Purtroppo html è solo quello che ti sto scrivendo.
    Se proprio vuoi usare la sintassi html 5 che funziona a volte usa l'attributo form. https://html.com/input-form
Devi accedere o registrarti per scrivere nel forum
11 risposte