pas de connection mysql à partir d'une function

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pas de connection mysql à partir d'une function

par gesualda » 11 avr. 2009, 16:49

J'ai suivi tes conseils et cela fonctionne
Merci beaucoup et bonne après midi

Gesualda

par Ryle » 11 avr. 2009, 16:34

En fait, les variables que tu déclares dans une fonction ne sont définies que localement. A la fin de l'exécution de la fonction, elles sont perdues (toujours ce côté autiste ;))

Tu peux donc soit déclarer tes variables hors de la fonction, puis les spécifier comme globales (ce qui te permet de les modifier à l'intérieur de la fonction), soit demander à ta fonction de retourner une valeur que tu pourras récupérer :
$code_region = array(); 
$nom_region = array();    // déclaration des variables hors de la fonction

function region_connect() {
  global $code_region, $nom_region; // spécifications des variables externes
  ...
      array_push($code_region, ...); // met à jour la variable externe
  ...
}

// autre solution 

function region_connect() {
  ...
      array_push($code_region, ...); // met à jour la variable INterne
  ...
  return $code_region; // retourne la valeur de la variable interne
}

$code_region = region_connect(); // récupère la valeur retournée par la fonction dans la variable externe

par Elie » 11 avr. 2009, 14:44

Il faut rajouter dans global toutes les $variables qui ne sont pas défini au sein de la fonction ...

par gesualda » 11 avr. 2009, 12:20

Bonjour Ryle,

Tout d'abord merci de la rapidité de la réponse, j'ai bien compris et rajouter:

Code : Tout sélectionner

global $serveur, $admin, $mdp, $base;
Donc plus d'erreur de connexion. Par contre toujours dans le même esprit, pourquoi dans le cadre de cette même function l'extraction de la base de ce fait plus ?
Faut-il également initialiser les autres variables ?

Merci de ton aide.

par Ryle » 11 avr. 2009, 11:26

C'est une question de portée.

Les fonctions ont en effet un petit côté autiste : elles ne sont absolument pas conscientes de ce qui se passe autour d'elles si on ne le leur dit pas explicitement :)

Pour qu'elles puissent avoir accès à une variable déclarée à l'extérieure de la fonction, il te faut soit lui passer les valeurs en paramètres, soit lui spécifier qu'il s'agit de variables globales, et qu'elle doit aller les chercher à l'extérieur :
function region_connect($serveur, $admin, $mdp) { // valeurs à donner lors de l'appel à la fonction
  ....
}

// ou bien 

function region_connect() {
  global $serveur, $admin, $mdp; // le mot clé global indique à la fonction qu'il s'agit de variables externes
  ....
}
Dans le premier cas, tu ne passes que les valeurs à la fonction, dans le second cas tu lui indiques la présence des variables externes. La différence, c'est que dans le second cas tu peux également modifié ces variables, alors que tu ne peux pas le faire dans le premier (vu que tu récupères juste les valeurs)

HTH :)

pas de connection mysql à partir d'une function

par gesualda » 11 avr. 2009, 11:05

Bonjour à tous,

Pourriez-vous m'expliquer pourquoi la connexion ne se fait pas en passant par une function alors que si je ne passe pas par une function cela fonctionne ? Merci !

Apparamment c'est l'initialisation qui ne se fait pas voici les erreurs :

Code : Tout sélectionner

Notice: Undefined variable: serveur in Warning: mysql_pconnect() [function.mysql-pconnect]: Access denied for user 'ODBC'@'localhost'

$serveur = "localhost";
$admin   = "moi";
$mdp     = "mdp";
$base    = "db_fc";

function region_connect()
	{		
	$connexion = mysql_pconnect($serveur, $admin, $mdp)or die('Erreur de connection à la base : '.mysql_error());
	
	if($connexion != false)
	{
	  $base_connect = mysql_select_db($base, $connexion);
	  $sql1 = "SELECT `id_region`, `nom_region`"." FROM `fc_region`"." ORDER BY `id_region`";
	  $rech_regions = mysql_query($sql1);
	  
	  $code_region = array();
	  $nom_region = array();		
	  
	  $nb_regions = 0;
	  if($rech_regions != false)
	{
	while($ligne = mysql_fetch_assoc($rech_regions))
	{
		
	  array_push($code_region, $ligne['id_region']);
	  array_push($nom_region, $ligne['nom_region']);
	  
	  $nb_regions++;		
	    }
	  }
	}				
			}