Ancienne extension Mysql

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 22 mars 2018 à 20:42
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 25 mars 2018 à 19:16
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;
}
A voir également:

8 réponses

yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
23 mars 2018 à 00:40
bonsoir, "Impossible de me connecter avec cette fonction": message d’erreur (lequel), comportement inattendu (lequel)?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
Modifié le 23 mars 2018 à 09:04
Bonjour,
En fait lorsque je fait un var_dump de $bdd cela me renvoie NULL
Merci
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
23 mars 2018 à 11:26
fais-tu le var_dump dans la fonction bdd?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
23 mars 2018 à 22:23
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; }
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 mars 2018 à 07:45
"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()?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
24 mars 2018 à 10:13
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;
     }
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 mars 2018 à 11:08
appelles-tu la fonction bdd() avant de faire
var_dump($bdd);
?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
24 mars 2018 à 19:49
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
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
24 mars 2018 à 20:02
Bonjour,
Je viens de m'apercevoir d'un détail qui me parait anormal je vais regarder ça et te redis.
Merci
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 24 mars 2018 à 21:16
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.....
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
25 mars 2018 à 19:16
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.
0