Ancienne extension Mysql

Résolu/Fermé
Signaler
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
-
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
-
Bonjour,
Voilà j'ai pour notre site toute une partie administration qui a été conçu avec l'ancienne extension Mysql qui est aujourd'hui obsolète. Je souhaite refaire toute cette partie avec l'extension PDO_MySQL. Mais également faire des requètes préparée.
J'ai mon fichier init.php pour la connexion à ma BDD et dans ce même fichier j'aimerai faire une fonction qui permettrai à faire mes requète sql.
Impossible de me connecter avec cette fonction..
Merci pour votre aide.
<?php session_start();

function bdd() {
    $PARAM_hote        	='*************';     	
    $PARAM_nom_bdd     	='************'; 	
    $PARAM_utilisateur 	='************';          	
    $PARAM_mot_passe   	='************';              	

    try {
	$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
	$bdd->exec("SET CHARACTER SET utf8");
	$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    catch(Exception $e) {
	echo 'Impossible de se connecter à la base de donnée</br>';
	echo 'Erreur : ' .  $e->getMessage() . '<br />';
	echo 'N° : ' .      $e->getCode();
    }
    return $bdd;
}

function executeQuery($requete,$bdd) {
	//exécution de la requête
	try {
		$resultat = $bdd->prepare($requete);
		$resultat->execute();
	} catch(Exception $e) {
	// en cas d'erreur :
		echo " Erreur ! ".$e->getMessage();
		exit(0); // en cas d'erreur.. arrête le script !
	}
	return $resultat;
}

8 réponses

Messages postés
17733
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2021
948
bonsoir, "Impossible de me connecter avec cette fonction": message d’erreur (lequel), comportement inattendu (lequel)?
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
33
Bonjour,
En fait lorsque je fait un var_dump de $bdd cela me renvoie NULL
Merci
Messages postés
17733
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2021
948
fais-tu le var_dump dans la fonction bdd?
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
33
Bonjour,
Je n'y comprends rien en fait...
lorsque je met mes deux fonctions aucun problème mais quand je rajoute la requète pour récupérer la configuration du site et là impossible de me connecter à ma BDD
<?php session_start();

function bdd() {
    $PARAM_hote        	='*******';     	
    $PARAM_nom_bdd     	='**********'; 	
    $PARAM_utilisateur 	='**********';          	
    $PARAM_mot_passe   	='************';              	

    try {
	$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
	$bdd->exec("SET CHARACTER SET utf8");
	$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    catch(Exception $e) {
	echo 'Impossible de se connecter à la base de donnée</br>';
	echo 'Erreur : ' .  $e->getMessage() . '<br />';
	echo 'N° : ' .      $e->getCode();
    }
    return $bdd;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Variables diverses
$cfg   		= "cdc_configsite";
$kw         = "keywords.txt";       // Fichier des mots clefs
$lg         = 140;                  // Largeur des sous-menus
$jours      = array('dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi');
$chars      = "iso-8859-1";         // ok
$sprt       = "css/menusprt.css";   // Styles print ok
$sscr       = "css/menusscr.css";   // Styles screen ok
$amail      = "";
$aname      = "";                   // Nom de l'admin (Publisher; Sera l'auteur si non indiqué)
$lastsave   = 0;                    // Date de la dernière sauvegarde (timestamp calculé plus loin)
$nbsave     = 0;                    // Nombre de sauvegardes enregistrées
$lastsql    = '';                   // Nom du dernier fichier de sauvegarde

// Fonction qui sert à faire les requêtes SQL
function executeQuery($requete,$bdd) {
	//exécution de la requête
	try {
		$resultat = $bdd->prepare($requete);
		$resultat->execute();
	} catch(Exception $e) {
	// en cas d'erreur :
		echo " Erreur ! ".$e->getMessage();
		exit(0); // en cas d'erreur.. arrête le script !
	}
	return $resultat;
}

// Récupérer la configuration du site
$requete = "SELECT * FROM $cfg";
$config = executeQuery($requete,$bdd);
while ($donnees = $config->fetch()) { ${$donnees->clef} = $donnees->valeur; }
Messages postés
17733
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2021
948
"impossible de me connecter": message d'erreur?
peux-tu partager la partie de code où tu fais le var_dump de $bdd?
peux-tu partager également la partie du code où tu appelles la function bdd()?
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
33
Bonjour,
Voici le début de ma page où j'ai fait un var_dump de $bdd qui me retourne NULL. A priori c'est ma page de la class qui pose problème. En fait ma class me retourne mes listes déroulantes. Je n'ai aucun message d'erreur je suis dépassé. Merci pour votre aide.
var_dump($bdd);
$index = 2;                           
require("libs/init.php");              
require("libs/class.liste.php");      
$debug = 0;

// Création des listes déroulantes à utiliser
$LDpers = new liste("libs/personnes","","oblig");  
$LDpaie = new liste("libs/paiements","","oblig"); 
$LDclas = new liste("libs/classes","","oblig");   
$LDpup 	= new liste("libs/pupitres","","");    	

Voici ma class
class liste {
     // Attributs, propriétés de la classe

     var $champs    = "";
     var $texte     = "";
     var $requete   = "";
     var $ctrlname  = "";
     var $tronque   = 0;
     var $option    = "";
     var $style     = "";
     var $onchange  = "";
     var $slimit    = "";
     var $limit     = "";

     var $nbrecs    = 0;
     // Constructeur de la classe liste.
     // Lecture de la définition de la liste, initialisation des propriétés

     function liste($objet, $ctrlname="", $style="", $limit=0) {
          if($objet != "null") {
               $slimit          = $limit; // sauvegarde du paramètre / fichier .def
               require("$objet.def.php");
               $this->texte     = $texte;
               $this->ctrlname  = $ctrlname;
               $this->style     = $style;
               $this->onchange  = $onchange;
               $this->champs    = $this->getfieldnames($champs);
               if($limit) {
                  $this->limit  = $limit;
               }
               if($lignes) {
                  $this->texte = "";
                  $this->option = " multiple size=\"$lignes\"";
               }
               if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
               if($group)  { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; }
               if($ordre)  { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; }
               if($limit)  { $insLIMIT = "LIMIT 0,$limit";  } else { $insLIMIT = ""; }
               if($slimit) { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; }
  
               $this->requete = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";

               global $bdd;
               $resultat = executeQuery($this->requete,$bdd);
               $this->nbrecs = $resultat->rowCount(); unset($resultat);
          }
     }     function write($indice="",$text=0) {
          global $bdd;
          $champs = explode(",",$this->champs); $idctrl = $champs[0];
          if($this->ctrlname) { $idctrl = $this->ctrlname; }
          if($this->style) { $style = " class=\"$this->style\""; }
          if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
          $resultat = executeQuery($this->requete,$bdd);
          $this->nbrecs = $resultat->rowCount();
          if($text && $indice) { $textonly = 1; } else { $textonly = 0; }
          if(!$textonly) {
             echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
             if(!$this->option) {
                if($this->texte) { echo "<option value=\"null\">$this->texte"; }
             }
          }
          while ($donnees = $resultat->fetch()) {
               if($indice/1) { $idnum = 0; } else { $idnum = 1; }
               if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
               if (count($champs) > 2) {
                   $texte = $donnees->$champs[1]; $n = 2;
                   if($textonly && $thisrec) { $buffer = $texte; }
                   while(count($champs) > $n) {
                        if($textonly && $thisrec) { $buffer .= " ".$donnees->$champs[$n]; $n++; }
                        else                      { $texte  .= " ".$donnees->$champs[$n]; $n++; }
                   } }
               else {
                   if($textonly && $thisrec) { $buffer = $donnees->$champs[1]; }
                   else                      { $texte  = $donnees->$champs[1]; }
               }
               if($this->tronque) {
                  $lg = $this->tronque-9;     // 9 = longueur de "... / ..."
                  if(($lg % 2) != 0) { $lg++; }
                  if(strlen($texte) > $lg) {
                     $texte = substr($texte,0,$lg/2) . "... / ..."
                            . substr($texte,strlen($texte)-($lg/2),$lg/2);
                  }
                  if(strlen($buffer) > $lg) {
                     $buffer = substr($buffer,0,$lg/2) . "... / ..."
                             . substr($buffer,strlen($buffer)-($lg/2),$lg/2);
                  }
               }
               if(!$textonly) {
                  echo "<option value=\"".$donnees->$champs[0]."\"";
                  if($thisrec) { echo " selected"; }
                  echo ">".$texte;
               }
          }
          if($textonly) { echo $buffer;        }
          else          { echo "</select>\n";  }
     }
     function getfieldnames($champs) {
          $fields = explode(",", $champs);
          for($n=0; $n<count($fields); $n++) {
             if(strstr(strtolower($fields[$n]), ".")) {
                $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
             }
             if(strstr(strtolower($fields[$n]), " as ")) {
                $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
             }
          }
          $rfields = $fields[0];
          for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; }
          return $rfields;
     }
Messages postés
17733
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2021
948
appelles-tu la fonction bdd() avant de faire
var_dump($bdd);
?
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
33
Toute la journée dessus pour un résultat nul.
Là j'ai fait appel à la fonction comme ça en début de chaque page.
$bdd = bdd();
var_dump($bdd);

si je met un echo avant l'appel aux fonctions cela me retourne bien ok si je met le echo juste après page vierge
<?php
$index = 2;                           
require("libs/init.php");              
require("libs/class.liste.php");      
$debug = 0;
echo "ok";
// Création des listes déroulantes à utiliser
// variable = new liste("nom de la liste", "nom du controle", "style"); ici, controle = "" => on laisse le nom par défaut (ex: idpers)
$LDpers = new liste("libs/personnes","","oblig");  	// Liste des adhérents
$LDpaie = new liste("libs/paiements","","oblig");  	// Liste des paiements possibles
$LDclas = new liste("libs/classes","","oblig");    	// Liste des classes de musiciens
$LDpup 	= new liste("libs/pupitres","","");    		// Liste des pupitres par musiciens
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
33
Bonjour,
Je viens de m'apercevoir d'un détail qui me parait anormal je vais regarder ça et te redis.
Merci
Messages postés
34217
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2021
3 854
Bonjour,
Affiches tu les erreurs PHP ?
Penses à paramétrer ton fichier php.ini pour cela, ou à placer ces lignes de code au début de tes scripts :
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


Ensuite, plutôt que d'essayer de faire des "require" dans tes class... ne connais tu pas l'héritage ( les extends ) ?


Dans l'idéal.. tu crée une CLASS pour ta bdd (en prenant le code de ton fichier init.php)
Puis tu créés ta class "liste" où tu y fais un extend de bdd
Puis, dans chacune de tes autres class, tu fais un extend de list.
Pense aussi à mettre un constructeur dans tes class, et à préfixer les différentes fonctions par private/public en fonction de tes besoins.

En gros :
class bddClass
{
    public $bdd = NULL;
    function __construct()   {
       $this->bdd = $this->cnxbdd();
    }
    
    public function cnxbdd()
    {
       //le code de connexion à la bdd
    }
}

class listeClass extends bddClass
{
    function __construct()   {
        parent::__construct();
    }


  public function liste($ctrlname="", $style="", $limit=0) {
      $bdd = parent::bdd;

       //le reste de ton code

  }
}

class personnes extends listeClass 
{
    
    function __construct()   {
        parent::__construct();
    }
   
  

}




Et pour finir... utilise un autoloader pour tes class ou fais les TOUS les require au début de ta page principale.
https://www.php.net/manual/fr/language.oop5.autoload.php

<?php
function __autoload($class_name) {
    include $class_name . '.php';
}

$obj  = new MaClasse1();
$obj2 = new MaClasse2();
?>



NB: evite de nommer tes fonctions comme le nom de tes class


NB² : la déclaration des variables dans les class se fait avec UNIQUEMENT avec les mots clés :
public $var1 = 1;
protected $var2 = 2;
private $var3 = 3;
static $var4 = 4; 
const  UNECONSTANTE = 1000;


Voir :
https://www.php.net/manual/fr/language.oop5.visibility.php
https://www.php.net/manual/fr/language.oop5.static.php
https://www.php.net/manual/fr/language.oop5.constants.php

... tes "
 var  $truc = ..
... je doute que ça fonctionne.
D'où tes soucis d'affichage je pense.....
Cordialement, 
Jordane                                                                 
Messages postés
410
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
24 novembre 2021
33
Bonjour,
Déjà pour mon erreur j'ai fait une grosse bourde que je n'ose même pas vous dire, plusieurs jours dessus pour une connerie mais bon.....
Merci je reprends toute ma partie administration depuis le début, je vais regarder de plus près tes conseils et essayer de les adapter pour la suite.
Je clore ce sujet merci.