[résolu] Problème avec fonctions

Eléphanteau du PHP | 14 Messages

10 juin 2009, 16:43

Bonjour,

voilà je veux tout simplement éclaircir mon code php, donc mettre des fonctions plutôt que des requêtes sur ma page "index.php".
Cette fonction est contenue dans une autre page: "func.php" qui contient toutes mes fonctions.
Je fais bien un include sur ma page d'index: include ("mylib/func.php"); .
Ma requête :



$req="SELECT u.LPR, c.libelle_ligne from user_lpr u,collection c";
$req.=" WHERE c.LPR=u.LPR and u.usr_id =".$_SESSION['USR'];
$res=mysql_query($req);
if ($res)
{
while($data=mysql_fetch_array($res))
{
$lpr[$data['LPR']]=$data['libelle_ligne'];
}

$npo->assign("lpr",$lpr);
}


(L'assign c'est parce que je me sers de templates, donc je donne la valeur de mon résultat a une variable en templates).

Je voudrais savoir ce que je dois écrire dans ma page principale et dans la page de fonction.

Et donc en clair, je n'arrive pas a trouvé la bonne syntaxe pour que cela fonctionne comme si je laissais ma requête tel qu'elle est. Si vous pouvez m'aider, je voue en remercie d'avance :wink:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur][/b]
Modifié en dernier par Lolu le 12 juin 2009, 09:25, modifié 1 fois.

ViPHP
ViPHP | 1136 Messages

10 juin 2009, 17:04

Salut ,

Tout est dans la doc!

Ch.

Eléphanteau du PHP | 14 Messages

10 juin 2009, 17:15

J'y met du miens ce n'est pas une question de flemme ou de vouloir se faire macher tout le travail mais je ne trouve pas d'exemple de ma situation et je n'arrive pas à adapter la doc a ma situation pour que cela fonctionne.
J'ai essayé pas mal de choses sans résultat.
Désolé... mais j'ai du mal à m'y retrouver. :?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1136 Messages

10 juin 2009, 17:46

Ton code actuel ne nous permet pas de t'aider d'avantage ...

Tu nous donnes une bride de code que tu souhaites mettre dans une fonction ..

On ne sait pas ce que tu as déjà fait , les paramètres à passer ect ..

Donnes nous plus de détails , ton fichier index actuel par exemple , avec le detail de ce que tu essayes de faire , et ce qui ne fonctionne pas !

Ch.

Eléphanteau du PHP | 14 Messages

10 juin 2009, 18:01

Désolé pour le manque d'information.
Ce que j'essaye de faire , c'est que les requêtes ci-dessous soient remplacées par des appels de fonctions, qui puisent ces fonctions dans ma page où elles sont stockées.
Voici mon fichier index:
<?php
session_start();
include ("mylib/func.php");
init_profile();
if(!isset($_SESSION['LANG'])):		
	$lng="fr";
	else:
	$lng=$_SESSION['LANG'];
endif;
include ("setup.inc.php");
include ("config.inc.php");
//include ('config.inc.php');
$npo = new Smarty_po($_SESSION['LANG']);
//-------------------------------------------------------------------------------



//$_SESSION['USR']='Eric';
unset ($_SESSION['pays']);
unset ($_SESSION['sais']);
unset ($_SESSION['lpr']);
if (isset($_POST))
//-------------------- Le User est il authentifie ? ----------------------
if(!isset($_SESSION['USR']))
 $npo->display("login.tpl");
else
{// connexion à la base de donnée
$conn_my = mysql_connect($MY_srv , $MY_user , $MY_pwd ) 
	or die('Connexion impossible !') ;
mysql_select_db($MY_bd) or die('Impossible de trouver la base !');
	
	$npo->assign("MyUsr",$_SESSION['USR']);
	$npo->assign("lnkupd",link2upd());


//Requête LIGNE PRODUIT	
	$req="SELECT u.LPR, c.libelle_ligne from user_lpr u,collection c";
	$req.=" WHERE c.LPR=u.LPR and u.usr_id =".$_SESSION['USR'];
	$res=mysql_query($req);
	if ($res)
		{
		while($data=mysql_fetch_array($res))
		{
			$lpr[$data['LPR']]=$data['libelle_ligne'];
		}
		
		$npo->assign("lpr",$lpr);
		}
	
//Requête SAISON	
	$req="SELECT c.saison from collection c";
	$res=mysql_query($req);
	if ($res)
		{
		while($data=mysql_fetch_array($res))
		{
			$sais[$data['saison']]=$data['saison'];
		}
			$npo->assign("sais",$sais);
		}
	

//Requête PAYS	
	$req="SELECT u.code_pays, p.nompays from user_pays u,pays p";
	$req.=" WHERE p.codepays=u.code_pays and u.usr_id =".$_SESSION['USR'];
	$res=mysql_query($req);
	if ($res)
		{
		while($data=mysql_fetch_array($res))
		{	$pays[$data['code_pays']]=$data['nompays'];
			
		}
		
		$npo->assign("pays",$pays);
		}
		
		

	$npo->display("YourIn.tpl");
	

}
//----------------------------------------------------------------------
?>


[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1136 Messages

10 juin 2009, 18:21

Ok , c'est mieux .. :wink:

Alors , commençons par ta fonction :

Dans ton fichier func.php , nous allons créer une nouvelle fonction nommée get_produits ( tu changeras si tu le souhaites )

La fonction aura besoin pour fonctionner uniquement l'instance de Smarty , on va donc lui passer un seul paramètre .

Ce qui devrai donner :
function get_produits( &$P_smarty=null ){

   //on insère ton code 
   $req="SELECT 
                 u.LPR,
                 c.libelle_ligne 
             FROM 
                 user_lpr u,
                 collection c
             WHERE 
                 c.LPR=u.LPR 
             AND
                 u.usr_id =".mysql_real_escape_string($_SESSION['USR']);

    $res=mysql_query($req)or die(mysql_error());
    if ($res){
        while($data=mysql_fetch_array($res)){
        
            $lpr[$data['LPR']]=$data['libelle_ligne'];
        }
        //assignation du resultat au template
        $P_smarty->assign("lpr",$lpr);

    }

}
Voilà ta fonction prête à être utilisée, nous allons maintenant l'appeler dans ton index :

Ce qui te donneras un index.php comme ceci :
<?php
session_start();
include ("mylib/func.php");
init_profile();
if(!isset($_SESSION['LANG'])):        
    $lng="fr";
    else:
    $lng=$_SESSION['LANG'];
endif;
include ("setup.inc.php");
include ("config.inc.php");
//include ('config.inc.php');
$npo = new Smarty_po($_SESSION['LANG']);
//-------------------------------------------------------------------------------



//$_SESSION['USR']='Eric';
unset ($_SESSION['pays']);
unset ($_SESSION['sais']);
unset ($_SESSION['lpr']);
if (isset($_POST))
//-------------------- Le User est il authentifie ? ----------------------
if(!isset($_SESSION['USR']))
 $npo->display("login.tpl");
else
{// connexion à la base de donnée
$conn_my = mysql_connect($MY_srv , $MY_user , $MY_pwd ) 
    or die('Connexion impossible !') ;
mysql_select_db($MY_bd) or die('Impossible de trouver la base !');
    
    $npo->assign("MyUsr",$_SESSION['USR']);
    $npo->assign("lnkupd",link2upd());


//Requête LIGNE PRODUIT    ( appel de ta fonction )
get_produits( $npo );
    
//Requête SAISON    
    $req="SELECT c.saison from collection c";
    $res=mysql_query($req);
    if ($res)
        {
        while($data=mysql_fetch_array($res))
        {
            $sais[$data['saison']]=$data['saison'];
        }
            $npo->assign("sais",$sais);
        }
    

//Requête PAYS    
    $req="SELECT u.code_pays, p.nompays from user_pays u,pays p";
    $req.=" WHERE p.codepays=u.code_pays and u.usr_id =".$_SESSION['USR'];
    $res=mysql_query($req);
    if ($res)
        {
        while($data=mysql_fetch_array($res))
        {    $pays[$data['code_pays']]=$data['nompays'];
            
        }
        
        $npo->assign("pays",$pays);
        }
        
        

    $npo->display("YourIn.tpl");
    

}
//----------------------------------------------------------------------
?>
Et voilà ,

Note : le code donné ici est fait à "main levé" il peut y avoir des erreurs de frappe ou autre ..

Voilà je te laisse en faire autant pour les autre portions de code que tu souhaites externaiser en fonction .

Ch.

Robert-le-PDG
Invité n'ayant pas de compte PHPfrance

10 juin 2009, 18:51

waw merci stopher, tu as appris où tout ça ?? même avec la doc, des fois on n'y arrive pas.

ViPHP
ViPHP | 1136 Messages

10 juin 2009, 19:01

waw merci stopher, tu as appris où tout ça ?? même avec la doc, des fois on n'y arrive pas.


Sur ce forum , des maîtres m'ont tout appris :merci:
:lol: ...



Inscrits toi sur ce forum , et n'hésites pas à poser des questions .. tu apprendras de nombreuses choses au fil du temps ...

Eléphanteau du PHP | 14 Messages

11 juin 2009, 10:23

Pour ne pas faire de confusion Robert et moi même sommes deux personnes diffèrentes ! ^^

Cela fonctionne parfaitement merci beaucoup à toi ça me sauve. :wink:

Toutefois j'aimerais comprendre certaines choses pour mieux me débrouiller.

Je déclare en début de page index.php: $npo = new Smarty_po($_SESSION['LANG']); .
Et ensuite j'avais l'habitude d'assigner mes variables smarty dans $npo.
Là tu en crées une nouvelle dans quel but ?

Et à quoi sert : ( &$P_smarty=null) ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

:arrow: Edit: Me voilà inscrit, cela me permettra de mieux m'instruire.

ViPHP
ViPHP | 1136 Messages

11 juin 2009, 10:40

Pour ne pas faire de confusion Robert et moi même sommes deux personnes diffèrentes ! ^^
Ah oui effectivement ! Pourquoi il me dit merci alors ? ...
Je déclare en début de page index.php: $npo = new Smarty_po($_SESSION['LANG']); .
En fait , tu crées une instances de Smarty , qui te retourne une référence sur l'objet crée .
Et ensuite j'avais l'habitude d'assigner mes variables smarty dans $npo.
Tu assignes tes variable à smarty en utilisant la méthode assign() de l'objet Smarty crée auparavant , pour utiliser cette méthode "public" , tu utilises la référence $npo .
Là tu en crées une nouvelle dans quel but ?
Je n'en crée pas une nouvelle , je déclare juste à la fonction qu'elle doit attendre en paramètre , une référence . ( le "&" devant $P_smarty n'est pas obligatoire , car depuis php5 tout les objets sont passé par référence par défaut .. ) .

Le =null , permet de donner une valeur par défaut si aucun paramètre n'est passé ( tu peux aussi le retirer . )

Pour meirux comprendre les histoires de références objet ect .. je te propose cette documentation :

http://fr3.php.net/manual/fr/language.oop5.php

Ch.

Eléphanteau du PHP | 14 Messages

11 juin 2009, 17:27

Ah oui effectivement ! Pourquoi il me dit merci alors ? ...
Excellente question ! :D

Voilà toutes mes requêtes fonctionnent merci.
J'ai d'autre problèmes que je partagerais avec vous!
Merci encore pour ton aide et tes explications !
Résolu.