[PHP] Check - Select e recupero variabili

Emix

Utente Attivo
15 Feb 2010
596
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.343
91
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
596
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.343
91
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
596
0
16
ok faccio dei test :) se ho necessita o errori ti scrivo. Grazie
 

Emix

Utente Attivo
15 Feb 2010
596
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.343
91
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
596
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
596
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
596
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
596
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.343
91
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
596
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.343
91
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
596
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.343
91
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
596
0
16
sulle righe
$ar_inserimento[]='Danni provenienti da'.$k.' Risultato :'.$_POST['da_'-.$k];

Stesso errore
 
Discussioni simili
Autore Titolo Forum Risposte Data
L [PHP] Check Box_Privacy PHP 5
E [PHP] Check tra 2 campi della stessa tabella PHP 14
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10

Discussioni simili