Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2008, 18h05   #1
Membre Expert
 
Avatar de Harry
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2002
Messages : 1 182
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2002
Messages : 1 182
Points : 1 079
Points : 1 079
Par défaut Problème compatibilité PHP4 et PHP5

Bonjour,

Je tente la migration MySQL 3.23 PHP4 vers PHP5 et MySql5.

J'ai un problème sur une fonction dont les variables sont envoyés d'une certaine manière.

Voici un exemple concret, variable à suivre : $query ($str_query dans la fonction du dessous).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (!res_setSearchQuery($query = ''))												//requête de recherche
		{
			err_set(__FILE__, __LINE__);
			return SHARED_FALSE;
		}
		$res = false;
 
		if (!$res = mysql_query($query))													//extrait les infos des lots et agence, pas tarifs
		{
			db_mysql_trace($dg);
			$dg['query'] = $query;
			err_set(__FILE__, __LINE__, 'ERR_MYSQL_QUERY', $dg);
			return SHARED_FALSE;
		}
Il semblerait que la fonction res_setSearchQuery renvoie vrai alors que la variable $query reste vide.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function res_setSearchQuery(&$str_query)
	{
		static $_f = 'res_setSearchQuery';
 
 
		if (!res_setSyndStr($syndstr = ''))											//ids agences d'un syndicat
		{
			err_set(__FILE__, __LINE__);
			return SHARED_FALSE;
		}
 
		//lib_trace_var($_f, 'syndstr', $syndstr);
 
		$vn_searchtype = $vn_net_id = $vn_agency_id = '';
		$sharedstr = '';
 
		$vn_searchtype	= &$GLOBALS['vn_searchtype'];
		$vn_net_id		= &$GLOBALS['vn_net_id'];
		$vn_agency_id	= &$GLOBALS['vn_agency_id'];
 
		$sharedstr		= "SELECT lots.RefAgence,lots.No_Lot,lots.Ref_Lot,lots.No_Tarif,lots.Type_Bien,lots.Type_Caution,lots.Taux_Caution,lots.DateBlocage,lots.Lot_Bloque,lots.Nb_Couchages,lots.Surf_Totale,lots.AfficherPrixInternet,lots.Abattement,agence.RaisonSociale,agence.TauxAcompte,agence.TypeArrondi,agence.Mail,agence.MailFormat,agence.Adresse1,agence.Adresse2,agence.MenageIntegre FROM lots LEFT JOIN agence ON agence.RefAgence=lots.RefAgence";
 
 
		//
		//Recherche par le formulaire client (pour les sites clients)
		//
		if($_POST['searchtype'] == 'form_client')
		{
			//echo "Formulaire client";
			$_SESSION['agency_id'] = $_POST['RefAgence'];
 
			$str_query = "$sharedstr WHERE (lots.RefAgence = '".$_POST['RefAgence']."'";
 
			res_setCritStr($critstr = '');
 
			if (!lib_emp_str($critstr))
						$str_query .= " AND $critstr";
 
			$str_query .= ')';
		}
else ... je coupe la
Ce code se répète avec des else et si aucun cas de $_POST['searchtype'] n'est accepté une erreur est renvoyé sinon ca renvoie vrai.

Donc théoriquement pour arriver jusqu'à l'exécution de $res = mysql_query($query) $query ne peux pas être vide.

Pourtant il l'est d'après l'erreur retourné par MySQL. J'en déduis que la méthode par référence utilisé pour le transfert du contenu de la variable $query n'est plus supporté avec PHP5 ?

Merci
__________________

Attention le .NET sur PDA peut causer des chutes de cheveux
Harry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 19h47   #2
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Bonjour Harry,

Pour le passage par référence, seules les variables, les nouveaux objets et les retour de référence par une fonction doivent être utilisés. Or, dans ton code, c'est une expression qui est passée. Il faut donc que tu initialises $query avant d'appeler ta fonction.

Un exemple peut-être plus parlant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function test(&$var)
{
    $var = 'ok';
}
 
// pas bon
test($var = 'ko');
echo 'test($var = \'ko\') : '.$var;
 
// bon ! ;-)
$var = 'ko';
test($var);
echo '<br/>$var = \'ko\'; test($var) : '.$var;
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 20h00   #3
Membre Expert
 
Avatar de Harry
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2002
Messages : 1 182
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2002
Messages : 1 182
Points : 1 079
Points : 1 079
ok, merci Eusebe !

Si ce n'est que ça je pourrais arranger la centaine de fonctions qui ont été faites comme ça très rapidement !

Je ne peux pas encore faire le test, mais lundi je refais basculer sur le nouveau serveur et je met en oeuvre.
__________________

Attention le .NET sur PDA peut causer des chutes de cheveux
Harry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h00.


 
 
 
 
Partenaires

Hébergement Web