Voir la requête SQL lors du charge de la page PHP

Eléphanteau du PHP | 16 Messages

30 avr. 2024, 16:55

Bonjour,

Je récupère un outil développé en php qui fait des imports et des exports en se connectant a des tables.
J'ai un message de traitement impossible d'une personne et cela me dit qu'il me manque la nationalité alors que lorsque je regarde la table en question il y a bien la nationalité.
Etant donné que ce n'est pas moi qui ai fait le développement (je n'y connais pas grand chose en php) et que la personne n'est plus là, j'aurai aimé savoir s'il est possible de voir lorsqu'on charge la page php quelle requête sql est faite.

Voilà sinon le code de la page :

Code : Tout sélectionner

<?php if (!empty($argv[1]) && $argv[1] === 'planif') { $url = 'passerelle_winlassie'; require_once dirname(__FILE__) . '/../../config.php'; require_once dirname(__FILE__) . '/../../model/common/Utils.php'; \Common\Utils::initAutoloader(); try { $d = new DateTime('now'); $path = dirname(__FILE__) . '/../../log/' . $d->format('Ymd_His') . '_majEmployes.html'; $file = fopen($path, 'c+b'); fwrite($file, ' <html lang="fr"> <head> <title>Log du ' . $d->format('d/m/Y H:i:s') . ' : mise à jour des employés</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="' . URL_APPLI . '/css/img/favicon.ico" type="image/x-icon"/> <!--Ajout de bootstrap css--> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <!--Ajout de mon css--> <link rel="stylesheet" href="' . URL_APPLI . '/css/style.css"> </head> <body class="p-3"> <h1>Log du ' . $d->format('d/m/Y H:i:s') . ' : mise à jour automatique des employés</h1>'); $empManager = new Employe\EmployeManager(new \Common\DAO(DB_I7)); $tabMaj = $empManager->majI7($file); if ($tabMaj['hasSave'] || $tabMaj['hasEdit'] || $tabMaj['hasError']) { fwrite($file, ' </body> </html>'); fclose($file); //s'il y a eu une erreur : on envoie un mail pour informer if ($tabMaj['hasError']) { $mail = new Common\Mail('Passerelle Winlassie - Import employé', 'Une erreur est survenue pour au moins un employé lors de la mise à jour en automatique. Consulter le fichier de log pour plus de détail.', DEST_MAIL, ['[email protected]' => 'Passerelle Winlassie']); $mail->addFile(['name' => $d->format('Ymd_His') . '_majEmployes.html', 'tmp_name' => $path, 'type' => 'application/html', 'size' => filesize($path)]); $mail->sendMail(); } } else { fclose($file); unlink($path); } } catch (\Admin\AdminException | Exception | Swift_SwiftExceptio $ex) { } } else { $safeGet = filter_input_array(INPUT_GET); if (!empty($safeGet['redirect'])) { //Affichage de la page de chargement require_once(dirname(__FILE__) . '/../../config.php'); ?> <html lang="fr"> <head> <title><?= NOMAPPLI ?></title> <meta charset="utf-8"> <meta http-equiv="refresh" content="1; URL=<?= URL_APPLI ?>/controller/import/majEmploye.php"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="<?= URL_APPLI ?>/css/img/logo.png" type="image/x-icon"/> <!--Ajout de bootstrap css--> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <link rel="stylesheet" href="<?= URL_APPLI ?>/css/style.css"> </head> <body> <div class="d-flex justify-content-center mt-5" id="divWait"> <div class="spinner-border text-primary" style="width: 3rem; height: 3rem;" role="status" > <span class="visually-hidden">Traitement en cours...</span> </div> </div> </body> </html> <?php } else { include( dirname(__FILE__) . '/../../view/template/header.php'); $d = new DateTime('now'); $path = dirname(__FILE__) . '/../../log/' . $d->format('Ymd_His') . '_majEmployes.html'; $file = fopen($path, 'c+b'); fwrite($file, ' <html lang="fr"> <head> <title>Log du ' . $d->format('d/m/Y H:i:s') . ' : mise à jour des employés</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="' . URL_APPLI . '/css/img/favicon.ico" type="image/x-icon"/> <!--Ajout de bootstrap css--> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <!--Ajout de mon css--> <link rel="stylesheet" href="' . URL_APPLI . '/css/style.css"> </head> <body class="p-3"> <h1>Log du ' . $d->format('d/m/Y H:i:s') . ' : mise à jour des employés</h1>'); $empManager = new Employe\EmployeManager(new \Common\DAO(DB_I7)); $tabMaj = $empManager->majI7($file); if ($tabMaj['hasSave'] || $tabMaj['hasEdit'] || $tabMaj['hasError']) { fwrite($file, ' </body> </html>'); fclose($file); echo 'Fin l\'import, voir le <a href="' . URL_APPLI . '/log/' . $d->format('Ymd_His') . '_majEmployes.html" target="_blank" >fichier</a> pour le compte-rendu'; } else { fclose($file); unlink($path); echo 'Aucune modification détectée'; } include( dirname(__FILE__) . '/../../view/template/footer.php'); } }
Merci d'avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9699 Messages

01 mai 2024, 00:25

Avec le code que tu nous donne, on ne voit pas de requête SQL.
Peut être que tu auras + de chances en cherchant dans les fichiers mis en require_once()...

Essaye notamment de trouver ce que fait la méthode majI7()
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 16 Messages

02 mai 2024, 08:50

Bonjour,

Quand je recherche require_once() j'ai 650 occurrences trouvées...
Pour majI7 j'en ai 15 dont ça :

Code : Tout sélectionner

public function majI7($file) { $dao = new \Common\DAO(DB_CONFIG); $natMan = new NationalityManager($dao); $cpyMan = new \Admin\Company\CompanyManager($dao); $tabCpy = $cpyMan->getAll(); $tabNat = []; try { foreach ($tabCpy as $cpy) { if (!empty($cpy->getI7db())) { $tabNat = array_merge($tabNat, $this->getAllI7($cpy)); } } $save = '<h3 class="text-info">Enregistrement des nationalités suivantes réalisé</h3><ul>'; $hasSave = FALSE; $edit = '<h3 class="text-info">Mise à jour des nationalités suivantes réalisée</h3><ul>'; $hasEdit = FALSE; foreach ($tabNat as $nat) { $natTemp = $natMan->getByCode(['i7' => $nat->getI7(), 'company' => $nat->getCompany()->getId()]); if ($natTemp === NULL) { $hasSave = TRUE; $natMan->add($nat); $save .= '<li>Société : ' . $nat->getCompany()->getName() . ' : ' . $nat->getI7() . ' ' . $nat->getName() . '</li>'; } else if ($natTemp->getName() !== $nat->getName()) { $hasEdit = TRUE; $nat->setId($natTemp->getId()); $natMan->edit($nat); $edit .= '<li>Société : ' . $nat->getCompany()->getName() . ' : ' . $nat->getI7() . ' ' . $nat->getName() . '</li>'; } } $txt = ''; $txt .= $hasSave ? $save . '</ul>' : ''; $txt .= $hasEdit ? $edit . '</ul>' : ''; echo '<h2 class="text-primary">Mise à jour des nationalités</h2>' . $txt; fwrite($file, $txt); return $hasSave || $hasEdit; } catch (\Admin\AdminException $ex) { echo 'Erreur lors de la récupération des données I7 (NationalityManager) : ' . $ex->getMessage(); } }
et ça :

Code : Tout sélectionner

public function majI7($file) { $dao = new \Common\DAO(DB_CONFIG); $cpyMan = new \Admin\Company\CompanyManager($dao); $tabCpy = $cpyMan->getAll(); $tabEmp = []; try { foreach ($tabCpy as $cpy) { if (!empty($cpy->getI7db())) { $tabEmp = array_merge($tabEmp, $this->getAllI7($cpy->getI7db())); } } $save = '<h3 class="text-info">Enregistrement des employés suivants réalisé</h3><ul>'; $edit = '<h3 class="text-info">Mise à jour des employés suivants réalisée</h3><ul>'; $err = '<h3 class="text-info">Erreur rencontrée</h3><ul>'; $hasSave = FALSE; $hasEdit = FALSE; $hasError = FALSE; foreach ($tabEmp as $empI7) { if (Employe::verifInfoObligI7($empI7)) { try { //initialisation des valeurs pour les clés étrangères $tabVal = Employe::initCleEtrang($empI7, $dao); if (empty($tabVal['nat'])) { $err .= '<li>Traitement impossible pour l\'employé ' . utf8_encode($empI7['MatriculeSalarie']) . ' de la base ' . $empI7['i7db'] . ' : La nationalité n\'a pas pu être déterminée (code : ' . $empI7['CodeNationalite'] . ')</li>'; $hasError = TRUE; } else if (empty($tabVal['cty'])) { $err .= '<li>Traitement impossible pour l\'employé ' . utf8_encode($empI7['MatriculeSalarie']) . ' de la base ' . $empI7['i7db'] . ' : Le pays n\'a pas pu être déterminé (code : ' . $empI7['CodePays'] . ')</li>'; $hasError = TRUE; } else { //mise en forme des données $tabVal = array_merge($tabVal, Employe::initData($empI7)); //recherche de l'employé à partir du PID $empManPass = new EmployeManager($dao); $emp = $empManPass->getByPid(['pid' => $empI7['SA_CompteurNumero'], 'i7db' => $empI7['i7db']]); $checksum = Employe::initChecksum($empI7); if (!empty($emp)) { //on a retrouvé un employé, il faut voir s'il est nécessaire de le mettre à jour chez nous if ($emp->getChecksum() != $checksum) { //il faut le mettre à jour car cheksum différent $empManPass->edit(['id' => $emp->getId(), 'matricule' => $tabVal['mat'], 'lastname' => $tabVal['lastName'], 'firstname' => $tabVal['firstName'], 'birthname' => $tabVal['birthname'], 'sex' => $tabVal['sex'], 'birthdate' => $tabVal['birthdate'], 'birthcity' => utf8_encode(trim($empI7['CommuneNaissance'])), 'birthCountry' => $tabVal['birthCountry']->getId(), 'ssnum' => $empI7['NoSecu'], 'sskey' => $empI7['Cle'], 'adr' => utf8_encode(trim($empI7['Rue1'] . ' ' . $empI7['Rue2'])), 'city' => utf8_encode(trim($empI7['Commune'])), 'pc' => $tabVal['pc'], 'phone' => $tabVal['phone'], 'mobile' => $tabVal['mobile'], 'datein' => \DateTime::createFromFormat('Y-m-d H:i:s.u', $empI7['DateAnciennete'])->format('Y-m-d'), 'dateout' => $tabVal['dateout'], 'datepos' => \DateTime::createFromFormat('Y-m-d H:i:s.u', $empI7['DateDebutContrat'])->format('Y-m-d'), 'whyout' => $tabVal['whyout'], 'position' => utf8_encode(trim($empI7['EmploiOccupe'])), 'contract' => trim($empI7['CodeNatureDeContrat']), 'pst' => $tabVal['pst']->getId(), 'cst' => $tabVal['cst']->getId(), 'csp' => $tabVal['csp']->getId(), 'country' => $tabVal['cty']->getId(), 'mail' => $tabVal['mail'], 'nationality' => $tabVal['nat']->getId(), 'birthdep' => utf8_encode(trim($empI7['DeptNaissance'])), 'checksum' => $checksum, 'company' => $tabVal['cpy']->getId(), 'anal' => trim($empI7['Service'])]); $edit .= '<li>' . $emp->getMatricule() . ' ' . $emp->getLastname() . ' ' . $emp->getFirstname() . '</li>'; $hasEdit = TRUE; } } else { //l'emloyé est inconnu : il faut le créer chez nous $empManPass->add(['matricule' => $tabVal['mat'], 'lastname' => $tabVal['lastName'], 'firstname' => $tabVal['firstName'], 'birthname' => $tabVal['birthname'], 'sex' => $tabVal['sex'], 'birthdate' => \DateTime::createFromFormat('Y-m-d H:i:s.u', $empI7['DateNaissance'])->format('Y-m-d'), 'birthcity' => utf8_encode(trim($empI7['CommuneNaissance'])), 'birthCountry' => $tabVal['birthCountry']->getId(), 'ssnum' => $empI7['NoSecu'], 'sskey' => $empI7['Cle'], 'adr' => utf8_encode(trim($empI7['Rue1'] . ' ' . $empI7['Rue2'])), 'city' => utf8_encode(trim($empI7['Commune'])), 'pc' => $tabVal['pc'], 'phone' => $tabVal['phone'], 'mobile' => $tabVal['mobile'], 'datein' => \DateTime::createFromFormat('Y-m-d H:i:s.u', $empI7['DateAnciennete'])->format('Y-m-d'), 'dateout' => $tabVal['dateout'], 'datepos' => \DateTime::createFromFormat('Y-m-d H:i:s.u', $empI7['DateDebutContrat'])->format('Y-m-d'), 'whyout' => $tabVal['whyout'], 'position' => utf8_encode(trim($empI7['EmploiOccupe'])), 'contract' => trim($empI7['CodeNatureDeContrat']), 'pst' => $tabVal['pst']->getId(), 'cst' => $tabVal['cst']->getId(), 'csp' => $tabVal['csp']->getId(), 'country' => $tabVal['cty']->getId(), 'mail' => $tabVal['mail'], 'nationality' => $tabVal['nat']->getId(), 'birthdep' => utf8_encode(trim($empI7['DeptNaissance'])), 'pid' => trim($empI7['SA_CompteurNumero']), 'checksum' => $checksum, 'company' => $tabVal['cpy']->getId(), 'anal' => trim($empI7['Service'])]); $save .= '<li>' . $tabVal['mat'] . ' ' . $tabVal['lastName'] . ' ' . $tabVal['firstName'] . '</li>'; $hasSave = TRUE; } } } catch (\Admin\AdminException $ex) { $err .= '<li>Traitement impossible pour l\'employé ' . utf8_encode($empI7['MatriculeSalarie']) . ' de la base ' . $empI7['i7db'] . ' : ' . $ex->getMessage() . '</li>'; $hasError = TRUE; } } else { $err .= '<li>Traitement impossible pour l\'employé ' . utf8_encode($empI7['MatriculeSalarie']) . ' de la base ' . $empI7['i7db'] . ' : une information oligatoire est manquante (<a href="' . URL_APPLI . '/log/addFile/oblig_employe.php" target="_blank" >Cliquer ici</a> pour voir la liste des champs obligatoires). Données transmises : <ul>'; foreach ($empI7 as $key => $value) { $err .= '<li>' . $key . '=>' . utf8_encode($value) . '</li>'; } $hasError = TRUE; $err .= '</ul></li>'; } } $txt = ''; $txt .= $hasSave ? $save . '</ul>' : ''; $txt .= $hasEdit ? $edit . '</ul>' : ''; $txt .= $hasError ? $err . '</ul>' : ''; echo '<h2 class="text-primary">Mise à jour des employés</h2>' . (empty($txt) ? 'Aucune modification' : $txt); fwrite($file, $txt); return ['hasSave' => $hasSave, 'hasEdit' => $hasEdit, 'hasError' => $hasError]; } catch (EmployeException | \Admin\AdminException $ex) { echo 'Erreur lors de la récupération des données I7 (EmployeManager) : ' . $ex->getMessage(); } } }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9699 Messages

02 mai 2024, 13:22

Malheureusement, ça va être impossible de faire le debug de cette façon.
Il faut que tu avances dans ton debugage par toi-même en essayant de comprendre le code et son fonctionnement car tout a été mis dans des fonctions et des fichiers imbriqués les uns dans les autres donc il faut avoir accès à tous le projet et suffisamment de temps pour comprendre et debuguer le problème.
Quand tout le reste a échoué, lisez le mode d'emploi...