[RESOLU] Fonction PHP/BDD extraction de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Fonction PHP/BDD extraction de données

Re: Fonction PHP/BDD extraction de données

par Freezon » 14 juin 2016, 12:11

La fonction miracle est :

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 id,name,entities_id FROM glpi_computers WHERE name = :ordinateur'); //$req->execute(array($ordinateur)); $req->execute(array(':ordinateur' =>$ordinateur)); if ($TableauEntite = $req->fetch()) { return $TableauEntite['entities_id']; } else { return -1; } } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
Merci de l'aide !

Re: Fonction PHP/BDD extraction de données

par Freezon » 14 juin 2016, 11:52

Code : Tout sélectionner

$req= $bdd->prepare('SELECT id,name,entities_id FROM glpi_computers WHERE name = :ordinateur'); $req->execute(array(':ordinateur' =>$ordinateur));
Dans ma BDD quand j'execute la commande mais a la place de :ordinateur je met le nom d'un PC en dur, la requete me renvoie bien une donnée.

Re: Fonction PHP/BDD extraction de données

par Spols » 14 juin 2016, 11:46

tu es sur que ta requête te renvoie bien au moins une ligne ?
un résultat vide ne générera pas d'erreur mais ne t'affichera rien

Re: Fonction PHP/BDD extraction de données

par Freezon » 14 juin 2016, 11:14

je suis pas un expert de PDO, mais je pense que le setAttribute doit être mis sur ta connection et non pas ta requète

le message d'erreur indique bien que tu ne peux pas le mettre sur ta requète
Je m'en suis rendu compte et en le mettant sur $bdd, aucune erreur ne s'affiche donc le soucis n'est pas sur ma requête .. :(

Re: Fonction PHP/BDD extraction de données

par Spols » 14 juin 2016, 11:01

je suis pas un expert de PDO, mais je pense que le setAttribute doit être mis sur ta connection et non pas ta requète

le message d'erreur indique bien que tu ne peux pas le mettre sur ta requète

Re: Fonction PHP/BDD extraction de données

par Freezon » 14 juin 2016, 09:55

J'ai fais :

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 = :ordinateur'); //$req->execute(array($ordinateur)); $TableauEntite = $req->execute(array(':ordinateur' =>$ordinateur)); $req->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $TableauEntite = $TableauEntite->fetchColumn(); return $TableauEntite; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } }
J'ai rajouter le fetch column et j'ai affiché mes erreurs.
J'obtient avec le setAttribute :
Warning: PDOStatement::setAttribute(): SQLSTATE[IM001]: Driver does not support this function: This driver doesn't support setting attributes in monchemin on line 15

Re: Fonction PHP/BDD extraction de données

par Freezon » 14 juin 2016, 09:31

en effet après un execute, il faut faire un fetch... il y en a plusieurs à toi de choisir lequel correspond à ce que tu cherche
Je vois bien ce que vous dites, mais je ne comprend pas comment l'utiliser dans mon cas, et je ne vois pas pourquoi le mettre dans un while étant donné que je veux pour une seule ligne, avoir l'entité. Je ne comprend pas comment l'utiliser...

Re: Fonction PHP/BDD extraction de données

par Spols » 14 juin 2016, 08:30

en effet après un execute, il faut faire un fetch... il y en a plusieurs à toi de choisir lequel correspond à ce que tu cherche

Re: Fonction PHP/BDD extraction de données

par Freezon » 13 juin 2016, 17:22

$req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = ?');

PDO se démerde pour les apostrophes, c'est l'avantage d'utiliser les marqueurs.
http://php.net/manual/fr/pdo.prepare.php

tu devrais utiliser les marqueurs nommé c'est plus clair à la lecture ;)


@+

j'étudie le lien donné. Je fais comme j'ai appris en cours en faite. Néanmoins je ne pense pas que l'erreur soit de là.
Je pense que si j'ai un 1 qui s'affiche dans tout les cas c'est car la fonction execute() est un booléen, et donc elle renvoie true dans mon cas. Mais je n'arrive pas à soutiré ma donnée nécessaire.

Re: Fonction PHP/BDD extraction de données

par moogli » 13 juin 2016, 17:19

$req= $bdd->prepare('SELECT entities_id FROM glpi_computers WHERE name = ?');

PDO se démerde pour les apostrophes, c'est l'avantage d'utiliser les marqueurs.
http://php.net/manual/fr/pdo.prepare.php

tu devrais utiliser les marqueurs nommé c'est plus clair à la lecture ;)


@+

Re: Fonction PHP/BDD extraction de données

par Freezon » 13 juin 2016, 16:20

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.

Re: Fonction PHP/BDD extraction de données

par Freezon » 13 juin 2016, 15:30

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

par Spols » 13 juin 2016, 15:28

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

par Freezon » 13 juin 2016, 15:22

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

par Spols » 13 juin 2016, 15:19

alors ta requète ne renvoi pas de donnée
affiche là et teste là en php myadmin