Page 1 sur 1

Fonction de connexion a une base de donnee

Posté : 15 août 2008, 01:06
par Invité
bonjour,

J'ai mis une fonction de connexion a une base de donnee, mais ca aura l aire de ne pas marcher, ca me donne l'erreur "Erreur:":
<?php 
function connexion() 
{ 
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() 

);
mysql_select_db($db) or die ('Erreur :'.mysql_error());
}

?> 
<?
$host = '';
$user = '';
$pass = '';
$db = '';

include ("functiontest.php");

connexion(); 

echo "connexion a $host reussi";
?>

Posté : 15 août 2008, 04:01
par chrislabricole
Je pense que c'est parce-que tes varaibles qui contiennent tes identifiants de connexion à la BdD sont or de ta fonction, essais de faire comme ça :

fichier functions.php (par exemple)
<?php
function connexion(){ 

	$host = '...';
	$user = '...';
	$pass = '...';
	$db = '...'; 

	$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error());
	mysql_select_db($db, $link) or die ('Erreur :'.mysql_error());
}
?>
ton fichier "normal":
<?php
/* Inclusion du fichier de fonctions */
include('./functions.php');

// Connexion à la base
connexion();

/*
 * Tes requêtes etc...
 */

// Fermeture de la connexion à la BdD
mysql_close($link);
?>
Ça devrait marcher :)

Posté : 15 août 2008, 16:04
par Invité

Code : Tout sélectionner

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in ...... on line 13 [quote][/quote]

Posté : 15 août 2008, 16:11
par chrislabricole
Alors essaie d'enlever le $link dans le mysql_close()...

Posté : 15 août 2008, 16:20
par Invité
C fait, je pense que je dois placer mes info de login $host,.. dans le 2eme fichier qui appelle a ma fonction, j ai mis ainsi:
<?php
/* Inclusion du fichier de fonctions */
include('functions.php');

// Connexion à la base
connexion();

echo 'connexion a' .$host. 'resussie';


// Fermeture de la connexion à la BdD
mysql_close();
?> 

donne: connexion a resussie

Posté : 15 août 2008, 16:27
par chrislabricole
$host ne renvoi rien à l'extérieur de ta fonction car dans les fonctions, par défauts, les variables sont en privé, il faut les définir en global pour que ça marche :)

Posté : 15 août 2008, 16:45
par Invité
ca veut dire que je dois les declarer en chaque page que je declare ma fonction?

Posté : 15 août 2008, 17:33
par chrislabricole

Posté : 15 août 2008, 19:44
par Hywan
Hey :),

Attention, les variables ne sont pas déclarées en privé mais en local (pas la même notion).
En programmation fonctionnelle (et autres) on a la notion de portée de variable. Quand tu déclares une variable dans une fonction, elle ne serait pas disponible à l'extérieure de la fonction. De la même manière qu'une variable déclarée dans une boucle ne sera pas disponible à l'extérieure, etc.

Attention avec l'utilisation des variables globales, ça peut être dangereux dans certains cas. On préférera ne pas mettre de données sensibles en global. On pourra par contre utiliser des constantes définies à la racine de l'application.

Chrislabricole — en parlant de variable privée — a sans doute fait une confusion avec la visibilité des données en programmation orientée objet.

Posté : 16 août 2008, 07:40
par Invité
Hey :),

Attention, les variables ne sont pas déclarées en privé mais en local (pas la même notion).
En programmation fonctionnelle (et autres) on a la notion de portée de variable. Quand tu déclares une variable dans une fonction, elle ne serait pas disponible à l'extérieure de la fonction. De la même manière qu'une variable déclarée dans une boucle ne sera pas disponible à l'extérieure, etc.

Attention avec l'utilisation des variables globales, ça peut être dangereux dans certains cas. On préférera ne pas mettre de données sensibles en global. On pourra par contre utiliser des constantes définies à la racine de l'application.

Chrislabricole — en parlant de variable privée — a sans doute fait une confusion avec la visibilité des données en programmation orientée objet.
ca veut dire je dois mettre mes variable comme suite:
<?php
define("host", "localhost");
define("user", "username");
define("password", "****");
define("db", "dbase");
?>


Posté : 16 août 2008, 09:04
par AB
On a l'habitude de mettre les constantes en majuscules.

Maintenant tu t'embêtes pas mal pour rien puisqu'en utilisation courante tu n'as généralement pas à afficher echo 'connexion a' .$host. 'resussie';
mais tu affiches directement le résultat de ta requête. Donc pas besoin de $host qui est définie en local dans la fonction connexion(); Ou si tu y tiens vraiment tu peux simplement mettre
<?php
/* Inclusion du fichier de fonctions */
include('functions.php');

// Connexion à la base
connexion();

echo 'connexion à la base de donnée réussie';


// Fermeture de la connexion à la BdD
mysql_close();
?>