Newsgroup: it.comp.www.php
Titolo: interruzione script a causa di una variabile non definita

Buongiorno.
Ero convinto che anche la segnalazione che una variabile non è definita, 
fosse sufficiente per interrompere l'esecuzione di uno script PHP.
A quanto pare non è così, perchè volutamente ho inserito un errore per 
testare commit e rollback di una transazione.
La function che contiene l'errore è la seguente:
*******************************************
function ImmRigaRMA($numerorma, $numerorg, $datiriga, $verma) {
   $verma[0] = true;
  # Assume l'ultimo numero di riga della RMA
  $progriga = 0;
  $query  = "select max(NrRiga) as nrriga from rmarighe ";
  $query .= "where numerorma = '".mysql_real_escape_string($numerorma)."'" ;
   $result = mysql_query($query) or die("Impossibile eseguire la 
selezione.". mysql_error());
   $righelette = mysql_num_rows($result);
  if($righelette > 0){
     while($riga = mysql_fetch_array($result)) {
           $progriga = $riga["nrriga"];
        break;
    }
  }
  $progriga = $progriga + 1;
  # Aggiunge la nuova riga
  $prodotto     = $datiriga[2];
  $nrseriale    = $datiriga[3];
  $quantita     = $datiriga[4];
  $defetto      = $datiriga[5];
**** la variabile precedente dovrebbe essere in realtà $difetto
  $nrdataddtacq = $datiriga[6];
  $query  = " insert into rmarighe (numerorma, nrriga, codprodotto, 
nrseriale, quantita, difetto, nrdataddtacq) ";
  $query .= " values (";
  $query .= "  '".mysql_real_escape_string($numerorma)."'";
  $query .= ", '".mysql_real_escape_string($progriga)."'";
  $query .= ", '".mysql_real_escape_string($prodotto)."'";
  $query .= ", '".mysql_real_escape_string($nrseriale)."'";
  $query .= ", '".mysql_real_escape_string($quantita)."'";
  $query .= ", '".mysql_real_escape_string($difetto)."'";
****   $difetto è la variabile inesistente
****   e in effetti durante l'esecuzione ricevo la seguente segnalazione
****
****   Notice: Undefined variable: difetto in 
C:\www\rma\trasformainrmamain.php on line 476 ,
****
****   La cosa divertente è che la query funziona,
****   mentre mi aspettavo di ricevere la segnalazione specificata in "die".
****   Invece la riga viene accodata senza che venga valorizzato il campo 
"difetto"
****   (Nella tabella "rmarighe" è previsto che il campo "difetto" possa 
contenere valori nulli)
****
  $query .= ", '".mysql_real_escape_string($nrdataddtacq)."'";
  $query .= ")";
  $result = mysql_query($query) or die("Impossibile eseguire 
l'accodamento.". mysql_error());
   $righeelab = mysql_affected_rows();
  if($righeelab > 0){
    $verma[0] = true;
    #Aggiorna la riga della richiesta
    if($verma[0] == true){
       $verma = array_fill(1, 10, "");
      $verma = AggRigaRich($numerorma, $progriga, $numerorg, $datiriga, 
$verma);
    }
  }else{
       $verma[0] = false;
      $verma[3] = "Impossibile creare la RMA.";
  }
  return $verma;
}
**********************************************
Perchè non s'interrompe l'esecuzione dello script?
Grazie
Ciao
Eugenio

 testare commit e rollback di una transazione.
Nella maggior parte delle config di default, PHP non si interrompe per 
variabili non definite, ma le considera vuote.
Modifica il php.ini per avere
error_reporting = E_ALL | E_STRICT
E vedi come si comporta.
Bye.

Ok, basta saperlo.
Grazie.
:-)