Fonctionnalités appli non fonctionnelles php

Eléphanteau du PHP | 10 Messages

23 nov. 2022, 17:08

Bonjour,

Je suis alternant développeur en BTS SIO SLAM 2e année et suis en charge des applications utilisées sur l'intranet.
Je rencontre un problème avec une application qui permet aux utilisateurs d'effectuer des demandes de couchages suivants des dates données ainsi que des demandes diverses concernant des changements d'horaires ou autre. L'application a été développé par un précédent alternant limitant la documentation technique.
Les infos utilisateurs sont stockées dans une base de donnée et les applis sont hébergés un serveur Ubuntu 20.04, apache2 noyau linux 5.4.

J'ai une page qui regroupe (liste) tous les utilisateurs.
Il y a 3 niveaux dans l'appli :
- ADC (user lambda)
- GM (peut gérer les ADC faisant partie de son affectation, un ADMIN avec moins de portée)
- ADMIN(gère tous les users tant dans leurs infos, leurs affectation, suppression etc ...)
Sur cette même page se trouve un bouton menant à un formulaire permettant à l'ADMIN et GM d'ajouter des utilisateurs selon plusieurs critères (cp ,nom, prenom, affectation, cp_dpx et autre). //cp_dpx = cp_GM ou ADMIN en charge de cet agent.
Lorsque le formulaire est validé un mdp est généré.
Il m'est simplement impossible d'ajouter un utilisateur.

Code : Tout sélectionner

case 'ajouter': // Si est le formulaire d'ajout est envoyé if (isset($_POST['form_submit'])) { //Instanciation d'un objet de la classe Utilisateur $nouvel_utilisateur = new Utilisateur(); // On génère le mot de passe $mot_de_passe = genererMDP(8); //Renseignement de certaines propriétés list($_POST['mot_de_passe'], $_POST['notification_dpx']) = array(sha1($mot_de_passe), 0); //On sérialise l'objet à partir du tableau _POST $nouvel_utilisateur->serialise($_POST); //On ajoute l'utilisateur $nouvel_utilisateur->ajouter(); $_SESSION['SHOW_MESSAGE'] = array('type' => 'success', 'message' => 'L\'utilisateur à été ajouté avec succès. (mdp = '.$mot_de_passe.').');
Donc lorsque je valide le formulaire, le mdp est bien généré dans une pop-up. De base c'est un mdp aléatoire que l'utilisateur doit changer lors de sa première connexion.

Lorsque je regarde les logs du serveurs (via putty):
sudo tail /var/log/apache2/error.log -n 40

Code : Tout sélectionner

Invalid argument supplied for foreach() in /var/www/caddi/views/admin/v_ajouter_un_utilisateur.php on line 58, referer: http://******/caddi/index.php?tab=gestion%20des%20utilisateurs&action=ajouter Undefined variable: liste_affectations in /var/www/caddi/views/admin/v_ajouter_un_utilisateur.php on line 58, referer: http://*****/caddi/index.php?tab=gestion%20des%20utilisateurs&action=ajouter Invalid argument supplied for foreach() in /var/www/caddi/views/admin/v_modifier_un_utilisateur.php on line 63, referer: http://****/caddi/index.php?tab=gestion%20des%20utilisateurs&action=modifier&id=8704597U
De ce fait je suis allé voir les lignes correspondante :

Code : Tout sélectionner

v_ajouter_un_utilisateur.php <?php foreach ($liste_affectations as $key => $value) : ?> // ligne 58 <option value="<?php echo $value['id_affectation']; ?>"><?php echo $value['uo'].' - '.$value['residence']; ?></option> <?php endforeach; ?>

Code : Tout sélectionner

v_modifier_utilisateur.php <?php foreach ($liste_affectations as $key => $value) : ?> //ligne 63 <?php if ($utilisateur->getId_affectation() == $value['id_affectation']) : ?> <option value="<?php echo $value['id_affectation']; ?>" selected ><?php echo $value['uo'].' - '.$value['residence']; ?> </option> <?php else : ?> <option value="<?php echo $value['id_affectation']; ?>"><?php echo $value['uo'].' - '.$value['residence']; ?></option> <?php endif; ?> <?php endforeach; ?>
L'admin et le GM ne peuvent également pas modifier le cp d'un utilisateur (donc son id qui lui est donnée à son embauche) mais toutes les autres infos (nom, prénom, cp_dpx) => 0 problème.

Personnellement je ne vois rien de choquant qui me pousserait à effectuer des changements.
Lorsque j'effectue des recherches sur les possibles causes de ce dysfonctionnement, je tombe sur des problèmes lié au proxy ... Je n'y crois pas.

Mammouth du PHP | 2345 Messages

23 nov. 2022, 19:18

quel est le code de la fonction ajouter ?
$nouvel_utilisateur->ajouter();
si aucun utilisateur n'est créé, c'est que cela ne fonctionne pas, et le message d'erreur peut concerner un autre problème.

Eléphanteau du PHP | 10 Messages

24 nov. 2022, 12:15

Bonjour,

Voici la fonction ajouter pour un utilisateur :

Code : Tout sélectionner

//Méthode pour ajouter une entrée à la table utilisateur public function ajouter() { $BDD = new Memory(); return $BDD->insert('utilisateur', utf8_desarray($this->unserialise())); }
Merci de votre aide !

Eléphanteau du PHP | 10 Messages

24 nov. 2022, 12:58

Voici le MCD :

Image

Voici la class regroupant les différentes fonctions permettant de gérer les affectations :

Code : Tout sélectionner

<?php /** * Classe Manager_affectation */ class Manager_affectation { //Attributs privés private $id_affectation, $etablissement, $uo, $residence, $id_affectation; //Constructeur public function __construct() { $this->id_affectation = ''; $this->etablissement = ''; $this->uo = ''; $this->residence = ''; $this->id_affectation = ''; } //Méthodes //Méthode pour lister les entrées de la table affectation public static function lister() { $BDD = new Memory(); return utf8_array($BDD->selectAll('affectation', '*')); } //Méthode pour récupérer une entrée de la table affectation public function recuperer() { $BDD = new Memory(); return utf8_array($BDD->select('affectation', '*', array('id_affectation' => $this->id_affectation))); } //Méthode pour ajouter une entrée à la table affectation public function ajouter() { $BDD = new Memory(); return $BDD->insert('affectation', utf8_desarray($this->unserialise())); } //Méthode pour modifier une entrée de la table affectation public function modifier() { $BDD = new Memory(); return $BDD->update('affectation', utf8_desarray($this->unserialise()), array('id_affectation' => $this->id_affectation)); } //Méthode pour supprimer une entrée de la table affectation public function supprimer() { $BDD = new Memory(); return $BDD->delete('affectation', array('id_affectation' => $this->id_affectation)); } //Méthode pour sérialiser public function serialise($tab) { $tableau = array('id_affectation', 'etablissement', 'uo', 'residence', 'id_affectation'); foreach ($tableau as $key => $value) if (isset($tab[$value])) $this->$value = $tab[$value]; } //Méthode pour désérialiser public function unserialise() { $tableau = array('id_affectation', 'etablissement', 'uo', 'residence', 'id_affectation'); foreach ($tableau as $key => $value) $table[$value] = $this->$value; return $table; } //Getters public function getId_affectation() { return $this->id_affectation; } public function getEtablissement() { return $this->etablissement; } public function getUo() { return $this->uo; } public function getResidence() { return $this->residence; } public function getId_affectation() { return $this->id_affectation; } //Setters public function setId_affectation($id_affectation) { return $this->id_affectation = $id_affectation; } public function setEtablissement($etablissement) { return $this->etablissement = $etablissement; } public function setUo($uo) { return $this->uo = $uo; } public function setResidence($residence) { return $this->residence = $residence; } public function setId_affectation($id_affectation) { return $this->id_affectation = $id_affectation; } } ?>

Eléphanteau du PHP | 10 Messages

25 nov. 2022, 13:19

J'ai une nouvelle erreur :

Code : Tout sélectionner

PHP Fatal error: Uncaught Error: Call to a member function getPrenom() on null in /var/www/caddi/views/current/header.php:4\nStack trace:\n#0 /var/www/caddi/views/current/top.php(7): include()\n#1 /var/www/caddi/controllers/c_main.php(20): include('/var/www/caddi/...')\n#2 /var/www/caddi/index.php(34): include('/var/www/caddi/...')\n#3 {main}\n thrown in /var/www/caddi/views/current/header.php on line 4, referer: http://********/caddi/index.php?tab=mes%20demandes

Code : Tout sélectionner

<div class="name" onclick="ouvrirNom()"> <?php echo $_SESSION['utilisateur']->getPrenom().' '.strtoupperFr($_SESSION['utilisateur']->getNom()); ?>

Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9484 Messages

26 nov. 2022, 13:46

Le message d'erreur est assez explicite.
Essaye de le comprendre, fait ton debugage avec var_dump() et dis nous ce que tu as essayé pour régler ce problème
Quand tout le reste a échoué, lisez le mode d'emploi...