Transformer Code PDO à Mysqli [Résolu]

Signaler
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020
-
 ZZZ -
Bonjour, je cherche comment convertir ce code de PDO à MSQLI , parceque avec PDO le site ne marche que sur localhost , quand je mets mon adresse IP , ça ne marche pas , du coup je me suis dis que c'est du à ça ! j'ai raison ou pas ?
voici la déclaration de la connexion :

<?php

class BDD {
	var $localhost = "", $user = "", $password = "";

    function getBdd() {
    	if ("127.0.0.1" == $_SERVER['HTTP_HOST']){
			//__variable locale lié à la classe
			$localhost = 'mysql:host=127.0.0.1;dbname=mapbdd;charset=utf8';
			$user = 'root';
			$password = '';
		} elseif ("domaine-distant" == $_SERVER['HTTP_HOST']){
			//__variable OVH lié à la classe
		    $localhost = 'mysql:host=HOST;dbname=BDNAME;charset=utf8';
			$user = 'USER';
			$password = 'PASSWORD';
		}
		
		
    	$bdd = new PDO($localhost, $user, $password);
   		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
        return $bdd;
    }
	
}

$BDD = new BDD();


et voici la classe qui l'appelle pour afficher la Map:

<?php

class Map extends BDD{

//__Affiche tous les points actifs sur une Google Maps
    function getAllMarkersActif($markerActif = "Oui", $iconeActif = "Oui" ) {
        $bdd = parent::getBdd();
		
		$sql = "SELECT * ";
		$sql .= "FROM `markers` as MK, `markers_icone` as MKI ";
		$sql .= "WHERE MK.marker_categorie = MKI.icone_id ";
		$sql .= "AND `marker_actif` = '".$markerActif."' ";
		$sql .= "AND `icone_actif` = '".$iconeActif."' ";
		
        $datas = $bdd->query($sql);
		
		while ($resultat = $datas->fetch(PDO::FETCH_OBJ)) {
            $count[] = $resultat;
        }
		
		return $count; // Accès au résultat
    }
	
//__Affiche les points actifs selon la catégorie
    function getMarkersCategory($markerActif = "Oui", $iconeActif = "Oui", $category= "" ) {
        $bdd = parent::getBdd();
		
		$sql = "SELECT * ";
		$sql .= "FROM `markers` as MK, `markers_icone` as MKI ";
		$sql .= "WHERE MK.marker_categorie = MKI.icone_id ";
		$sql .= "AND `icone_categorie` = '".$category."'";
		$sql .= "AND `marker_actif` = 'Oui' ";
		$sql .= "AND `icone_actif` = 'Oui'";
		
        $datas = $bdd->query($sql);
		
		while ($resultat = $datas->fetch(PDO::FETCH_OBJ)) {
            $count[] = $resultat;
        }
		
		return $count; // Accès au résultat
    }
	
//__Affiche les informations pour les catégories
    function getAllCategory( ) {
        $bdd = parent::getBdd( );
		
		$sql = "SELECT * ";
		$sql .= "FROM `markers_icone` as MKI ";
		$sql .= "WHERE MKI.icone_actif = 'Oui' ";
		
        $datas = $bdd->query($sql);
		
		while ($resultat = $datas->fetch(PDO::FETCH_OBJ)) {
            $count[] = $resultat;
        }
		
		return $count; // Accès au résultat
    }
}


Merci d'avance

3 réponses

Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

il y'a pas de message d'erreur , quand j'entre mon adresse IP / le projet ça prend cette ligne d'erreur
<?php include_once("template/vueHeader.php"); ?>

  <body>

    <?php include_once("template/vueNavbar.php"); ?>

    <div class="container">

      <div class="starter-template">
        <h1>Page d'erreur</h1>
        <p class="lead">Si cette page apparait, alors il y a une erreur.</p>
      </div>

    </div><!-- /.container -->

	<?php include_once("template/vueFooter.php"); ?>

qui est dans une page appelé vueErreur
Messages postés
32452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
Bonjour,

Essaye ça :
<?php
class BDD {
 private  $host = "localhost"
          ,$user = ""
          ,$password = ""
          ,$dbName = "";
  
  /**
  * Variables privées pour effectuer les requêtes
  */
  private $bdd = NULL
          ,$prepare=NULL
          ,$res=NULL;
    
  function __construct(){
     if ("127.0.0.1" == $_SERVER['HTTP_HOST']){
        //__variable locale lié à la classe
        $this->host = '127.0.0.1';
        $this->user = 'root';
        $this->password = '';        
        $this->dbName = 'mapbdd';
    } elseif ("domaine-distant" == $_SERVER['HTTP_HOST']){
      //__variable OVH lié à la classe
        $this->host = 'HOST';
        $this->user = 'USER';
        $this->password = 'PASSWORD';        
        $this->dbName = 'BDNAME';
        
    }
    //ouverture de la connexion à la bdd
    $this->getBdd();
  }
  
  private function getBdd() {
    $dsn = 'mysql:host='.$this->host.';dbname='.$this->dbName.';charset=utf8';
    try{
      $bdd = new PDO($dsn, $this->user, $this->password);
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    $this->bdd = $bdd;
  }

   /**
  * Execute une requête SQL
  */
  private function dbQuery($sql,$datas=NULL){
    try{
      $this->prepare = $this->bdd->prepare($sql) ;
      $this->res = $this->prepare->execute($datas) ;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
       print_r($datas);
    }
  }
  
  /**
  * Fait une requête SELECT et retourne tous les résultats dans un array
  */
  public function db_All($sql,$datas=NULL){
    $this->dbQuery($sql,$datas);
    return $this->prepare->fetchAll(); 
  }
  
  /**
  * Fait une requête SELECT et retourne une ligne de résultats dans un array
  */
  public function db_One($sql,$datas=NULL){
    $this->dbQuery($sql,$datas);
    return $this->prepare->fetch(); 
  }
  
  /**
  * Fait une requête INSERT et retourne l'id de l'élement inséré
  */
  public function db_Insert($sql,$datas=NULL,$returnId=TRUE){
    $this->dbQuery($sql,$datas);   
    return $returnId ? $this->bdd->lastInsertId() : $this->res; 
  }
  
  /**
  * Pour les requêtes DELETE / UPDATE ou autre
  * @return : Le nombre de lignes impactées par la requête
  */
  public function db_Exec($sql,$datas=NULL){
    $this->dbQuery($sql,$datas);   
    return array('result'=>$this->res,'rowCount'=>$this->prepare->rowCount());
  }
  
 //----- FIN DE LA CLASS ------------// 
}



<?php
class Map extends BDD{
  
  function __construct(){
    //appel le consutrateur de BDD
    parent::__construct(); 
  }
  
  
//__Affiche tous les points actifs sur une Google Maps
    public function getAllMarkersActif($markerActif = "Oui", $iconeActif = "Oui" ) {
      $sql = "SELECT * 
             FROM `markers` as MK, `markers_icone` as MKI 
             WHERE MK.marker_categorie = MKI.icone_id 
             AND `marker_actif` = :markerActif 
             AND `icone_actif` = :iconeActif ";
      $datas = array(':markerActif'=>$markerActif,':iconeActif'=>$iconeActif); 
      return parent::db_All($sql,$datas);
    }
 
//__Affiche les points actifs selon la catégorie
    public function getMarkersCategory($markerActif = "Oui", $iconeActif = "Oui", $category= "" ) {
      $sql = "SELECT * 
               FROM `markers` as MK, `markers_icone` as MKI 
               WHERE MK.marker_categorie = MKI.icone_id 
               AND `icone_categorie` = :category
               AND `marker_actif` = :markerActif 
               AND `icone_actif` = :iconeActif";
      $datas = array(':markerActif'=>$markerActif,':iconeActif'=>$iconeActif,':category'=>$category); 
      return parent::db_All($sql);
    }
 
//__Affiche les informations pour les catégories
    public function getAllCategory( ) {
      $sql = "SELECT * 
               FROM `markers_icone` as MKI 
               WHERE MKI.icone_actif = 'Oui' ";
      return parent::db_All($sql);
  
    }
}


Cordialement, 
Jordane                                                                 
Messages postés
32452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
C'est le problème quand on écrit de tête sans tester .....
Comme tu peux le voir par toi même .... c'est dsn qu'il aurait fallut écrire et non dns.
Je te laisse corriger de ton côté.
Je vais aller corriger sur le code d'origine.
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

la map s'affiche , mais les catégories non , ça donne ca :
Trying to get property of non-object in C:\wamp\www\map-bdd\view\vueIndex.php on line 18

ça fait référence a ce fichier vueindex.php:
<?php include_once("template/vueHeader.php"); ?>

  <body>

    <?php include_once("template/vueNavbar.php"); ?>
    
    <div id="map-canvas"></div>
    
    <div id="form">
    	<form method="post" id="form" class="form-horizontal formMaps" role="form" action="index.php">
    		<h1>Recherche</h1>
    		<div class="form-group">
    			<div class="col-sm-12">
    				<?php foreach ($categories as $category) : ?>
						<div class="checkbox">
							<label>
								<input type="checkbox" value="<?php echo $category->icone_categorie ?>" name="marker[]" />
								<img src="<?php echo "common/images/marker-map/".$category->icone_icon.".png"; ?>" alt="marqueur <?php echo $category->icone_categorie ?>" />
								<?php echo $category->icone_categorie ?>
							</label>
						</div>
					<?php endforeach; ?>
    			</div>
    		</div>
    		<div class="form-group">
    			<div class="col-sm-offset-1 col-sm-11">
    				<button class="btn btn-default" type="submit" id="submit">Envoyer</button>
    			</div>
    		</div>
    	</form>
    </div>
    
    <script>
    	var marker = <?php echo $allMarkersJson ?>
    </script>

	<?php include_once("template/vueFooter.php"); ?>

	</body>
</html>
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

et en fait jordane , tout ça n'a pas résolu le problème que je dois toujours me connecter avec localhost , l'adresse IP/ le projet n'ouvre pas la page de la map
Messages postés
32452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
Tu pourrais expliqué un peu plus en détail ton souci ???
l'adresse IP/ le projet n'ouvre pas la page de la map

Ca veut dire quoi ça ?
Tu divises l'adresse IP par le projet ?....... ^^

Donc :
Tu remplis quels champs avec quelles données
Tu vas sur quelle page (url)
As tu un message d'erreur ? As tu au moins activé l'affichage des erreurs PHP ?
D'où vient ta variable $categories ? (quel code te sert à l'initialiser et à la remplir ??? )
Si tu en fais un
 print_r($categories);
... qu'est ce que ça t'affiche ?

bref... des détails.... sinon nous ne pourrons rien pour toi !
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

je vais répondre par une réponse au sujet comme ça je fais une capture d'écran
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

normalement , ce qui fait marcher mon projet maintenant c'est l'url http://localhost/map-bdd ou 127.0.0.1/map-bdd, moi je veux faire en sorte que mon adresse IP 10.1.2... remplace le localhost pour que je puisse accéder a mon projet via d'autre ordinateurs sur le même réseau , voila ce que ça donne le code de la classe Map.php et la page vueindex qui appelle les catégories affichées a droite de l'écran comme ça on peut trié ce qui s'affiche sur la Map par catégorie , qui sont stockées sur la base :
Messages postés
32452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
Ne confond pas les identifiants qui permettent à ton code PHP de se connecter à ta bdd ( Ca .. ça ne changera jamais... peut importe que l'utilisateur soit directement sur ton pc ou depuis un pc distant ) et les informations pour accéder à ton site depuis un pc distant.

Ta question concerne le paramétrage de ton apache et/ou de ton réseau.... mais en AUCUN CAS le code PHP ... seul et unique thème abordé par ce forum.
Pour ta demande... trouve un forum (qui n'existe pas sur codes-sources ) traitant de ces paramétrages....
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

d'accord merci beaucoup pour ton temps
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

Bonjour, Jordane , a part la configuration sur appache y'a un autre souci qui concerne a 100 % le code , parce que quand je fais ça :
class BDD {
 var $localhost = "", $user = "", $password = "";

//__Effectue la connexion à la BDD
//__Instancie et renvoie l'objet PDO associé
    function getBdd() {
     if ("127.0.0.1" == $_SERVER['HTTP_HOST']){
   //__variable locale lié à la classe
   $localhost = 'mysql:host=127.0.0.1;dbname=mapbdd;charset=utf8';
   $user = 'root';
   $password = '';
  } elseif ("domaine-distant" == $_SERVER['HTTP_HOST']){
   //__variable OVH lié à la classe
      $localhost = 'mysql:host=HOST;dbname=BDNAME;charset=utf8';
   $user = 'USER';
   $password = 'PASSWORD';
  }
  
  
     $bdd = new PDO($localhost, $user, $password);
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
        return $bdd;
    }
 
}

$BDD = new BDD();

toute les pages marchent , alors que quand je mets mon adresse IP a la place de localhost , la première page qui affiche la Map , donne l'erreur indiqué dans la page VueErreur que j'ai déjà posté avant , mais les autres pages de login et administration ... marchent bien , donc le problème est dans la déclaration de la connexion dans cette page , stp aide moi
Messages postés
155
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
8 avril 2020

c'est bon j'ai résolu le problème , j'ai enlevé le IF et ça marche maintenant
d'une part tu veux programmer en mysqli, et en voyant ta connexion elle en PDO.????