Page 1 sur 1

Problème d'identification utilisateur

Posté : 09 mars 2021, 12:30
par DioBrando
Bonjour,

Dans le cadre d'un projet de gestion de frais, j'ai réussi a lié la base de donnée au code PHP à l'aide de PDO, cependant je n'arrive pas à m'identifier lorsque je rentre mes logins d'utilisateurs...

Voici les erreurs en question :

Code : Tout sélectionner

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\wamp64\www\Projet\AppliFrais\include\_bdGestionDonnees.lib.php on line 72

Code : Tout sélectionner

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\wamp64\www\Projet\AppliFrais\include\_bdGestionDonnees.lib.php on line 72

Code : Tout sélectionner

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\wamp64\www\Projet\AppliFrais\include\_bdGestionDonnees.lib.php on line 336

Code : Tout sélectionner

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in C:\wamp64\www\Projet\AppliFrais\include\_bdGestionDonnees.lib.php on line 57
Voici le code :

Code : Tout sélectionner

?php /** * Regroupe les fonctions d'accès aux données. * @package default * @author Arthur Martin * @todo Fonctions retournant plusieurs lignes sont à réécrire. */ /** * Se connecte au serveur de données mysqli. * Se connecte au serveur de données mysqli à partir de valeurs * prédéfinies de connexion (hôte, compte utilisateur et mot de passe). * Retourne l'identifiant de connexion si succès function connecterServeurBD() { $servername = "localhost"; $username = "userGsb"; $password = "mdp"; try { $conn = new PDO("mysql:host=$servername;dbname=applifrais", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connexion réussie"; } catch(PDOException $e) { echo "Echec de la connexion" . $e->getMessage(); } } /** * Sélectionne (rend active) la base de données. * Sélectionne (rend active) la BD prédéfinie gsb_frais sur la connexion * identifiée par $idCnx. Retourne true si succès, false sinon. * @param resource $idCnx identifiant de connexion * @return boolean succès ou échec de sélection BD */ function activerBD($idCnx) { $bd = "userGsb"; $query = "SET CHARACTER SET utf8"; // Modification du jeu de caract�res de la connexion $res = mysqli_query($query, $idCnx); $ok = mysqli_select_db($bd, $idCnx); return $ok; } /** * Ferme la connexion au serveur de données. * Ferme la connexion au serveur de données identifiée par l'identifiant de * connexion $idCnx. * @param resource $idCnx identifiant de connexion * @return void */ function deconnecterServeurBD($idCnx) { mysqli_close($idCnx); } /** * Echappe les caractères spéciaux d'une chaîne. * Envoie la chane $str échappée, càd avec les caractères considérés spéciaux * par mysqli (tq la quote simple) précédés d'un \, ce qui annule leur effet spécial * @param string $str chaîne à échapper * @return string chaîne échappée */ function filtrerChainePourBD($str) { if ( ! get_magic_quotes_gpc() ) { // si la directive de configuration magic_quotes_gpc est activée dans php.ini, // toute chaîne reçue par get, post ou cookie est déjà échappée // par conséquent, il ne faut pas échapper la chaîne une seconde fois mysqli_real_escape_string($str); } // return $str; } /** * Fournit les informations sur un visiteur demandé. * Retourne les informations du visiteur d'id $unId sous la forme d'un tableau * associatif dont les clés sont les noms des colonnes(id, nom, prenom). * @param resource $idCnx identifiant de connexion * @param string $unId id de l'utilisateur * @return array tableau associatif du visiteur */ function obtenirDetailVisiteur($idCnx, $unId) { $id = filtrerChainePourBD($unId); $requete = "select id, nom, prenom from Visiteur where id='" . $unId . "'"; $idJeuRes = mysqli_query($requete, $idCnx); $ligne = false; if ( $idJeuRes ) { $ligne = mysqli_fetch_assoc($idJeuRes); mysqli_free_result($idJeuRes); } return $ligne ; } /** * Fournit les informations d'une fiche de frais. * Retourne les informations de la fiche de frais du mois de $unMois (MMAAAA) * sous la forme d'un tableau associatif dont les clés sont les noms des colonnes * (nbJustitificatifs, idEtat, libelleEtat, dateModif, montantValide). * @param resource $idCnx identifiant de connexion * @param string $unMois mois demand� (MMAAAA) * @param string $unIdVisiteur id visiteur * @return array tableau associatif de la fiche de frais */ function obtenirDetailFicheFrais($idCnx, $unMois, $unIdVisiteur) { $unMois = filtrerChainePourBD($unMois); $ligne = false; $requete="select IFNULL(nbJustificatifs,0) as nbJustificatifs, Etat.id as idEtat, libelle as libelleEtat, dateModif, montantValide from FicheFrais inner join Etat on idEtat = Etat.id where idVisiteur='" . $unIdVisiteur . "' and mois='" . $unMois . "'"; $idJeuRes = mysqli_query($requete, $idCnx); if ( $idJeuRes ) { $ligne = mysqli_fetch_assoc($idJeuRes); mysqli_free_result($idJeuRes); } return $ligne ; } /** * V�rifie si une fiche de frais existe ou non. * Retourne true si la fiche de frais du mois de $unMois (MMAAAA) du visiteur * $idVisiteur existe, false sinon. * @param resource $idCnx identifiant de connexion * @param string $unMois mois demandé (MMAAAA) * @param string $unIdVisiteur id visiteur * @return booléen existence ou non de la fiche de frais */ function existeFicheFrais($idCnx, $unMois, $unIdVisiteur) { $unMois = filtrerChainePourBD($unMois); $requete = "select idVisiteur from FicheFrais where idVisiteur='" . $unIdVisiteur . "' and mois='" . $unMois . "'"; $idJeuRes = mysqli_query($requete, $idCnx); $ligne = false ; if ( $idJeuRes ) { $ligne = mysqli_fetch_assoc($idJeuRes); mysqli_free_result($idJeuRes); } // si $ligne est un tableau, la fiche de frais existe, sinon elle n'exsite pas return is_array($ligne) ; } /** * Fournit le mois de la dernière fiche de frais d'un visiteur. * Retourne le mois de la dernière fiche de frais du visiteur d'id $unIdVisiteur. * @param resource $idCnx identifiant de connexion * @param string $unIdVisiteur id visiteur * @return string dernier mois sous la forme AAAAMM */ function obtenirDernierMoisSaisi($idCnx, $unIdVisiteur) { $requete = "select max(mois) as dernierMois from FicheFrais where idVisiteur='" . $unIdVisiteur . "'"; $idJeuRes = mysqli_query($requete, $idCnx); $dernierMois = false ; if ( $idJeuRes ) { $ligne = mysqli_fetch_assoc($idJeuRes); $dernierMois = $ligne["dernierMois"]; mysqli_free_result($idJeuRes); } return $dernierMois; } /** * Ajoute une nouvelle fiche de frais et les éléments forfaitisés associés, * Ajoute la fiche de frais du mois de $unMois (MMAAAA) du visiteur * $idVisiteur, avec les éléments forfaitisés associés dont la quantité initiale * est affectée à 0. Clôt éventuellement la fiche de frais précédente du visiteur. * @param resource $idCnx identifiant de connexion * @param string $unMois mois demandé (MMAAAA) * @param string $unIdVisiteur id visiteur * @return void */ function ajouterFicheFrais($idCnx, $unMois, $unIdVisiteur) { $unMois = filtrerChainePourBD($unMois); // modification de la dernière fiche de frais du visiteur $dernierMois = obtenirDernierMoisSaisi($idCnx, $unIdVisiteur); $laDerniereFiche = obtenirDetailFicheFrais($idCnx, $dernierMois, $unIdVisiteur); if ( is_array($laDerniereFiche) && $laDerniereFiche['idEtat']=='CR'){ modifierEtatFicheFrais($idCnx, $dernierMois, $unIdVisiteur, 'CL'); } // ajout de la fiche de frais à l'état Créé $requete = "insert into FicheFrais (idVisiteur, mois, nbJustificatifs, montantValide, idEtat, dateModif) values ('" . $unIdVisiteur . "','" . $unMois . "',0,NULL, 'CR', '" . date("Y-m-d") . "')"; mysqli_query($requete, $idCnx); // ajout des éléments forfaitisés $requete = "select id from FraisForfait"; $idJeuRes = mysqli_query($requete, $idCnx); if ( $idJeuRes ) { $ligne = mysqli_fetch_assoc($idJeuRes); while ( is_array($ligne) ) { $idFraisForfait = $ligne["id"]; // insertion d'une ligne frais forfait dans la base $requete = "insert into LigneFraisForfait (idVisiteur, mois, idFraisForfait, quantite) values ('" . $unIdVisiteur . "','" . $unMois . "','" . $idFraisForfait . "',0)"; mysqli_query($requete, $idCnx); // passage au frais forfait suivant $ligne = mysqli_fetch_assoc($idJeuRes); } mysqli_free_result($idJeuRes); } } /** * Retourne le texte de la requète select concernant les mois pour lesquels un * visiteur a une fiche de frais. * * La requête de sélection fournie permettra d'obtenir les mois (AAAAMM) pour * lesquels le visiteur $unIdVisiteur a une fiche de frais. * @param string $unIdVisiteur id visiteur * @return string texte de la requête select */ function obtenirReqMoisFicheFrais($unIdVisiteur) { $req = "select FicheFrais.mois as mois from FicheFrais where FicheFrais.idvisiteur ='" . $unIdVisiteur . "' order by FicheFrais.mois desc "; return $req ; } /** * Retourne le texte de la requête select concernant les éléments forfaitisés * d'un visiteur pour un mois donnés. * * La requête de sélection fournie permettra d'obtenir l'id, le libellé et la * quantité des éléments forfaitisés de la fiche de frais du visiteur * d'id $idVisiteur pour le mois $mois * @param string $unMois mois demandé (MMAAAA) * @param string $unIdVisiteur id visiteur * @return string texte de la requête select */ function obtenirReqEltsForfaitFicheFrais($unMois, $unIdVisiteur) { $unMois = filtrerChainePourBD($unMois); $requete = "select idFraisForfait, libelle, quantite from LigneFraisForfait inner join FraisForfait on FraisForfait.id = LigneFraisForfait.idFraisForfait where idVisiteur='" . $unIdVisiteur . "' and mois='" . $unMois . "'"; return $requete; } /** * Retourne le texte de la requête select concernant les éléments hors forfait * d'un visiteur pour un mois donnés. * * La requête de sélection fournie permettra d'obtenir l'id, la date, le libellé * et le montant des éléments hors forfait de la fiche de frais du visiteur * d'id $idVisiteur pour le mois $mois * @param string $unMois mois demandé (MMAAAA) * @param string $unIdVisiteur id visiteur * @return string texte de la requête select */ function obtenirReqEltsHorsForfaitFicheFrais($unMois, $unIdVisiteur) { $unMois = filtrerChainePourBD($unMois); $requete = "select id, date, libelle, montant from LigneFraisHorsForfait where idVisiteur='" . $unIdVisiteur . "' and mois='" . $unMois . "'"; return $requete; } /** * Supprime une ligne hors forfait. * Supprime dans la BD la ligne hors forfait d'id $unIdLigneHF * @param resource $idCnx identifiant de connexion * @param string $idLigneHF id de la ligne hors forfait * @return void */ function supprimerLigneHF($idCnx, $unIdLigneHF) { $requete = "delete from LigneFraisHorsForfait where id = " . $unIdLigneHF; mysqli_query($requete, $idCnx); } /** * Ajoute une nouvelle ligne hors forfait. * Insère dans la BD la ligne hors forfait de libellé $unLibelleHF du montant * $unMontantHF ayant eu lieu à la date $uneDateHF pour la fiche de frais du mois * $unMois du visiteur d'id $unIdVisiteur * @param resource $idCnx identifiant de connexion * @param string $unMois mois demandé (AAMMMM) * @param string $unIdVisiteur id du visiteur * @param string $uneDateHF date du frais hors forfait * @param string $unLibelleHF libellé du frais hors forfait * @param double $unMontantHF montant du frais hors forfait * @return void */ function ajouterLigneHF($idCnx, $unMois, $unIdVisiteur, $uneDateHF, $unLibelleHF, $unMontantHF) { $unLibelleHF = filtrerChainePourBD($unLibelleHF); $uneDateHF = filtrerChainePourBD(convertirDateFrancaisVersAnglais($uneDateHF)); $unMois = filtrerChainePourBD($unMois); $requete = "insert into LigneFraisHorsForfait(idVisiteur, mois, date, libelle, montant) values ('" . $unIdVisiteur . "','" . $unMois . "','" . $uneDateHF . "','" . $unLibelleHF . "'," . $unMontantHF .")"; mysqli_query($requete, $idCnx); } /** * Modifie les quantités des éléments forfaitisés d'une fiche de frais. * Met à jour les éléments forfaitisés contenus * dans $desEltsForfaits pour le visiteur $unIdVisiteur et * le mois $unMois dans la table LigneFraisForfait, après avoir filtré * (annulé l'effet de certains caractères considérés comme spèciaux par * mysqli) chaque donnée * @param resource $idCnx identifiant de connexion * @param string $unMois mois demandé (MMAAAA) * @param string $unIdVisiteur id visiteur * @param array $desEltsForfait tableau des quantités des éléments hors forfait * avec pour clés les identifiants des frais forfaitisés * @return void */ function modifierEltsForfait($idCnx, $unMois, $unIdVisiteur, $desEltsForfait) { $unMois=filtrerChainePourBD($unMois); $unIdVisiteur=filtrerChainePourBD($unIdVisiteur); foreach ($desEltsForfait as $idFraisForfait => $quantite) { $requete = "update LigneFraisForfait set quantite = " . $quantite . " where idVisiteur = '" . $unIdVisiteur . "' and mois = '" . $unMois . "' and idFraisForfait='" . $idFraisForfait . "'"; mysqli_query($requete, $idCnx); } } /** * Contrôle les informations de connexionn d'un utilisateur. * Vérifie si les informations de connexion $unLogin, $unMdp sont ou non valides. * Retourne les informations de l'utilisateur sous forme de tableau associatif * dont les clés sont les noms des colonnes (id, nom, prenom, login, mdp) * si login et mot de passe existent, le booléen false sinon. * @param resource $idCnx identifiant de connexion * @param string $unLogin login * @param string $unMdp mot de passe * @return array tableau associatif ou booléen false */ function verifierInfosConnexion($idCnx,$unLogin,$unMdp) { $unLogin = filtrerChainePourBD($unLogin); $unMdp = filtrerChainePourBD($unMdp); // le mot de passe est crypté dans la base avec la fonction de hachage md5 $req = "select id, nom, prenom, login, mdp from Visiteur where login='".$unLogin."' and mdp='" . $unMdp . "'"; $idJeuRes = mysqli_query($req, $idCnx); $ligne = false; if ($idJeuRes) { $ligne = mysqli_fetch_assoc($idJeuRes); mysqli_free_result($idJeuRes); } return $ligne; } /** * Modifie l'état et la date de modification d'une fiche de frais * Met à jour l'état de la fiche de frais du visiteur $unIdVisiteur pour * le mois $unMois à la nouvelle valeur $unEtat et passe la date de modif à * la date d'aujourd'hui * @param resource $idCnx identifiant de connexion * @param string $unIdVisiteur * @param string $unMois mois sous la forme aaaamm * @return void */ function modifierEtatFicheFrais($idCnx, $unMois, $unIdVisiteur, $unEtat) { $requete = "update FicheFrais set idEtat = '" . $unEtat . "', dateModif = now() where idVisiteur ='" . $unIdVisiteur . "' and mois = '". $unMois . "'"; mysqli_query($requete, $idCnx); } ?>

Re: Problème d'identification utilisateur

Posté : 09 mars 2021, 13:55
par or 1
ligne 72 :
mysqli_real_escape_string($str);

https://www.php.net/manual/fr/mysqli.re ... string.php
"Style procédural
mysqli_real_escape_string ( mysqli $link , string $escapestr )"

d'où "expects exactly 2 parameters, 1 given"

Re: Problème d'identification utilisateur

Posté : 09 mars 2021, 14:33
par DioBrando
ligne 72 :
mysqli_real_escape_string($str);

https://www.php.net/manual/fr/mysqli.re ... string.php
"Style procédural
mysqli_real_escape_string ( mysqli $link , string $escapestr )"

d'où "expects exactly 2 parameters, 1 given"
Merci pour votre réponse, mais où dois-je définir le $link ?

Re: Problème d'identification utilisateur

Posté : 09 mars 2021, 14:39
par or 1
function modifierEtatFicheFrais($idCnx, $unMois, $unIdVisiteur, $unEtat) {
...
mysqli_query($requete, $idCnx);


https://www.php.net/manual/fr/mysqli.query.php
Style procédural
mysqli_query ( mysqli $link , string $query , int $resultmode = MYSQLI_STORE_RESULT )

Re: Problème d'identification utilisateur

Posté : 13 mars 2021, 15:21
par DioBrando
J'ai beau mettre le style procédural mais j'ai de plus en plus d'erreurs...