provinciadicremona / AVCP-Xml

Generatore di dataset XML per l'ANAC - art. 1 comma 32 L. 190/2012
GNU General Public License v3.0
12 stars 8 forks source link

php 7 e crea_xml_avcp_query #6

Closed frenier closed 6 years ago

frenier commented 6 years ago

Ciao, utilizzo ancora la versione 0.7.1 e l'ho installata su una macchina aggiornata Ubuntu con PHP 7. Ho provveduto a modificare il codice della versione 0.7.1 del file in oggetto utilizzando un fix per l'errore che si presenta con l'istruzione fetch_assoc()) (in caso di nessun partecipante o assegnatario restituisce un errore perchè viene passato un valore booleano "false" - non ho inserito il fix sul fetch dei lotti perchè mi pare inutile ma andrebbe messo anche li) riporto il file modificato e le sezioni sono commentate con //fix `<?php /**

if (isset($_GET['anno'])) { $anno_rif = $_GET['anno']; } else { $anno_rif = '2012'; } $dataPubb = $anno_rif + 1 . "-01-31"; header("Content-Disposition: attachment; filename=avcpdataset" . $anno_rif . ".xml"); header("Content-Type: application/force-download"); header("content-type: application/xml"); echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>' . PHP_EOL; require_once ('./app/config.php'); $date_agg = date("Y-m-d"); $date_agg_full = date("Y-m-d H:i:s"); $query_lotti = "SELECT * FROM avcp_lotto WHERE anno = '" . $anno_rif . "' AND sceltaContraente != '00-DA DEFINIRE'"; $result_lotti = $db->query($query_lotti); $number_lotti = $result_lotti->num_rows;

echo '

Pubblicazione 1 legge 190 Pubblicazione 1 legge 190 anno 1 rif. 2010' . ' aggiornamento del ' . $date_agg_full . ' ' . $dataPubb . ' ' . htmlspecialchars(stripslashes(ENTE_PROPONENTE)) . ' ' . $date_agg . ' ' . $anno_rif . ''; if (URL_XML_FILE_ANNUALE == 'NO') { echo '' . URL_XML_FILE . '' . PHP_EOL; } else { echo '' . URL_XML_FILE_ANNUALE . $anno_rif . '.xml' . PHP_EOL; } echo ' ' . LICENZA . ' ' . PHP_EOL; echo '' . PHP_EOL; while ($lotto = $result_lotti->fetch_assoc()) { foreach ($lotto as $key => $value) { $$key = stripslashes($value); } $XML_FILE .= "\n"; $XML_FILE .= "" . $cig . "\n"; $XML_FILE .= "\n"; $XML_FILE .= "" . $codiceFiscaleProp . "\n"; $XML_FILE .= "" . htmlspecialchars(stripslashes($denominazione)) . "\n"; $XML_FILE .= "\n"; $XML_FILE .= "" . htmlspecialchars($oggetto) . "\n"; if ($sceltaContraente == '06-PROCEDURA NEGOZIATA SENZA PREVIA INDIZIONE DI GARA ART. 221 D.LGS. 163/2006') { $sceltaContraente = '06-PROCEDURA NEGOZIATA SENZA PREVIA INDIZIONE DI GARA ART. 221 D.LGS. 163/2006'; } $XML_FILE .= "" . $sceltaContraente . "\n"; // ### PARTECIPANTI ###### $XML_FILE .= "\n"; $raggruppamento_old = 1; $raggruppamento_start = 0; $XML_RAGG = "\n"; $XML_PART = null; $query_partecipanti = "SELECT * FROM avcp_xml_ditte WHERE id = '" . $id . "' AND funzione = '01-PARTECIPANTE'"; $result_partecipanti = $db->query($query_partecipanti); $number_partecipanti = $result_partecipanti->num_rows; $flag_first_ragg = true; //fix fetch 1 if ($result_partecipanti) { while ($partecipante = $result_partecipanti->fetch_assoc()) { foreach ($partecipante as $key => $value) { $$key = stripslashes($value); } if ($raggruppamento == 0) { $XML_PART .= "\n"; if ($estero == 0) { $XML_PART .= "" . $codiceFiscale . "\n"; } else { $XML_PART .= "" . $codiceFiscale . ""; } $XML_PART .= "" . htmlspecialchars($ragioneSociale) . "\n"; $XML_PART .= "\n"; } else { if ($flag_first_ragg == true) { $raggruppamento_old = $raggruppamento; $flag_first_ragg = false; } if ($raggruppamento != $raggruppamento_old) { $XML_RAGG .= "\n"; $XML_RAGG .= "\n"; } $XML_RAGG .= "\n"; if ($estero == 0) { $XML_RAGG .= "" . $codiceFiscale . "\n"; } else { $XML_RAGG .= "" . $codiceFiscale . ""; } $XML_RAGG .= "" . htmlspecialchars($ragioneSociale) . "\n"; $XML_RAGG .= "" . $ruolo . ""; $XML_RAGG .= "\n"; $raggruppamento_old = $raggruppamento; $raggruppamento_start = 1; } } // fine while partecipanti } //end fix 1 // fix 1 $result_partecipanti->free(); // pulisco partecipanti if ($raggruppamento_start == 1) { $XML_RAGG .= "\n"; $XML_FILE .= $XML_RAGG; } $XML_FILE .= $XML_PART; $XML_FILE .= "\n"; // ### AGGIUDICATARI ###### $XML_FILE .= "\n"; $raggruppamento_old = 1; $raggruppamento_start = 0; // $XML_RAGG ="\n"; $XML_RAGG = null; $XML_AGG = null; $query_aggiudicatari = 'SELECT * FROM avcp_xml_ditte WHERE id = "' . $id . '" AND funzione = "02-AGGIUDICATARIO" ORDER BY raggruppamento DESC'; $result_aggiudicatari = $db->query($query_aggiudicatari); $number_aggiudicatari = $result_aggiudicatari->num_rows; //fix2 if ($result_aggiudicatari) { while ($aggiudicatario = $result_aggiudicatari->fetch_assoc()) { foreach ($aggiudicatario as $key => $value) { $$key = stripslashes($value); } if ($raggruppamento == 0) { $XML_AGG .= "\n"; if ($estero == 0) { $XML_AGG .= "" . $codiceFiscale . "\n"; } else { $XML_AGG .= "" . $codiceFiscale . ""; } $XML_AGG .= "" . htmlspecialchars($ragioneSociale) . "\n"; $XML_AGG .= "\n"; } else { if ($raggruppamento_start == 0) { $XML_RAGG .= "\n"; } if ($raggruppamento != $raggruppamento_old && $raggruppamento_start == 1) { $XML_RAGG .= "\n"; $XML_RAGG .= "\n"; } $XML_RAGG .= "\n"; if ($estero == 0) { $XML_RAGG .= "" . $codiceFiscale . "\n"; } else { $XML_RAGG .= "" . $codiceFiscale . ""; } $XML_RAGG .= "" . htmlspecialchars($ragioneSociale) . "\n"; $XML_RAGG .= "" . $ruolo . ""; $XML_RAGG .= "\n"; $raggruppamento_old = $raggruppamento; $raggruppamento_start = 1; } } // fine while aggiudicatari } //end fix 2 //fix 2 $result_aggiudicatari->free(); // pulisco aggiudicatari if ($raggruppamento_start == 1) { $XML_RAGG .= "\n"; } $XML_FILE .= $XML_RAGG . $XML_AGG; $XML_FILE .= "\n"; // ####### importi e tempi ##### $XML_FILE .= "" . $importoAggiudicazione . ""; $XML_FILE .= ""; if ($dataInizio != '0000-00-00') { $XML_FILE .= "" . $dataInizio . ""; } if ($dataUltimazione != '0000-00-00') { $XML_FILE .= "" . $dataUltimazione . ""; } $XML_FILE .= ""; $XML_FILE .= "" . $importoSommeLiquidate . ""; $XML_FILE .= "\n"; } // fine while lotti $result_lotti->free(); // pulisco lotti echo $XML_FILE; echo '' . PHP_EOL; echo ''; `
frenier commented 6 years ago

Prima di prendere in carico questa problematica verifico con la nuova versione e vi do' ragguagli. Il fix nell avecchia versione evita l'errore ma non trasferisce i dati dei partecipanti e degli aggiudicatari.

frenier commented 6 years ago

Ciao, confermo l'errore anche nell anuova procedura il fix non gira e sembra che l'errore sia attribuibile all'istruzione: fetch_assoc() inserita in un ciclo (restituisce un boolean). il problema ovviamente si presenta su tutte le funzioni che richiamano il fetch_assoc Call to a member function fetch_assoc() on boolean in /var/www/html/xxavcp/app/xml/testa_xml_avcp_query.php:92 Stack trace: #0 /var/www/html/xxavcp/app/resume.php(33): require_once() #1 {main} thrown in /var/www/html/xxavcp/app/xml/testa_xml_avcp_query.php on line 92

ClaudioRoncaglio commented 6 years ago

@frenier forse è più semplice controllare il numero dei partecipanti/aggiudicatari prima di entrare nel ciclo. Da così:

$result_partecipanti = $db->query($query_partecipanti);
$number_partecipanti = $result_partecipanti->num_rows;
$flag_first_ragg = true;
//fix fetch 1
if ($result_partecipanti) {

a così:

$result_partecipanti = $db->query($query_partecipanti);
$number_partecipanti = $result_partecipanti->num_rows;
$flag_first_ragg = true;
//fix fetch 1
if ($number_partecipanti > 0) {
frenier commented 6 years ago

Ciao, chiudi pure la issue: l'errore stà nei permessi dell'accesso alla vista avcp_xml_ditte: Ho ripristinato il db e la vista, diversamente dalle altre (e non so spiegare il perchè) si è portata dietro un user definer sbagliato : avcp@% anzichè avcp@localhost Modificato l'user definer tutto ok. quindi non serve alcuina modifica.

ClaudioRoncaglio commented 6 years ago

Ok, meglio così!