Page 1 sur 2

Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 11:47
par Freezon
Bonjour, bonsoir, à tous et à toutes !

Alors j'ai ma classe gestionOrdinateur :

Code : Tout sélectionner

<?php require_once("ordinateur.class.php"); class gestionOrdi { static function lecture(){ include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->query("SELECT id,name,entities_id FROM glpi_computers ORDER BY name ASC"); $TableauOrdi = array(); try { while($ligne=$req->fetch()) { $TableauOrdi[] = new Ordinateur($ligne["id"],$ligne["name"],$ligne["entities_id"]); } $req->closeCursor(); return $TableauOrdi; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } } } ?>
J'ai une classe ordinateur :

Code : Tout sélectionner

<?php require_once("ordinateur.class.php"); class gestionOrdi { static function lecture(){ include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->query("SELECT id,name,entities_id FROM glpi_computers ORDER BY name ASC"); $TableauOrdi = array(); try { while($ligne=$req->fetch()) { $TableauOrdi[] = new Ordinateur($ligne["id"],$ligne["name"],$ligne["entities_id"]); } $req->closeCursor(); return $TableauOrdi; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } } } ?>


Et j'aimerai pouvoir, retiré une information de la BDD. Cette information se nomme entities_id et se trouve dans une table glpi_computers.

J'ai fais donc une fonction :

Code : Tout sélectionner

static function entiteOrdinateur($ordinateur) { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->query("SELECT entities_id FROM glpi_computers WHERE name = $ordinateur->name "); $TableauEntite = array(); try { while($ligne=$req->fetch()) { $TableauEntite[] = new User($ligne["entities_id"]); } $req->closeCursor(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); }

Et sur une page récapitulatif.php, je l'appel :

Code : Tout sélectionner

if(isset($_POST["choixOrdi"])) { $ordinateur = $_POST["choixOrdi"]; $entiteOrdinateur = Entite::entiteOrdinateur($_POST["choixOrdi"]->name); }


Mais je me rend vite compte, que ça ne marche pas, et je ne vois pas la solution... En faite c'est ce qui m'est venu naturellement tout ça... Et depuis trois heures, je cherche, sans résultat ...



Merci d'avance.

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 12:00
par Spols
De ce que je vois d'une première lecture,

$_POST['choixOrdi'] n'est surement pas un objet, donc $_POST["choixOrdi"]->name devrait te renvoyer une erreur
Regarde ce qu'il y a dans $_POST['choixOrdi'] et vois si c'est ce qu'il te faut dans ta fonction ou pas.

Et si tu as des message d'erreur, cela nous aiderait surement à t'aiguiller

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 12:10
par Freezon
Ils me sortent le nom (écrit) seulement de l'ordinateur que j'ai sélectionné dans une liste déroulante. En faite, j'ai trois pages. Une ou je choisis l'ordinateur, une ou je choisis un lieu, et une page récapitulatif. Dans la page un, dans une liste je choisis l'ordinateur, je ressors une donnée sous la forme "Ordinateur - POS001A15", le nom dans la BDD est sous la forme "POS001A15". Je la fais transité dans la page 2, ou j'enlève le "Ordinateur - " et je ne garde que le nom exacte. Et je l'envoie à la page3 (récapitulatif) ou j'essaye d'affiché l'entité, ou le problème est mentionné au dessus.
Donc pas besoin du ->name, mais est-ce que je peux faire marché ma fonction même si ce n'est pas un objet... ?


Le message d'erreur affiché par easyPHP est : Fatal error: Call to undefined method entite::entiteOrdinateur() in F:\STAGE2_VACALIANS\control\recapitulatif.php on line 14

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 13:09
par Spols
a priori si tu retire les "->name" (un dans l'appel de fonction l'autre dans la fonction dans une requête) cela a des chances de marcher

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 13:56
par Freezon
Dans ma page control/recapitulatif.php j'ai :

Code : Tout sélectionner

<?php require('model/gestionEntite.class.php'); if(isset($_POST["choixOrdi"])) { $ordinateur = $_POST["choixOrdi"]; $entiteOrdinateur = Entite::entiteOrdinateur($_POST["choixOrdi"]); } if(isset($_POST["listeLieux"])) { $lieu = $_POST["listeLieux"]; $entiteLieu = Entite::entiteLieu($_POST["listeLieux"]); } include('view/recapitulatif.php'); ?>
Et dans ma page view/recapitulatif.php j'ai :

Code : Tout sélectionner

echo "TEST : " .$entiteOrdinateur;
Et j'ai l'erreur :


Fatal error: Call to undefined method entite::entiteOrdinateur() in F:\STAGE2_VACALIANS\control\recapitulatif.php on line 7

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 14:20
par moogli
salut,

c'est quoi le code complet de la classe ?
il semble que la classe entite n'ai pas de méthode statique entiteOrdinateur()

La syntaxe du bout de code semble correct (doc http://nl3.php.net/manual/fr/language.oop5.static.php), en mettant de coté les poitn déjà un indiqué par spols ;)

@+

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 14:26
par Freezon
salut,

c'est quoi le code complet de la classe ?
il semble que la classe entite n'ai pas de méthode statique entiteOrdinateur()

La syntaxe du bout de code semble correct (doc http://nl3.php.net/manual/fr/language.oop5.static.php), en mettant de coté les poitn déjà un indiqué par spols ;)

@+
Oui j'ai modifié la méthode n'est pas dans entite mais dans gestionEntite, j'ai effectué la correction.

Ma classe Entite :

Code : Tout sélectionner

<?php class entite { #region Attributs private $id; private $name; #endregion function __construct($i,$n) { $this -> id = $i ; $this -> name = $n ; } #region Accesseurs public function __set($attribut,$valeur) { switch ($attribut) { case'id': $this->id=$valeur; case'name': $this->name=$valeur; } } public function __get($attribut) { switch ($attribut) { case'id': return $this->id; case'name':return $this->name; } } #endregion public static function affecter($entite) { return unserialize(serialize($entite)); } //Méthode Affichage public function __toString() { return "Entité - " . $this->id . " " .$this->name; } }
ma classe gestionEntite :

Code : Tout sélectionner

<?php require_once("entite.class.php"); class gestionEntite { static function entiteOrdinateur($ordinateur) { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->query('SELECT entities_id FROM glpi_computers WHERE name ="?"'); $TableauEntite = array($ordinateur); try { while($ligne=$req->fetch()) { $TableauEntite[] = new Ordinateur($ligne["entities_id"]); } $req->closeCursor(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } } static function entiteLieu($lieu) { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->query("SELECT entities_id FROM glpi_locations WHERE name = "); $TableauEntite = array($lieu); try { while($ligne=$req->fetch()) { $TableauEntite[] = new Lieu($ligne["entities_id"]); } $req->closeCursor(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } } static function entiteUtilisateur($utilisateur) { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->query('SELECT entities_id FROM glpi_locations WHERE name ="?"'); $TableauEntite = array($utilisateur); try { while($ligne=$req->fetch()) { $TableauEntite[] = new User($ligne["entities_id"]); } $req->closeCursor(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } } } ?>
Mon controler :

Code : Tout sélectionner

if(isset($_POST["choixOrdi"])) { $ordinateur = $_POST["choixOrdi"]; $entiteOrdinateur = gestionEntite::entiteOrdinateur($ordinateur); } if(isset($_POST["listeLieux"])) { $lieu = $_POST["listeLieux"]; $entiteLieu = gestionEntite::entiteLieu($_POST["listeLieux"]); }
ma view :

Code : Tout sélectionner

echo "TEST : " .$entiteOrdinateur;
L'erreur actuelle :
Fatal error: Call to a member function fetch() on a non-object in F:\STAGE2_VACALIANS\model\gestionEntite.class.php on line 36

Mais ça ne marche pas...

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 14:43
par Freezon
J'ai modifié ma fonction :

Code : Tout sélectionner

static function entiteOrdinateur($ordinateur) { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name ="?"'); $req->execute(array($ordinateur)); $TableauEntite = array($ordinateur); try { while($ligne=$req->fetch()) { $TableauEntite[] = new Ordinateur($ligne["entities_id"]); } $req->closeCursor(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
J'ai modifié mon controler :

Code : Tout sélectionner

require('model/gestionEntite.class.php'); if(isset($_POST["choixOrdi"])) { $ordinateur = $_POST["choixOrdi"]; $entiteOrdinateur = gestionEntite::entiteOrdinateur($ordinateur); } include('view/recapitulatif.php');
Et ma view :

Code : Tout sélectionner

if(isset($_POST["choixOrdi"])) { echo "<br/>L'entité est " .$entiteOrdinateur[0]. "."; }

Néanmoins, je n'obtient pas l'entities_id que je recherche, mais le nom ...

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 15:12
par Spols
c'est normal, tu rempli le tableau $entiteOrdinateur d'abords avec le nom puis avec les entité retrouvé dans ta base.
les entité de ta base se trouveront à
$entiteOrdinateur[1] et suivant

Affiche $entiteOrdinateur avec un var_dump pour t'en rendre compte

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 15:17
par Freezon
c'est normal, tu rempli le tableau $entiteOrdinateur d'abords avec le nom puis avec les entité retrouvé dans ta base.
les entité de ta base se trouveront à
$entiteOrdinateur[1] et suivant

Affiche $entiteOrdinateur avec un var_dump pour t'en rendre compte
Ca n'affiche que le nom même avec [1] ou le var_dump ...
Erreur : array(1) { [0]=> string(9) "POR009A14" }

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 15:19
par Spols
alors ta requète ne renvoi pas de donnée
affiche là et teste là en php myadmin

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 15:22
par Freezon
alors ta requète ne renvoi pas de donnée
affiche là et teste là en php myadmin

Code : Tout sélectionner

$req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name ="?"'); $req->execute(array($ordinateur));
La requette fonction lorsque je remplace le "?" par le nom exacte. Je pense qu'en faite, je n'arrive pas à remplacer le "?" par le nom du PC dans mon view ou dans mon controler, je ne sais pas vraiment ...

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 15:28
par Spols
en lisant la doc, je me pencherai vers des guillemets en trop dans ta requète, ils seront ajouté par pdo en cas de besoin

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 15:30
par Freezon

Code : Tout sélectionner

static function entiteOrdinateur($ordinateur) { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = "?"'); $req->execute(array($ordinateur)); $TableauEntite = array($ordinateur); try { while($ligne=$req->fetch()) { $TableauEntite[] = new Ordinateur($ligne["entities_id"]); } $req->closeCursor(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
Je penserai plus sur une erreur dans la suite du code moi :/

Ou dans mon controler :

Code : Tout sélectionner

if(isset($_POST["choixOrdi"])) { $ordinateur = $_POST["choixOrdi"]; $entiteOrdinateur = gestionEntite::entiteOrdinateur($ordinateur); }
Ou dans l'appel ...

Re: Fonction PHP/BDD extraction de données

Posté : 13 juin 2016, 16:20
par Freezon
Ma fonction :

Code : Tout sélectionner

static function entiteOrdinateur($ordinateur) { try { include('./include/connect.php'); $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:dbname=glpi;host=localhost', 'root', ''); $req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = "?"'); $req->execute(array($ordinateur)); $TableauEntite = $req->execute(array($ordinateur)); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
mon controler :

Code : Tout sélectionner

if(isset($_POST["choixOrdi"])) { $ordinateur = $_POST["choixOrdi"]; $entiteOrdinateur = gestionEntite::entiteOrdinateur($ordinateur); }
ma view :

Code : Tout sélectionner

if(isset($_POST["choixOrdi"])) { echo "<br/>L'entité est " .$entiteOrdinateur."."; }
J'ai encore un peu modifié. Maintenant, ils me sortent sans cesse 1 pour l'entité. Je n'ai plus le nom de l'ordinateur, mais j'ai 1. Et après vérification avec la BDD, peu importe le PC sélectionné, il n'y a pas la bonne entities_id.