Page 1 sur 1

Utilisation de mysqli pour connexion à une DB.

Posté : 01 sept. 2014, 15:16
par Wichtm
Bonjour à tous,

Je suis actuellement en train de développer une petite application en php sur un site bootstrap afin de pouvoir accéder à une base de données, ajouter des des imprimantes, les éditer, afficher... etc.

Pour l'instant, j'ai toute la base du site de créé (L'html et le css en soi..)

J'en suis à la page de connexion index.php sur laquelle je tente en vain de faire une connexion sur ma base.

Après de multiples erreurs et essais, je viens vous demander de l'aide car étant un grand néophyte du PHP, je n'ai plus de pistes à suivre.

Je suis pour l'instant bloqué sur des erreurs de Undefined variable..

Voici le code utilisé pour la connexion à la DB.
<?php
include_once "include/db_connect.php";
include_once "class/MySQL.php";

if($_POST != array()){
	$madatabase = new MySQL();
	$madatabase->connect();
	$madatabase->select();

	print_r($_POST);
	exit;
}

?>
Le reste de index.php contient du html inutile pour ma question, hormis un bouton avec la méthode POST pour se connecter.

Voici maintenant db_connect.php :
<?php
include_once "include/psl-config.php";  
$mysql = new mysql(HOST, USERNAME, PASSWORD, DATABASE);
?>
J'ai déjà quelques problèmes avec cela, care psl-config.php qui est inclus, contient des constantes de connexion à la BD (localhost, monUSer, monPassword, maDB)

Mais j'ai quand même un autre fichier PHP que j'ai appelé MySQL.php :
<?php
class MySQL{

	private $_server = 'monServeur';
	private $_username = 'monUser';
	private $_password = monPassword;
	private $_link = null;
	private $_port = monPort;
	private $_database = 'maBD';
	
	//Constructeur
	public function construct($_server, $_username,$_password,$_port,$_database,$_link){
		$this->$_server = $server;
		$this->$_username = $username;
		$this->$_password = $password;
		$this->$_port = $port;
		$this->$_database = $database;
		$this->$_link = $link;
	}
	public function connect (){
		$link = mysqli_connect($server , $username , $password , $port)
		or die('Impossible de se connecter :'.mysql_error());
				echo 'Connexion réussie!';
			}

	public function select (){
		$db_selected = mysqli_select_db ($database, $link);

	}


}
?>
Ce dernier contient le constructeur ainsi que les fonctions que j'ai crées afin de me connecter sur la BD et de sélectionner laquelle j'ai besoin. J'ai aussi crée des constantes que j'ai instanciées via le constructeur. Mais je ne sais pas si je m'y prends correctement ou pas. J'ai toujours une erreur , il ne reconnaît pas mes valeurs de connexions : Undefined variable (pour server, username, password ainsi que port)

Merci de m'aider, je suis perdu et je ne sais avancer sans rajouter d'erreurs!

Re: Utilisation de mysqli pour connexion à une DB.

Posté : 01 sept. 2014, 16:37
par hunomina972
Bonjours Wichtm. PHP, comme tout les autres languages, est mis à jour de temps en temps.
Dans la derniere version de PHP, la façon de se connecter à une base de donnée à changer.
La façon avec laquelel tu essaye de te connecter est un peu similaire mais cependant erroné ;)
Il faut faire comme suit :
$bdd = new PDO('mysql:host=ici tu ajoutele nom de ton hote;dbname=le nom de ta BDD', 'ton pseudo', 'ton mot de passe');
Ceci permet de se connecter ensuite tu peut utiliser le try/catch pour afficher des erreurs :
try {
	$bdd = new PDO('mysql:host=ici tu ajoutele nom de ton hote;dbname=le nom de ta BDD', 'ton pseudo', 'ton mot de passe');
	}
	catch (PDOException $e) {
        exit('Erreur : ' . $e->getMessage());
	}
Pour plus d'information doccumente sur PDO php ;)
http://php.net//manual/fr/book.pdo.php

Re: Utilisation de mysqli pour connexion à une DB.

Posté : 01 sept. 2014, 16:41
par sirakawa

Re: Utilisation de mysqli pour connexion à une DB.

Posté : 01 sept. 2014, 21:52
par moogli
salut,

pour répondre à ta question d'origine :
le problème vient de ta méconnaissance de la POO en php).
ta méthode connect()
<?php
  public function connect (){
                $link = mysqli_connect($server , $username , $password , $port)
                or die('Impossible de se connecter :'.mysql_error());
                                echo 'Connexion réussie!';
                        }
(Attention du as une erreur de syntaxe il te manque un point virgule sur la ligne du mysqli_connect.

tu utilise les variables $server, $username etc.
or ses 4 variables n'existe pas dans la méthode, car dasn ce cas le scope (la portée) est bien la méthode.
si tu veux utilisé une propriété de l'objet il te faut utiliser $this.
dans ton cas
<?php
$this->link =  mysqli_connect($this->_server , $this->_username , $this->_password , $this->_port);
ce que tu fais correctement dans ton constructeur.

Pour le coté conception :
- Mysqli existe aussi en tant qu'objet (les fonctions procédurales sotn des wrappers sur ces objets) du coup tu peux simplement étendre cette classe ;)
- quitte a partir sur de la POO je préfère utiliser PDO qui ne t'apporte pas forcément plus de chose que mysqli, hormis la possibilité de changer de sgbd seulement avec la chaîne de connexion (bon après il te faut utiliser du SQL normé mais c'est une autre histoire :).

Coté code :
if($_POST != array())
la je dis NON, utilise la fonction is_array() et à la limite un count pour savoir s'il y a des choses dans le tableau ;)


@+