Page 1 sur 1

[résolu] Problème avec fonctions

Posté : 10 juin 2009, 16:43
par Lolu
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]

Posté : 10 juin 2009, 17:04
par stopher
Salut ,

Tout est dans la doc!

Ch.

Posté : 10 juin 2009, 17:15
par Lolu
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]

Posté : 10 juin 2009, 17:46
par stopher
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.

Posté : 10 juin 2009, 18:01
par Lolu
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]

Posté : 10 juin 2009, 18:21
par stopher
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.

Posté : 10 juin 2009, 18:51
par Robert-le-PDG
waw merci stopher, tu as appris où tout ça ?? même avec la doc, des fois on n'y arrive pas.

Posté : 10 juin 2009, 19:01
par stopher
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 ...

Posté : 11 juin 2009, 10:23
par Lolu
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.

Posté : 11 juin 2009, 10:40
par stopher
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.

Posté : 11 juin 2009, 17:27
par Lolu
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.