8797 sujets

Développement web côté serveur, CMS

Lorsque l'on créé une fonction dans une page php, je suppose qu'elle fonctionne que dans cette page ?

Peut on realiser des fonctions qui puissent etre utilisé sur plusieurs pages d'un site ?

Genre souvent on a besoin de se connecter a la base Mysql, alors on pourrait creer une fonction qui realise cette etape , non ?

Merci
Tu crées un fichier contenant tes fonctions communes, et dans chaque page où tu as besoin de l'une d'elle, tu inclus ta page de fonctions avec include ou require.
Pour ceux que ça intéresse, voici un ensemble de fonctions SQL que j'ai créées pour faire en une ligne ce qui en prend plusieurs à chaque fois. Ca me simplifie pas mal la vie :

sqlFonctions.inc.php
Pour l'adapter à votre site, changer simplement les 4 lignes define(...)
<?php
define('_SERVEUR','serveurBD');
define('_IDENTIFIANT','identifiantBD');
define('_MOT_DE_PASSE','mdpBD');
define('_BASE_DE_DONNEES','nomBD');

[b]// Connexion à la base de données
// (inutile de l'appeler dans vos scripts si vous utilisez les fonctions)[/b]

function getIdConnex()
{
	$id=mysql_connect(_SERVEUR,_IDENTIFIANT,_MOT_DE_PASSE)or exit(mysql_error());
	mysql_select_db(_BASE_DE_DONNEES,$id)or exit(mysql_error());
	return $id;
}

[b]// Requête de type SELECT[/b]

function sqlDelete($from,$where,$limit='')
{
	$idConnex=getIdConnex();
	$requete='DELETE FROM '.$from.' WHERE '.$where;
	if(!empty($limit))
	{
		$requete.=' LIMIT '.$limit;
	}
	$requete.=';';
	$resultat=mysql_query($requete,$idConnex)or exit($requete.'<br />'.mysql_error());
	mysql_close($idConnex);
	return $resultat;
}

[b]// Requête de type INSERT[/b]

function sqlInsert($into,$values)
{
	$idConnex=getIdConnex();
	$requete='INSERT INTO '.$into.' VALUES '.$values.';';
	mysql_query($requete,$idConnex)or exit($requete.'<br />'.mysql_error());
	$idInsere=mysql_insert_id($idConnex);
	mysql_close($idConnex);
	return $idInsere;
}

[b]// Requête de type OPTIMIZE[/b]

function sqlOptimize($table)
{
	$idConnex=getIdConnex();
	$requete='OPTIMIZE TABLE '.$table.';';
	mysql_query($requete,$idConnex)or exit($requete.'<br />'.mysql_error());
}

[b]// Requête "en toutes lettres"
// (à utiliser en cas de requête plus complexe comme ALTER)[/b]

function sqlRequest($requete)
{
	$idConnex=getIdConnex();
	return mysql_query($requete,$idConnex)or exit($requete.'<br />'.mysql_error());
}

[b]// Requête de type SELECT[/b]

function sqlSelect($select,$from,$where='',$group='',$having='',$order='',$limit='')
{
	$idConnex=getIdConnex();
	$requete='SELECT '.$select.' FROM '.$from;
	if(!empty($where))
	{
		$requete.=' WHERE '.$where;
	}
	if(!empty($group))
	{
		$requete.=' GROUP BY '.$group;
	}
	if(!empty($having))
	{
		$requete.=' HAVING '.	$having;
	}
	if(!empty($order))
	{
		$requete.=' ORDER BY '.$order;
	}
	if(!empty($limit))
	{
		$requete.=' LIMIT '.$limit;
	}
	$requete.=';';
	$lignes=mysql_query($requete,$idConnex)or exit($requete.'<br />'.mysql_error());
	$nbLignes=mysql_num_rows($lignes);
	if($nbLignes>0)
	{
		for($i=0;$i<$nbLignes;$i++)
			$resultats[$i]=mysql_fetch_assoc($lignes)or exit($requete.'<br />'.mysql_error());
	}
	else $resultats=NULL;
	mysql_free_result($lignes);
	mysql_close($idConnex);
	return $resultats;
}

[b]// Requête de type UPDATE[/b]

function sqlUpdate($update,$set,$where='',$limit='')
{
	$idConnex=getIdConnex();
	$requete='UPDATE '.$update.' SET '.$set;
	if(!empty($where))$requete.=' WHERE '.$where;
	if(!empty($limit))$requete.=' LIMIT '.$limit;
	$requete.=';';
	mysql_query($requete,$idConnex)or exit($requete.'<br />'.mysql_error());
	mysql_close($idConnex);
}
?>
Pour appeler ce fichier depuis une autre page :
include 'sqlFonctions.inc.php';
// ou
require 'sqlFonctions.inc.php';
Si vous avez des questions, des idées d'amélioration sur ces fonctions, n'hésitez pas.
Modifié par 84mickael (12 Aug 2005 - 12:37)
Olivier a écrit :
C'est mieux encore d'utiliser une class mickael Smiley cligne
J'y ai pensé, mais je ne vois pas l'intérêt... Smiley confused
84mickael a écrit :
J'y ai pensé, mais je ne vois pas l'intérêt... Smiley confused


Ca raccourci encore le code et le rend encore plus propre et regroupe bien les fonctions qui vont ensemble (gestion mysql ici) etc.
Et puis j'utiliserais plus de tableaux associatifs. Cela de permet de simplifier et de limiter les paramètres de tes fonctions.

++
Mes fonctions ont des paramètres avec des valeurs par défaut. Le plupart du temps j'utilise la syntaxe suivante :

$resultats=sqlSelect( 'champ1, champ2, champ3' , 'TABLE1' , 'id1='.$id );

C'est pas franchement compliqué !

Je me sers pas mal des classes, mal mais pour moi ça sert à stocker des données pour un type d'objet afin de le manipuler avec des fonctions qui lui sont propres.

En ce qui concerne les bases de données, je ne vois aucune information à stocker entre plusieurs appels de fonctions. Je n'ai souvent qu'une requête à faire par ci par là et je préfère donc n'être connecté que le temps de cette requête.

Dans le cas où beaucoup de requêtes devraient être éxécutées successivement, oui l'utilisation d'une classe peut être intéressante, pour conserver la connexion et son identifiant.

Ce n'est que mon avis Smiley cligne