Transformer Code PDO à Mysqli

Résolu
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 - 11 mai 2018 à 11:58
 ZZZ - 1 sept. 2019 à 23:14
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 mai 2018 à 12:17
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 12:21
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
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
Modifié le 11 mai 2018 à 15:17
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);
  
    }
}


0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 14:49
Bonjour, ca donne ça
Parse error: syntax error, unexpected '';charset=utf8'' (T_CONSTANT_ENCAPSED_STRING) in C:\wamp\www\map-bdd\model\BDD.php on line 35
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
11 mai 2018 à 14:59
Correction faite dans le code.
Il manquait un point.
$dsn = 'mysql:host='.$this->host.';dbname='.$this->dbName.';charset=utf8';
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 15:04
Undefined variable: dns in C:\wamp\www\map-bdd\model\BDD.php on line 37
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
11 mai 2018 à 15:17
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.
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 15:26
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>
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 22:12
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 :
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
11 mai 2018 à 22:33
Si je comprend bien... tu veux héberger ton site sur ton PC local... et y accéder depuis d'autres ordi de ton réseau....
Dans ce cas... il faut mettre le site en ligne. cela se passe au niveau de ton apache....
Quel rapport avec ton code ???

A la limite... tu vires le IF de ta connexion et tu entres les identifiants en "dur". A part ça... ce n'est que du paramétrage à faire et donc aucun rapport avec le forum PHP.
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
11 mai 2018 à 22:34
NB : Pour l'accès à la bdd... les identifiants seront toujours (tant que ton site sera hébergé sur ton pc et non sur un serveur web)
 $this->host = '127.0.0.1'; // ou localhost c'est pareil...
        $this->user = 'root';
        $this->password = '';        
        $this->dbName = 'mapbdd';

et ça .... peut importe l'ip avec laquelle tu vas accéder à ton site.
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 22:41
mais quand ca sera paramétré , avec quoi l'utilisateur de l'autre ordinateur va accéder a mon projet ? via mon adresse IP ou bien via localhost ? j'ai vu plusieurs tuto sur la configuration , mais de 1 je ne trouve pas les lignes qui doivent être modifié dans le fichier httpconf de Apache , et de 2 e n'ai pas osé faire des modifications sur le fichier Hosts de Windows , 'ai pas voulu foiré tout sur le pc du boulot
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
11 mai 2018 à 23:01
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....
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
11 mai 2018 à 23:04
d'accord merci beaucoup pour ton temps
0
Rejoignez-nous