[PHP] Check - Select e recupero variabili

Emix

Utente Attivo
15 Feb 2010
594
0
16
Buonasera a tutti,
Ho una pagina con circa 60 checkbox e circa 3 opzioni a select per ogni check box, quindi troppe variabili :)

In sostanza devo far inserire all'utente tramite checkbox e select una serie di danni a veicoli, una volta selezionata la parte interessata ce una select per inserire l'entità del danno.
Fin qui tutto ok, lo faccio tranquillamente e recupero i valori. Ora ho un problema che sorge... attualmente se seleziono l'entita ma mi dimentico la parte il sistema non tiene conto in quanto non selezionata la parte. Il problema nasce al contrario, se seleziono la parte ma mi dimentico di selezionare l'entita non ottengo errore.

Posto di seguito HTML delle checkbox + select (ne posto due ma sono per ogni parte del veicolo)

HTML:
<html>
<head></head>
<body>
<table>
<tr><td>Paraurti Anteriore</td><td><input type="checkbox" name="par_ant_dx" />DX</td><td><select name="da_par_ant_dx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td>
<td><input type="checkbox" name="par_ant_sx" />SX</td><td><select name="da_par_ant_sx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td></tr>
<tr><td>Paraurti Posteriore</td><td><input type="checkbox" name="par_post_dx" />DX</td><td><select name="da_par_post_dx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td><td><input type="checkbox" name="par_post_sx" />SX</td>
<td><select name="da_par_post_sx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td></tr>
</table>
</body>
</html>
A questo punto la parte PHP relativa al recupero e alla selezione:
PHP:
if (!empty($_POST['par_ant_dx'])) {
$da_par_ant_dx = $_POST['da_par_ant_dx'];
}
if (!empty($_POST['par_ant_sx'])) {
$da_par_ant_sx = $_POST['da_par_ant_sx'];
}
if (!empty($_POST['par_post_dx'])) {
$da_par_post_dx = $_POST['da_par_post_dx'];
}
if (!empty($_POST['par_post_sx'])) {
$da_par_post_sx = $_POST['da_par_post_sx'];
}
Come posso fare in modo che recupero il valore dell'entità del danno solo se il checkbox e selezionato e solo se la parte e selezionata? Sostanzialmente io devo passare alla pagina dopo solamente le variabili con i danni riempiti...
Ovviamente la soluzione cosi la conosco gia, ma significherebbe farlo per 35 volte circa...
PHP:
    if ($da_par_ant_dx != '' ){
        $a = 1 ;
    } else {
        $a = 2 ;
        echo 'NON HAI SELEZIONATO ENTITA DANNO';
    }
Grazie a chi voglia aiutarmi,


ps spero sia chiaro altrimenti chiedete pure
 

macus_adi

Utente Attivo
5 Dic 2017
1.026
57
48
IT/SW
potresti effettuare il controllo attraverso un'array....

PHP:
<?php
/**
 * Created by PhpS.
 * User: macus
 * Date: 21/02/2018
 * Time: 16:26
 */



if(isset($_POST['salva'])){
    unset($_POST['salva']);
    foreach ($_POST['type'] as $k=>$v){
        echo $k.' - '.$_POST['da_'.$k];
    }
}


?>


<html>
<head></head>
<body>
<form method="post">
<table>
    <tr><td>Paraurti Anteriore</td><td>
            <input type="checkbox" name="type[par_ant_dx]" />DX</td><td><select name="da_par_ant_dx" class="bootstrap-frm">
                <option value="">Scegli entità danno</option>
                <option value="LIEVE">Lieve</option>
                <option value="MEDIA">Media</option>
                <option value="GRAVE">Grave</option>
                <option value="SOSTITUZIONE">Sostituzione</option>
            </select>
        </td>
        <td><input type="checkbox" name="type[par_ant_sx]" />SX</td><td><select name="da_par_ant_sx" class="bootstrap-frm">
                <option value="">Scegli entità danno</option>
                <option value="LIEVE">Lieve</option>
                <option value="MEDIA">Media</option>
                <option value="GRAVE">Grave</option>
                <option value="SOSTITUZIONE">Sostituzione</option>
            </select>
        </td></tr>
    <tr><td>Paraurti Posteriore</td><td><input type="checkbox" name="type[par_post_dx]" />DX</td><td><select name="da_par_post_dx" class="bootstrap-frm">
                <option value="">Scegli entità danno</option>
                <option value="LIEVE">Lieve</option>
                <option value="MEDIA">Media</option>
                <option value="GRAVE">Grave</option>
                <option value="SOSTITUZIONE">Sostituzione</option>
            </select>
        </td><td><input type="checkbox" name="type[par_post_sx]" />SX</td>
        <td><select name="da_par_post_sx" class="bootstrap-frm">
                <option value="">Scegli entità danno</option>
                <option value="LIEVE">Lieve</option>
                <option value="MEDIA">Media</option>
                <option value="GRAVE">Grave</option>
                <option value="SOSTITUZIONE">Sostituzione</option>
            </select>
        </td></tr>
</table>


    <button type="submit" name="salva">Invia</button>

</form>
</body>
</html>
Le input devi farle diventare type[qualcosa] e le select le individui come hai fatto adesso....
echo $k corrisponde alla chiave valorizzata della checkbox mentre l'altra è la select associata.

Spero sia utile
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
non ho capito... io ho solamente checkbox e select.. le checkbox gia le verifico, le select, a parte il sistema rognoso da me postato non conosco una soluzione... però non ho capito cosa intendi tu... puoi spiegarmi meglio ?
 

macus_adi

Utente Attivo
5 Dic 2017
1.026
57
48
IT/SW
allora adesso tu controlli i checkbox una alla volta
HTML:
<input type="checkbox" name="nome">
in questo modo avrai una montagna di if...
se imposti
HTML:
<input type="checkbox" name="controllo[nome]">
stai utilizzando un'array per valorizzare il tutto... Ossia se un checkbox non viene ceccato , non viene passatto alla form di input, così la variabile post[controllo][nome] non esiste... nel ciclo foreach effettivamente scorri solo gli elementi esistenti e non quelli potenzialmente visualizzati sulla pagina... Quindi...

Imposta le checkbox in questo modo

HTML:
<input type="checkbox" name="controllo[paraurti_anteriore_destro]">
e inserisco la select associata alla checkbox

HTML:
<select name="paraurti_anteriore_destro"></select>
e così via per tutti gli elementi che hai....
quando invii i dati scorri solo gli input....
if(isset($_POST['salva'])){
unset(
$_POST['salva']);
foreach (
$_POST['type'] as $k=>$v){
echo
$k.' - '.$_POST['da_'.$k];
}
}
Ossia $_POST['controllo'] in questo caso sarà un'array contenente solo i ceccati...
Quindi tu dovrai solo recuperare il valore passato in post della chiave degli input checkbox....

ossia.... la chiave associata a $_POST['controllo'][$k] risulterà essere la chiave della select ossia $_POST[$k] = ottieni il valore della select....
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
ok faccio dei test :) se ho necessita o errori ti scrivo. Grazie
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
allora adesso tu controlli i checkbox una alla volta
HTML:
<input type="checkbox" name="nome">
in questo modo avrai una montagna di if...
se imposti
HTML:
<input type="checkbox" name="controllo[nome]">
stai utilizzando un'array per valorizzare il tutto... Ossia se un checkbox non viene ceccato , non viene passatto alla form di input, così la variabile post[controllo][nome] non esiste... nel ciclo foreach effettivamente scorri solo gli elementi esistenti e non quelli potenzialmente visualizzati sulla pagina... Quindi...

Imposta le checkbox in questo modo

HTML:
<input type="checkbox" name="controllo[paraurti_anteriore_destro]">
e inserisco la select associata alla checkbox

HTML:
<select name="paraurti_anteriore_destro"></select>
e così via per tutti gli elementi che hai....
quando invii i dati scorri solo gli input....

Ossia $_POST['controllo'] in questo caso sarà un'array contenente solo i ceccati...
Quindi tu dovrai solo recuperare il valore passato in post della chiave degli input checkbox....

ossia.... la chiave associata a $_POST['controllo'][$k] risulterà essere la chiave della select ossia $_POST[$k] = ottieni il valore della select....

Quindi se ho capito bene il mio precedente HTML diventa cosi:

HTML:
<html>
<head></head>
<body>
<table>
<tr><td>Paraurti Anteriore</td><td><input type="checkbox" name="controllo[par_ant_dx]" />DX</td><td><select name="da_par_ant_dx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td>
<td><input type="checkbox" name="controllo[par_ant_sx]" />SX</td><td><select name="da_par_ant_sx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td></tr>
<tr><td>Paraurti Posteriore</td><td><input type="checkbox" name="controllo[par_post_dx]" />DX</td><td><select name="da_par_post_dx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td><td><input type="checkbox" name="controllo[par_post_sx]" />SX</td>
<td><select name="da_par_post_sx" class="bootstrap-frm">
<option value="">Scegli entità danno</option>
<option value="LIEVE">Lieve</option>
<option value="MEDIA">Media</option>
<option value="GRAVE">Grave</option>
<option value="SOSTITUZIONE">Sostituzione</option>
</select>
</td></tr>
</table>
</body>
</html>
Giusto ?

La parte PHP invece la copio/incollo cosi come la hai scritta? per inserire il risultato dentro la variabile non faccio altro che fare : $danni = $k.' - '.$_POST['da_'.$k]; Corretto ?
 

macus_adi

Utente Attivo
5 Dic 2017
1.026
57
48
IT/SW
esatto! Naturalmente effettua il check di esistenza della $_POST['da_'.$k] ossia...

Devi ciclare su $_POST['controllo']

PHP:
$ar_inserimento=[];
foreach($_POST['controllo'] as $k=>$valore){
if(isset($_POST['da_'.$k])){
   //valore trovato posso procedere
   //valorizzi l'array come ti serve
}else{
   //non è valorizzato
}
}
Poi naturalmente gestisci le eccezioni come ti servono!
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Provo a sistemare lo script e la parte html, poi te la posto completa, riesci a dargli un occhio ?
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Questa la parte HTML completa...

Codice:
https://pastebin.com/VJaTsNYt
Questa la parte PHP:

PHP:
<?
if(isset($_POST['invia'])){
unset($_POST['invia']);
$ar_inserimento=[];
foreach($_POST['controllo'] as $k=>$valore){
if(isset($_POST['da_'.$k])){
echo $k.' - '.$_POST['da_'.$k];
$danni = $k.' - '.$_POST['da_'.$k];
}else{
   echo 'nessun danno';
}
}
}
?>
Se non ho fatto casino su quello che mi hai detto dovrebbe esser corretto
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Allora l'ho testato ed effettivamente fa quello che vorrei.. ora ho dei problemi che vorrei risolvere con te.
Inserendo effettivamente quanto riporta la risposta php mi esce questo:

par_ant_dx - LIEVEpar_post_sx - MEDIAparafango_ant_sx - LIEVEcerchi_ant_dx - SCALFITURA

I danni sono quelli da me checkati.

Se io adesso volessi dargli una variabile a questo risultato come faccio ? il tutto andrebbe spedito per email ed inserito in un apposito campo del DB... grazie per la pazienza...
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Allora l'ho testato ed effettivamente fa quello che vorrei.. ora ho dei problemi che vorrei risolvere con te.
Inserendo effettivamente quanto riporta la risposta php mi esce questo:

par_ant_dx - LIEVEpar_post_sx - MEDIAparafango_ant_sx - LIEVEcerchi_ant_dx - SCALFITURA

I danni sono quelli da me checkati.

Se io adesso volessi dargli una variabile a questo risultato come faccio ? il tutto andrebbe spedito per email ed inserito in un apposito campo del DB... grazie per la pazienza...

Aggiungo se non metto check :

Notice: Undefined index: controllo in C:\xampp_5.6\htdocs\sinistri\inserisci_danni2.php on line 5

Warning: Invalid argument supplied for foreach() in C:\xampp_5.6\htdocs\sinistri\inserisci_danni2.php on line 5

In teoria dovrebbe scrivermi nessun danno?
 

macus_adi

Utente Attivo
5 Dic 2017
1.026
57
48
IT/SW
Basta che modifichi lo script che genera l'output....
PHP:
unset($_POST['invia']);
$ar_inserimento=[];
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}

foreach($ar_inserimento as $items)echo $items.'<br>';
Per prima cosa devi verificare che sia presente check
PHP:
if(isset($_POST['controllo']){
//copia il codice di sopra.....
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}
}else{
$ar_inserimento[]='nessun danno';
}
foreach($ar_inserimento as $items)echo $items.'<br>';
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Basta che modifichi lo script che genera l'output....
PHP:
unset($_POST['invia']);
$ar_inserimento=[];
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}

foreach($ar_inserimento as $items)echo $items.'<br>';
Per prima cosa devi verificare che sia presente check
PHP:
if(isset($_POST['controllo']){
//copia il codice di sopra.....
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}
}else{
$ar_inserimento[]='nessun danno';
}
foreach($ar_inserimento as $items)echo $items.'<br>';

Ho capito bene:

PHP:
if(isset($_POST['controllo']){
unset($_POST['invia']);
$ar_inserimento=[];
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}

foreach($ar_inserimento as $items)echo $items.'<br>';
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}
}else{
$ar_inserimento[]='nessun danno';
}
foreach($ar_inserimento as $items)echo $items.'<br>';
 

macus_adi

Utente Attivo
5 Dic 2017
1.026
57
48
IT/SW
if(isset($_POST['invia'])){
unset(
$_POST['invia']);
Solo dopo dentro a questo if che controlla se l'utente ha effettivamente inviato i dati effettui il codice che hai scritto
if(isset($_POST['controllo']){
unset(
$_POST['invia']);
$ar_inserimento=[];
foreach(
$_POST['controllo'] as $k=>$valore){
if(isset(
$_POST['da_'.$k])){

$ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
}else{
$ar_inserimento[]='nessun danno';
}

foreach(
$ar_inserimento as $items)echo $items.'<br>';
foreach(
$_POST['controllo'] as $k=>$valore){
if(isset(
$_POST['da_'.$k])){

$ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
}else{
$ar_inserimento[]='nessun danno';
}
}else{

$ar_inserimento[]='nessun danno';
}
foreach(
$ar_inserimento as $items)echo $items.'<br>';
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Ho aggiornato secondo quanto mi hai detto, ho degli errori però.. :

PHP:
<?php
if(isset($_POST['invia'])){
unset($_POST['invia']);
if(isset($_POST['controllo'])){
unset($_POST['invia']);
$ar_inserimento=[];
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'.$k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}

foreach($ar_inserimento as $items)echo $items.'<br>';
foreach($_POST['controllo'] as $k=>$valore){
    if(isset($_POST['da_'.$k])){

   $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
    }else{
       $ar_inserimento[]='nessun danno';
}
}else{
$ar_inserimento[]='nessun danno';
}
foreach($ar_inserimento as $items)echo $items.'<br>';
}
}
   }
   ?>
Precisamente come errori mi dice:
$ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];

syntax error unexpected '.' sia su quella riga che su questa:

$ar_inserimento[]='Danni provenienti da'.$k.' Risultato :'.$_POST['da_'-.$k];

Inoltre:

}
}else{
$ar_inserimento[]='nessun danno';
}
foreach($ar_inserimento as $items)echo $items.'<br>';

Mi dice: unexpected T_else
 

macus_adi

Utente Attivo
5 Dic 2017
1.026
57
48
IT/SW
PHP:
if(isset($_POST['invia'])){
            unset($_POST['invia']);
            if(isset($_POST['controllo'])){
                unset($_POST['invia']);
                $ar_inserimento=[];
                foreach($_POST['controllo'] as $k=>$valore){
                    if(isset($_POST['da_'.$k])){

                        $ar_inserimento[]='Danni provenienti da'.$k.' Risultato :'.$_POST['da_'-.$k];
                    }else{
                        $ar_inserimento[]='nessun danno';
                    }

                    foreach($ar_inserimento as $items)echo $items.'<br>';
                    foreach($_POST['controllo'] as $k=>$valore){
                        if(isset($_POST['da_'.$k])){

                            $ar_inserimento[]='Danni provenienti da'. $k.' Risultato :'.$_POST['da_'-.$k];
                        }else{
                            $ar_inserimento[]='nessun danno';
                        }
                    }
                    
                }
            }else{
                $ar_inserimento[]='nessun danno';
            }
            foreach($ar_inserimento as $items)echo $items.'<br>';
        }
Vedi ora....
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
sulle righe
$ar_inserimento[]='Danni provenienti da'.$k.' Risultato :'.$_POST['da_'-.$k];

Stesso errore