PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#51 Re : Forum Général PHP » debut en PDO » 19-12-2011 16:18:59

Bonjour,

Sur les recommandations fondées de JC j'avais pris le temps depuis mon dernier post de remettre à plat ma base de donnée chose que j'ai faites et qui est désormais en cours de finalisation.
J'ai également pris connaissance du doc PDO traduit par Maljuna.

Aussi je me retrouve désormais à devoir programmer ce que je souhaite.
Je vais donc fonctionner par étape.

La première d'entre elle réside donc dans la connexion à la base.

je pense avoir cerner les base d'une connexion classique:

1.  try
2.      {
3.      $conn = new PDO($connStr, 'chef','motdepasse');
4.      }
5.  catch(PDOException $pe)
6.      {
7.      die('Connexion impossible à la base de données pour : ' .
8.        $pe->getMessage();
9.      }
10. $q = $conn->query();
11. if(!$q)
12.     {
13.     $ei=$conn->errorinfo();
14.     die('Requête rejetée pour : '. $ei[2]);
15.     }
 


toutefois en ce qui concerne une classe de connexion je ne suis pas sur d'avoir tout saisi!
En effet, j'ai comparé le script que j'avais mis en 1er post et la réponse de JC ca c'est ok, j'ai bien compris le pourquoi ça ne fonctionnait pas mais toutefois apres l'autre réponse de Pierrot concernant l'héritage de PDO je ne comprend pas.

Dois je conclure que c'est plus adapté?
cela serait il correct?

Class DbConnexion extends PDO {
private $host = "localhost";
private $db = "platf_gest_new";
private $db_user = "root";
private $db_password = "unpass";
private static  $PDOinstance = null;
private static $_instance = null;

private function montreErreur($message)
{
echo "<h2>Erreur</h2>";
echo nl2br(htmlspecialchars($message));
exit();
}


private function __contruct() {
try {
$this->PDOinstance = new PDO('mysql:host='.$host.';dbname='.$db, $db_user, $db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
$this->PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
}

catch (PDOException $e)
{

montreErreur("Désolé, une erreur s'est produite.
 Merci d'essayer plus tard.\n"
.trigger_error($e->getmessage(),E_USER_WARNING)
  ."<br />\n N° : ".$e->getCode()
 );
}
}
public static function getInstance() {
  if (is_null(self::$_instance)) {self::$_instance = new DbConnexion();}
     return self::$_instance;
   }
}
 

Vous en remerciant par avance

#52 MySQL, PostgreSQL, etc... » mysql5 et workbench » 19-12-2011 12:10:20

Darkangel
Réponses : 0

Bonjour,

Ayant mis en place ma base de donnée via MYSQLWORKBENCH je me retrouve avec un script sql qui commence par:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

Quelles modifs dois je apporter à ce script afin qu'il soit adapté pour mysql5?

merci d'avance!

#53 Re : MySQL, PostgreSQL, etc... » une table avec 2 liaisons ou deux tables? » 15-12-2011 17:32:42

pour info en fait j'ai une relation n:m entre
projet et budget
ET
taches et budget


de sorte a avoir
id projet et id budget
id tache et id budget

ca me parait correct a moi car cela répond a ma problématique mais je sais pas si c'est correct question mis en place pour un developeur pro comme toi!
donne moi ton avis please

je vais toutefois lire ton doc en plus! merci pour le partage

#54 MySQL, PostgreSQL, etc... » une table avec 2 liaisons ou deux tables? » 15-12-2011 17:32:42

Darkangel
Réponses : 2

Bonjour a tous,

je suis en train de mettre au point ma base de données et me pose la question suivante.

j'ai une table projet et une autre table taches projets

désormais je dois créer une table liée au budget.
toutefois tant un projet qu'un tache de celui peut avoir un budget.

aussi ma question est:
dois je créer une table budget projet et une autre budget tache projets ou y a t'il une façon de procéder afin que ma table budget puisse être rattaché au deux?

merci d'avance

#56 Forum Général PHP » version enregistrement » 15-12-2011 10:23:04

Darkangel
Réponses : 2

Bonjour,

dans le cas de mon appli en développement j'ai besoin de savoir comment je dois procéder si je veux pouvoir garder un historique de mes enregistrements.
est il plus facile d'avoir un champ sql avec version= 1 ou 2 etc et de voir la version la plus récente (dont le chiffre est le plus élevé )
ou
d'avoir un champ timestamp associé lors de l'enregistrement et de demandé la timestamp le plus récent si on veux avoir l'enregistrement dernier en date?

merci d'avance pour vos avis

#57 Re : MySQL, PostgreSQL, etc... » question bête sur le type de champ pour une table de liaison! » 21-01-2012 18:06:23

ok  merci pour vos commentaires:
je vais donc suivre vos conseils!

quelqu'un pour mon dernier post sinonµ?
merci à vous en tout cas!

#58 Re : MySQL, PostgreSQL, etc... » question bête sur le type de champ pour une table de liaison! » 21-01-2012 18:06:23

ouais bien vu vais voir ca!
par contre autre question !

j'ai une table
Etablissement

1 table groupe Identifiants

je fais une liaison n:m entre etab et identifiants afin que 1 etab puisse avoir plusieurs groupes et qu'un groupe puissent etre liés à plusieurs étab.
d'ou une table de liaison appelée Etab has Groupes

ma question est la suivante:concernant ma table d'identifiants sommes nous bien d'accord qu'il me faut la lier à ma table nouvellement crée par un n:m appele style Identifiants in Etab has Groupe.
de sorte à avoir in fine une table avec

id groupe
id etab
id identifiant.

ca serait ok comme cela?

#59 Re : MySQL, PostgreSQL, etc... » question bête sur le type de champ pour une table de liaison! » 21-01-2012 18:06:23

Apres verif je comprend mieux mais il me reste un poit

mieux vaut utiliser tinyint ou comme cela est indiqué à plusieurs endroits boolean??

#60 Re : MySQL, PostgreSQL, etc... » question bête sur le type de champ pour une table de liaison! » 21-01-2012 18:06:23

merci pour ta réponse!
un établissement et pour un projet ne peut intervenir qu'a un un seul titre.

aussi je vais opter pour un champ numérique de forme tinyint(1), serait ce adapté?
par contre vais me renseigner sur le signé ou non signé car je ne connais pas la différence!

#61 MySQL, PostgreSQL, etc... » question bête sur le type de champ pour une table de liaison! » 21-01-2012 18:06:23

Darkangel
Réponses : 10

Bonjour,

Dans le cadre de la mise en place de ma structure de base de donnée sur papier à l'heure actuelle, je me pose une question supra basique.

Admettons un cas exemple avec 2 tables

1) Etablissement
id_etab

2) Projets
id_projet

je créer une relation n:m car un etab peut participer à plusieurs projets et 1 projets fait intervenir plusieurs etab
jusque la je ne pense pas faire d'erreur!

ma question est la suivante : 1 etab peut être soit coordinateur d'un projet, soit sous contractant simple participant etc.
dans notre table de liaison

j'aurai donc!
id_etab
id_projet
statut

dans le cadre d'une programmation correct, le champ statut vous mettriez quoi?
- un enum avec une liste défini de possibilité?
- 1 champ int avec un numéro ?

En effet je me pose cette question car:

1) les possibilités peuvent évoluer dans un cas autre et il faudrait donc modifier l'enum
2) admettons un site multilingues l'enum ne sera pas correct pour les langues autres que celle indiquée.

merci de me donner votre avis car ce simple truc me dérange!
merci d'avance

#62 Re : MySQL, PostgreSQL, etc... » Lancement en PDO/ mise en place classe de connection » 12-12-2011 21:17:17

je ne remets pas en cause ni le bouquin ni ta traduction loin de la:
je demande juste à savoir si je me lance sur le bonne voie!

#63 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

lol l'apprentissage nécessite effectivement plus de travail que l’application smile
mais je demandai juste confirmation smile

#64 MySQL, PostgreSQL, etc... » Lancement en PDO/ mise en place classe de connection » 12-12-2011 21:17:17

Darkangel
Réponses : 4

Je débute en PDO et ai une question de base.

J'ai lu le doc de Maljuna mais ne cerne pas bien le protocole de connexion.
En theorie on débute par

$conn = new PDO($config['db.conn'], $conifg['db.user'],$config['db.pass']);

Toutefois ne souhaitant spécifier cela qu'une fois et seulement une fois j'ai regarder d'autre tuto qui parle de singleton.

Aussi et me basant sur ce constat j'ai préparé une classe et aimerais avoir votre avis sur celle-ci. est elle correcte et optimisée?

De plus au delà de ce premier script, j'aimerai savoir comment mettre en place mon système de gestion d'erreur.
1) Affichage d'une erreur complète si $debug =true sur le site
2) Affichage d'une erreur claire et simple si debug=false sur le site
3) intégration d'une erreur complète et précise dans un fichier de consult_erreur.

Faut il que j"intègre tout cela dans cette même classe?
comment procéder afin que pour chaque query si une erreur soit détectée, mon systeme se mette en place? Je devrai utiliser les try catch a chaque fois?

Merci d 'avance


Class DbConnexion extends PDO{

  private static $instance;
 
 function montreErreur($message)
    {
    echo "<h2>Erreur</h2>";
    echo nl2br(htmlspecialchars($message));
    exit();
    }
 
 
    public static function getInstance()
  {
    if(!isSet(self::$instance))
    {
            try
{
        self::$instance = new PDO('mysql:host=localhost;dbname=platf_gest', 'root', '');
    self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

catch(PDOException $e)
{
        montreErreur("Désolé, une erreur s'est produite.
          Merci d'essayer plus tard.\n"
.$e->getMessage()
          ."<br />\n N° : ".$e->getCode()
          );
     
}
    }

    return self::$instance;
  }
 
}
 

#65 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

sous entendu qu'un closecursor doit toujours etre situé avant le return?

#66 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

ok thanks!!
mais alors derniere chose de mise en page!

IdGroupe    Desc Groupe    Id Fonctionnalites    Desc Fonctionnalites
1                 Admin         1,2                          Tout voir,Tout voir et tout modifier
2                 LEAR            1                           Tout voir

comment procéder afin que les id Fonctionnalites et les descFonc aille a la ligne


IdGroupe    Desc Groupe    Id Fonctionnalites    Desc Fonctionnalites
1                 Admin         1,                            Tout voir,
                                        2                           Tout voir et tout modifier
2                 LEAR            1                           Tout voir

merci pour votre aide en tout cas!


ps: je ne comprend pas la remarque de pierrot quant au closecursor 'est jamais appeler

#67 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

hello!

j'ai donc intégrer group concat.


SELECT GROUP_CONCAT( DISTINCT G.idGroupe ) , G.descGroupe, F.idFonctionnalites, descFonctionnalites
FROM Groupes_Utilisateurs AS G
INNER JOIN Groupes_has_Fonctionnalites AS GHF
USING ( idGroupe )
INNER JOIN Fonctionnalites AS F
USING ( idFonctionnalites )
LIMIT 0 , 30
 

mais cela ne me retourne qu'un seul resultat a lieu de 2 dans mon exemple
cf post précédent pour résultat souhaité

:array

  0 =>
    array
      'GROUP_CONCAT(DISTINCT G.idGroupe)' => string '1,2' (length=3)
      0 => string '1,2' (length=3)
      'descGroupe' => string 'Admin' (length=5)
      1 => string 'Admin' (length=5)
      'idFonctionnalites' => string '2' (length=1)
      2 => string '2' (length=1)
      'descFonctionnalites' => string 'Tout voir et tout modifier' (length=26)
      3 => string 'Tout voir et tout modifier' (length=26)

ps: bien fait ton doc maljuna! (en cours de lecture) merci!

#68 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

ok merci mais faudrait m'en dire un plus en vue de pouvoir l'optimiser !

#69 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

bon j'ai donc vérifié mon script et l'ai adapté !
cela donne désormais la fonction suivante:


function get_fonc_group(){
$pdo= DbConnexion::getInstance();
$groups_foncs= array();
$get_fonc_group = $pdo->query("SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF USING(idGroupe) INNER JOIN Fonctionnalites AS F USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites");
$fonc_group = $get_fonc_group->fetchall();
return $fonc_group;
$get_fonc_group->closeCursor();
}
 

pour l'affichage des données j'ai procédé comme ceci:


echo '<br /><br /><b>on affiche les fonctionnalites de tous les groupes</b><br />';
$fonc_group =$user->get_fonc_group();
$count_group = sizeof($fonc_group);
echo '<table border="1">
<tr><td>IdGroupe</td><td>Desc Groupe</td><td>Id Fonctionnalite</td><td>Desc Fonctionnalite</td></<tr>
'
;
for ($i=0; $i<$count_group; $i++)
{

echo '<tr><td>'.$fonc_group[$i]["idGroupe"].'</td><td>'.$fonc_group[$i]["descGroupe"].'</td><td>'.$fonc_group[$i]["idFonctionnalites"].'</td><td>'.$fonc_group[$i]["descFonctionnalites"].'</td></tr>';
}
echo '</table>';
 

et cela me donne:

IdGroupe    Desc Groupe    Id Fonctionnalite      Desc Fonctionnalite
1               Admin              1                       Tout voir
1                 Admin            2                       Tout voir et tout modifier
2               LEAR            1                       Tout voir

La question est la suivante: Comment procéder afin que dans le cas ou l'id groupe et desc groupe similaire on puisse fusionner les cellule de sorte à avoir

IdGroupe    Desc Groupe    Id Fonctionnalite      Desc Fonctionnalite
1               Admin              1                       Tout voir
                                         2                       Tout voir et tout modifier
2               LEAR            1                       Tout voir

merci d'avance pour votre aide!
Ps: Il s'agit de fonc bidons pour l'instant

#70 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

Bonjour,

je ne suis pas certain de bien cerner votre réponse.
dans mon dernier post j'ai utiliser PDO.
je suis pret à faire tout en PDO désormais mais comment procéder pour récupérer les données en PDO?

Merci d'avance

#71 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

Re salutation Maljuna,

Voici la fonction avec pdo:


function get_fonc_group(){
$pdo= DbConnexion::getInstance();
$groups_foncs= array();
$get_fonc_group = $pdo->query("SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites");
while($fonc_group = $get_fonc_group->fetch(PDO::FETCH_ASSOC))
{$groups_foncs[] = $get_fonc_group;
}
return $groups_foncs;
$get_fonc_group->closeCursor();
}
 

mais ca me retourne


array
  0 =>
    object(PDOStatement)[6]
      public 'queryString' => string 'SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites' (length=268)
  1 =>
    object(PDOStatement)[6]
      public 'queryString' => string 'SELECT G.idGroupe, descGroupe, F.idFonctionnalites, descFonctionnalites FROM Groupes_Utilisateurs AS G INNER JOIN Groupes_has_Fonctionnalites AS GHF     USING(idGroupe) INNER JOIN Fonctionnalites AS F    USING(idFonctionnalites) ORDER BY G.idGroupe,F.idFonctionnalites' (length=268)
 

#72 Re : Forum Général PHP » debut en PDO » 19-12-2011 16:18:59

Bonjour JC

pourrais tu etre un peu plus clair?
merci d'avance

#73 Forum Général PHP » debut en PDO » 19-12-2011 16:18:59

Darkangel
Réponses : 6

Bonjour

je me mets donc au PDO et souhaite mettre en place ma classe de connexion!


Class DbConnexion {

  private static $instance;
 
const $PARAM_hote='localhost';
const $PARAM_port='3306';
const $PARAM_nom_bd='platf_gest';
const $PARAM_utilisateur='root';
const $PARAM_mot_passe='unpass';
 
   public static function getInstance()
  {
    if(!isSet(self::$instance))
    {
            try
{
        self::$instance = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
}
 
catch(Exception $e)
{
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
}
    }

    return self::$instance;
  }
 

}
 
 

toutefois cela ne fonctionne pas, ou est donc mon erreur please?

#74 Re : MySQL, PostgreSQL, etc... » Probleme de mise en place d'un select » 12-12-2011 16:42:18

bon si je comprend bien il faut que je me mette à PDO plus performant?
plus simple?

Pied de page des forums

Propulsé par FluxBB