[PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Buonasera,
ho un file denominato salva_commessa.php che recupera tante varibili traminte _POST ed esegue una query di insert, fintanto che il controllo errori php era disabilitato io non vedevo nessun NOTICE, ma adesso che sto lavorando in locale mi sono reso conto che non appena eseguo la query di insert (che comunque ha esito positivo), ricevo per ogni singola variabile un errore del tipo

Codice:
C:\xampp\htdocs\gos\page\salva_commessa.phpon line 20

Notice: Undefined index: itr3 in C:\xampp\htdocs\gos\page\salva_commessa.phpon line 41

Notice: Undefined index: itr4 in C:\xampp\htdocs\gos\page\salva_commessa.phpon line 42

Notice: Undefined index: itr5 in C:\xampp\htdocs\gos\page\salva_commessa.phpon line 43

Notice: Undefined index: itr6

ecc ecc ecc

Vi chiedo se esiste un modo, per ciclare e controllare le variabili in modo da non ottenere questo Notice.

Allego il codice

PHP:
<?php
/* RECUPERO I DATI DAL FORM INSERIMENTO COMMESSA */
if (isset($_POST)) {
$veicolo = mysqli_real_escape_string($mysqli, $_POST['veicolo']);
$targa = mysqli_real_escape_string($mysqli, $_POST['targa']);
$km = mysqli_real_escape_string($mysqli, $_POST['km']);
$telaio = mysqli_real_escape_string($mysqli, $_POST['telaio']);
$cliente = mysqli_real_escape_string($mysqli, $_POST['cliente']);
$indirizzo = mysqli_real_escape_string($mysqli, $_POST['indirizzo']);
$piva = mysqli_real_escape_string($mysqli, $_POST['piva']);
$tel = mysqli_real_escape_string($mysqli, $_POST['tel']);
$totale = mysqli_real_escape_string($mysqli, $_POST['totale']);
$n_tecnico = mysqli_real_escape_string($mysqli, $_POST['n_tecnico']);
$pagamento = mysqli_real_escape_string($mysqli, $_POST['pagamento']);
$data = mysqli_real_escape_string($mysqli, $_POST['data']);
$allegato = mysqli_real_escape_string($mysqli, $_POST['allegato']);
$allegato1 = mysqli_real_escape_string($mysqli, $_POST['allegato1']);
$allegato2 = mysqli_real_escape_string($mysqli, $_POST['allegato2']);
$allegato3 = mysqli_real_escape_string($mysqli, $_POST['allegato3']);

/* FILTRI e CONVERSIONI SULLE VARIABILI POST */
$veicolo = trim(strip_tags(strtoupper($veicolo)));
$targa = trim(strip_tags(strtoupper($targa)));
$km = trim(strip_tags(strtoupper($km)));
$telaio = trim(strip_tags(strtoupper($telaio)));
$cliente = trim(strip_tags(strtoupper($cliente)));
$indirizzo = trim(strip_tags(strtoupper($indirizzo)));
$piva = trim(strip_tags(strtoupper($piva)));
$tel = trim(strip_tags(strtoupper($tel)));
$totale = trim(strip_tags(strtoupper($totale)));
$n_tecnico = trim(strip_tags(strtoupper($n_tecnico)));
$pagamento = trim(strip_tags(strtoupper($pagamento)));
$data = trim(strip_tags(strtoupper($data)));
$allegato = trim(strip_tags(strtoupper($allegato)));
/* FINE FILTRI e CONVERSIONI SULLE VARIABILI POST */


$itr1 = mysqli_real_escape_string($mysqli, $_POST['itr1']);
$itr2 = mysqli_real_escape_string($mysqli, $_POST['itr2']);
ecc

$for1 = mysqli_real_escape_string($mysqli, $_POST['for1']);
$for2 = mysqli_real_escape_string($mysqli, $_POST['for2']);
ecc

$itr1 = trim(strip_tags(strtoupper($itr1)));
$itr2 = trim(strip_tags(strtoupper($itr2)));
ecc

$for1 = trim(strip_tags(strtoupper($for1)));
$for2 = trim(strip_tags(strtoupper($for2)));
ecc

$q1 = mysqli_real_escape_string($mysqli, $_POST['q1']);
$q2 = mysqli_real_escape_string($mysqli, $_POST['q2']);
ecc

$iu1 = mysqli_real_escape_string($mysqli, $_POST['iu1']);
$iu2 = mysqli_real_escape_string($mysqli, $_POST['iu2']);
ecc

$sc1 = mysqli_real_escape_string($mysqli, $_POST['sc1']);
$sc2 = mysqli_real_escape_string($mysqli, $_POST['sc2']);
ecc

$imp_1 = mysqli_real_escape_string($mysqli, $_POST['imp_1']);
$imp_2 = mysqli_real_escape_string($mysqli, $_POST['imp_2']);
ecc

if ($q1 == '') { $q1 = 0; }
if ($q2 == '') { $q2 = 0; }
ecc

if ($iu1 == '') { $iu1 = 0; }
if ($iu2 == '') { $iu2 = 0; }
ecc

if ($sc1 == '') { $sc1 = 0; }
if ($sc2 == '') { $sc2 = 0; }
ecc

if ($imp_1 == '') { $imp_1 = 0; }
if ($imp_2 == '') { $imp_2 = 0; }
ecc


$sq1 = "INSERT INTO commesse (veicolo,targa,km,telaio,cliente,indirizzo,piva,tel,itr1,itr2,itr3,itr4,itr5,itr6,itr7,itr8,itr9,itr10,itr11,itr12,itr13,itr14,itr15,for1,for2,for3,for4,for5,for6,for7,for8,for9,for10,for11,for12,for13,for14,for15,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,iu1,iu2,iu3,iu4,iu5,iu6,iu7,iu8,iu9,iu10,iu11,iu12,iu13,iu14,iu15,sc1,sc2,sc3,sc4,sc5,sc6,sc7,sc8,sc9,sc10,sc11,sc12,sc13,sc14,sc15,imp_1,imp_2,imp_3,imp_4,imp_5,imp_6,imp_7,imp_8,imp_9,imp_10,imp_11,imp_12,imp_13,imp_14,imp_15,totale,n_tecnico,pagamento,data,allegato) VALUES ('$veicolo','$targa','$km','$telaio','$cliente','$indirizzo','$piva','$tel','$itr1','$itr2','$itr3','$itr4','$itr5','$itr6','$itr7','$itr8','$itr9','$itr10','$itr11','$itr12','$itr13','$itr14','$itr15','$for1','$for2','$for3','$for4','$for5','$for6','$for7','$for8','$for9','$for10','$for11','$for12','$for13','$for14','$for15','$q1','$q2','$q3','$q4','$q5','$q6','$q7','$q8','$q9','$q10','$q11','$q12','$q13','$q14','$q15','$iu1','$iu2','$iu3','$iu4','$iu5','$iu6','$iu7','$iu8','$iu9','$iu10','$iu11','$iu12','$iu13','$iu14','$iu15','$sc1','$sc2','$sc3','$sc4','$sc5','$sc6','$sc7','$sc8','$sc9','$sc10','$sc11','$sc12','$sc13','$sc14','$sc15','$imp_1','$imp_2','$imp_3','$imp_4','$imp_5','$imp_6','$imp_7','$imp_8','$imp_9','$imp_10','$imp_11','$imp_12','$imp_13','$imp_14','$imp_15','$totale','$n_tecnico','$pagamento',STR_TO_DATE('$data', '%d/%m/%Y'),'$allegato')";
$rs1 = $mysqli->query($sq1);
var_dump($sq1);
exit;

if (!$rs1) {
echo "<p style='margin-top: 40px;text-align:center;'>Ho trovato un errore nell'esecuzione della <b>QUERY</b></p>";
die("Errore nella query $sq1: " . mysqli_error());
}else{
?>

Grazie o_O
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Ciao Elpirata,
sembrerebbe che questa appicazione abbia un pò troppi bug...

Hai lo stesso problema di prima... https://forum.mrw.it/threads/php-passaggio-da-webapp-online-a-webapp-offline.50296/
la $_POST['qualcosa'] non è valorizzata e da l'eccezione...
$itr1 = mysqli_real_escape_string($mysqli, $_POST['itr1']);
$itr2 = mysqli_real_escape_string($mysqli, $_POST['itr2']);
devi verificare che la variabile abbia quella chiave che stai chiedendo.
http://php.net/manual/en/language.types.array.php
poi calcola che con un ciclo sulle chiavi riusciresti a far meglio la query senza doverla impostare a mano ogni volta, utilizzando il prepared statment...
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Pian piano con lo studio e con l'analisi di tutti i bug ci arriverò, e se mai dovessi farcela saro sempre grato al vostro supporto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
a parte quello che dice macus_adi, quando si cita un errore alla riga XY conviene indicare quale è la riga in modo che sia più semplice risalire per trovare l'errore, sempio citi
Notice: Undefined index: itr3 in C:\xampp\htdocs\gos\page\salva_commessa.phpon line 41
quale è la riga 41?
tra l'altro l'unico punto in cui vedo itr3, se non erro, è nei nomi dei campi della query di insert
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Ciao Borgo Italia,
mi scuso sia con te che con Macus_adi per la poca chiarezza nell'esposizione della problematica, ad ogni modo

Notice: Undefined index: itr3 in C:\xampp\htdocs\gos\page\salva_commessa.phpon line 41

corrisponde a :

PHP:
/*Questa la riga 41*/
$itr3 = mysqli_real_escape_string($mysqli, $_POST['itr3']);
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
aha è quell'eccetera
l'unica è andare a vedere sul form se esiste un campo di input chiamato itr3, poi comunque se si tratta di tanti post conviene sempre fare l'if isset post se esiste ok, altrimenti fai qualcosaltro
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Buongiorno Borgo Italia,
il mio codice effettivamente inizia verificando se $_POST è settato

ti riporto un pezzattino del file php che recupera i dati da un form molto lungo ...

PHP:
/* RECUPERO I DATI DAL FORM INSERIMENTO COMMESSA */
if (isset($_POST)) {
$veicolo = mysqli_real_escape_string($mysqli, $_POST['veicolo']);
$targa = mysqli_real_escape_string($mysqli, $_POST['targa']);
$km = mysqli_real_escape_string($mysqli, $_POST['km']);
$telaio = mysqli_real_escape_string($mysqli, $_POST['telaio']);
$cliente = mysqli_real_escape_string($mysqli, $_POST['cliente']);
$indirizzo = mysqli_real_escape_string($mysqli, $_POST['indirizzo']);
$piva = mysqli_real_escape_string($mysqli, $_POST['piva']);
$tel = mysqli_real_escape_string($mysqli, $_POST['tel']);
$totale = mysqli_real_escape_string($mysqli, $_POST['totale']);
$n_tecnico = mysqli_real_escape_string($mysqli, $_POST['n_tecnico']);
$pagamento = mysqli_real_escape_string($mysqli, $_POST['pagamento']);
$data = mysqli_real_escape_string($mysqli, $_POST['data']);
$allegato = mysqli_real_escape_string($mysqli, $_POST['allegato']);
$allegato1 = mysqli_real_escape_string($mysqli, $_POST['allegato1']);
$allegato2 = mysqli_real_escape_string($mysqli, $_POST['allegato2']);
$allegato3 = mysqli_real_escape_string($mysqli, $_POST['allegato3']);

/* FILTRI e CONVERSIONI SULLE VARIABILI POST */
$veicolo = trim(strip_tags(strtoupper($veicolo)));
$targa = trim(strip_tags(strtoupper($targa)));
$km = trim(strip_tags(strtoupper($km)));
$telaio = trim(strip_tags(strtoupper($telaio)));
$cliente = trim(strip_tags(strtoupper($cliente)));
$indirizzo = trim(strip_tags(strtoupper($indirizzo)));
$piva = trim(strip_tags(strtoupper($piva)));
$tel = trim(strip_tags(strtoupper($tel)));
$totale = trim(strip_tags(strtoupper($totale)));
$n_tecnico = trim(strip_tags(strtoupper($n_tecnico)));
$pagamento = trim(strip_tags(strtoupper($pagamento)));
$data = trim(strip_tags(strtoupper($data)));
$allegato = trim(strip_tags(strtoupper($allegato)));
/* FINE FILTRI e CONVERSIONI SULLE VARIABILI POST */


$itr1 = mysqli_real_escape_string($mysqli, $_POST['itr1']);
$itr2 = mysqli_real_escape_string($mysqli, $_POST['itr2']);
$itr3 = mysqli_real_escape_string($mysqli, $_POST['itr3']);
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intanto hai verificato che i nomi dei campi di input del form corrisposndano a quelli nel $_POST?
poi tu verifichi che sia stato inviato un post con
if (isset($_POST)), ma questo verifica che sia stato inputato almeno un input se alcuni sono vuoti il post relativo al non inputato non risulta valorizzato e quindi errore
io farei un controllo del genere (ne metto uno ma simile anche per gli altri)
PHP:
//......
if(isset($_POST['itr1'])){$itr1 = mysqli_real_escape_string($mysqli, $_POST['itr1']);}else{$itr1 ="";}
//o usando l'operatore ternario
//....
qui tra l'altro si rende evitdente quello che dice macus_adi sull'uso degli array
a titolo di esempio (non so che tipo di campo utilizzi)
nel form
HTML:
<!-- ... -->
<input name="itr[1]" type="text">
<input name="itr[2]" type="text">
<input name="itr[3]" type="text">
<!-- ... -->
controllo php
PHP:
//...
for($k=1; $k<=3; $k++){
    if(isset($_POST['itr'][$k])){$itr[$k]=mysqli_real_escape_string($mysqli, $_POST['itr'][$k]);}else{$itr[$k]="";}
}
//....
con tre righe di codice volendo e mettendo i vari nomi adeguati controlli tutti i $_POST
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Più semplicemente, siccome se non ricordo male, quei campi non sono altro che i nomi delle colonne della tabella del database, potresti effettuare un mapping tra la tabella e i dati in input, magari generando un modello per le eccezioni...

per esempio...
PHP:
//recupero tutti i nomi e i tipi delle colonne del DB
$this->query='SELECT COLUMN_NAME,COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ?';
 if($result=$conn->query($this->query)){
                while($assoc=mysqli_fetch_assoc($result)){
                    $this->result[]=$assoc;
            }
        }

foreach($this->result as $items){

if(isset($_POST[$items['COLUMN_NAME']]){
     switch($items['COLUMN_TYPE']){
         case 'x':
            break;
          etc.....
      }
   }
}

Lo switch lo implementi per tipo e nome colonna, ed effettui i controlli che ti servono.... Con 10 linee di codice gestisci tutto!
SCUSATE, mi ero dimenticato!!!!
Naturalmente, dovresti poi memorizzare il valore elaborato in una variabile.... e costruire la query per l'insert...
Replicando il codice sopra per il recupero dei campi della tabella potresti effettuare anche l'insert costruendo in modo dinamico la query...
Ti consiglio di utilizzare un piccolissimo framework per le query "https://medoo.in/", in pratica passi alla insert un array associativo o un array di array associativo per fare le insert...
 
Ultima modifica:

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Io mi metto subito al lavoro per cercare anzitutto partendo dai vostri più che consigli ma (pappa pronta), di rendere giustizia al vostro lavoro e realizzare qualcosa di valido, per completezza riporto anche la parte di codice html

HTML:
<input type="text" name="itr1" id="itr1" class="t1" required="required" size="30" placeholder="Max 49 caratteri" maxlength="49" >
<input type="text" name="for1" id="for1" class="t1" size="10">
<input type="text" name="q1" required="required" class="t2 somma" onKeyUp="SommaRiga(1)" id="q1" size="3" value="0.0" placeholder="0">
<input type="text" name="iu1" class="t2 somma" onKeyUp="SommaRiga(1)" onBlur="Format(1)" id="iu1" size="6" value="0.0" placeholder="0.00">
<input type="text" name="sc1" class="t2 somma" onKeyUp="Virgola(1)" id="sc1" size="8" value="0.0" placeholder="sconto">
<input type="text" name="imp_1" id="imp_1" class="t2 somma" size="8" value="0.0" placeholder="0.00" readonly>
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Per completezza dovrebbe uscire una cosa del genere utilizzando Medoo...
PHP:
if(isset($_POST)){

   $campi_nome_tipo='SELECT COLUMN_NAME,COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ?';

   $conn=new Medoo([
      // required
      'database_type' => 'mysql',
      'database_name' => 'NOME_DATABASE',
      'server' => 'HOST',
      'username' => 'USERNAME',
      'password' => 'PASSWORD']);

   //ottieni tutti i campi dentro la variabile data
   $data = $conn->query($campi_nome_tipo)->fetchAll();
   //converto l'array chiave valore
   $my_new_db_dati=[];
   foreach ($data as $items){
      $my_new_db_dati[$items['COLUMN_NAME']]=$items['COLUMN_TYPE'];
   }
   $data_insert=[];
   foreach ($my_new_db_dati as $chiave=>$valore){
      if(isset($_POST[$chiave])){
         if(strstr($valore,'int')){
            //Questo deve essere un valore intero prende INT-BIGINT-SMALLINT-TINYINT etc...
            //faccio qualcosa
            $data_insert[$chiave]=funzione_che_fa_qualcosa($_POST[$chiave]);
         }
         if(strstr($valore,'char') || strstr($valore,'text')){

            //Questo deve essere un valore testo
            //faccio qualcosa
            $data_insert[$chiave]=funzione_che_fa_qualcosa($_POST[$chiave]);
         }
      }
   }
   $conn->insert('NOME_DELLA_TABELLA',$data_insert);
}
 
Discussioni simili
Autore Titolo Forum Risposte Data
C [RISOLTO][PHP] Errore di sintassi PHP 8
A [RISOLTO]Errore caricamento file php PHP 21
C [RISOLTO]Inserimento variabile php in input html PHP 20
moustache [RISOLTO] SQL PHP IIS PHP 8
L update tabelle in php mysql [risolto] PHP 6
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15
Zea [PHP] RISOLTO - creare link con il risultato dell'interrogazione db PHP 1
A [PHP] [RISOLTO]Compilazione campi form da record db PHP 3
A [PHP] [RISOLTO] Modifica record db da form PHP 11
G [PHP][RISOLTO] Include/Require non funzionante PHP 9
C [PHP] RISOLTO - Eliminare elementi duplicati da array multidimensionale PHP 1
G [RISOLTO][PHP] Call to a member function num_rows() on a non-object PHP 9
U [PHP - RISOLTO] Tabella dinamica: colonne selezionate da checkbox PHP 40
CristianB72 [RISOLTO] [PHP] Istruzione "if" non funziona PHP 6
fabryx [PHP] RISOLTO: Download file da web e trasferimento su server PHP 2
fabryx [PHP]RISOLTO: Parsing xml nodi con caratteri speciali PHP 1
CristianB72 [RISOLTO][PHP] preg_match di un array PHP 7
G [RISOLTO][PHP] Estrapolare dati da Tabella PHP 11
coccobil [PHP] RISOLTO -Recupare valore data che soddisfa certi requisiti da array PHP 3
fabryx [PHP]RISOLTO: Trasformare righe in colonne assegnando singole variabili PHP 10
fabryx [PHP]RISOLTO: eliminazione riga con singolo valore duplicato in array PHP 19
elpirata [RISOLTO]Stampare giorno della settimana in tabella php PHP 6
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
elpirata [Risolto] Gestione Prenotazioni script php PHP 25
K [risolto] passaggio variabile a pagina php con ajax Ajax 6
J [risolto] Trasformare la seguente classe PHP PHP 2
E [risolto] win 8.1 + IE11 le sessioni PHP non fuonzionano correttamente PHP 7
N [RISOLTO] Mostrare a video le checkbox selezionate con PHP e MySQL PHP 4
otto9due [risolto] Problema sessioni php e login PHP 5
G [risolto] Creazione file excel con PHP PHP 3
S [risolto] Aiuto: ciclo php ( for / while). popolare select dinamicamente da array id. PHP 9
Alessandro Le Mura [risolto] PHP problema memorizzazione array PHP 4

Discussioni simili