Page 1 sur 1

Create function en PHP

Posté : 13 janv. 2008, 10:41
par Patriboom
Bonjour!

Je veux obtenir des nom propres commençant par des majuscules.

Pour cela, j'ai repiqué un code de MySQL:

Code : Tout sélectionner

CREATE FUNCTION ucfirst(x varchar(255)) returns varchar(255) return concat( upper(substring(x,1,1)),lower(substring(x,2)) );
de http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html
Les recherches par
- "function" dans ce forum me réfèrent à des créations de fonctions en PHP,
- "mysql create function PHP" me donne plus 1100 résultats ! :?
- "create function", avec guillemets, 650 résultats!
De quoi rendre fou!

Et maintenant, je veux l'appliquer dans mon code PHP:
$FCT_maj = mysql_query("CREATE FUNCTION ucfirst(x varchar(255)) returns varchar(255) return concat( upper(substring(x,1,1)),lower(substring(x,2)) )" );
$requRESU  = "SELECT RESU.*, CONCAT(UCASE(GARS.Nom), ', ', ucfirst(GARS.Prenom)) AS Coureur, EQP.Nom AS Equipe  ";
 ...


J'ai aussi essayé sans définition de variable, ainsi:
mysql_query("CREATE FUNCTION ucfirst(x varchar(255)) returns varchar(255) return concat( upper(substring(x,1,1)),lower(substring(x,2)) )" );
$requRESU  = "SELECT RESU.*, CONCAT(UCASE(GARS.Nom), ', ', ucfirst(GARS.Prenom)) AS Coureur, EQP.Nom AS Equipe  ";
...

Quand je teste le tout dans mon serveur MySQL directement, je poste la création de fonction, puis la requête sur la table. Ça fonctionne bien.

Comment faire passer le morceau en PHP ?


Merci de votre aide.

Posté : 13 janv. 2008, 11:23
par Sékiltoyai
Tu appliques la fonction php ucfirst() sur le résultat de ta requète et tu auras la même chose.

Posté : 13 janv. 2008, 19:08
par Patriboom
Non, ucfirst comme tu me le proposes dans ma fonction, j'obtiendrais ceci :
"Beaudoin, jean-louis" alors que je veux "BEAUDOIN, Jean-Louis"

Mais puisque tu me réponds ainsi, je suis allé revoir http://ca3.php.net/manual/fr/function.ucfirst.php, croyant n'y avoir pas vu ce que je cherche. J'y trouve un lien intéressant, qui servira à ceux qui ont la même question, :idea: http://ca3.php.net/manual/fr/function.ucwords.php ucwords me donnera un résultat près de ce que je souhaite "Beaudoin, Jean-louis".

Merci, tu m'as mis sur la piste et tenterai de trouver une solution complète à ce sous-problème.
Je pourrais mettre résolu pour la question du traitement des maj/minucules, mais ma question sur l'intégration des fonctions MySQL dans le PHP reste entière.

Quelqu'un peut me dire comment intégrer des fonctions MySQL dans les appels passés par PHP ?

Posté : 13 janv. 2008, 19:41
par Victor BRITO
Si tes chaînes où doivent s'appliquer la mise en majuscules du nom sont systématiquement du type "Nom, Prénom", tu peux procéder comme suit :
$identifiant = 'Beaudoin, Jean-Louis';
$nom = explode (',', $identifiant);
$majuscule = mb_strtoupper ($nom[0]);
// mb_strtoupper() pour tenir compte d'éventuels caractères spéciaux
echo $majuscule.', '.$nom[1]; // Affiche BEAUDOIN, Jean-Louis

Posté : 13 janv. 2008, 19:44
par Hubert Roksor
Quelqu'un peut me dire comment intégrer des fonctions MySQL dans les appels passés par PHP ?
Euh, pareil que ton exemple. Qu'est-ce qui ne marche pas ? (debug plz)

Code : Tout sélectionner

SELECT ma_fonction() AS ma_valeur

Posté : 13 janv. 2008, 19:47
par Jules Petibidon
Hello,

Vu l'énoncé de la fonction, les infos proviennent de deux champs concaténés... En l'occurrence, se simplifier la vie serait plus... heu... simple :)

Ou alors c'est pour le sport que tu veux créer une fonction ? :)

Posté : 13 janv. 2008, 23:04
par Patriboom
J'aime bien l'expression "pour le sport".

Voici, pour faire oublier la concaténation et les maj/minuscules, une fonction plus simple.
Elle aussi donne de bons résultats sur le serveur MySQL lorsqu'interrogé directement.
mysql_query ("CREATE FUNCTION velo.essai(x integer, y integer) returns integer return (x + y)");
$requRESU  = "SELECT RESU.*, CONCAT(UCASE(GARS.Nom), ', ', GARS.Prenom) AS Coureur, EQP.Nom AS Equipe, essai(2, 3) AS BANANE  ";
Mais en PHP je reçois ce message:
Warning: mysql_query() [function.mysql-query]: Unable to save result set in C:\modem\web\cartes\cyclisme\admin\resultats_manuels_etape0.php on line 101

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in C:\modem\web\cartes\cyclisme\admin\resultats_manuels_etape0.php on line 105
que je soumette la requête après une définition de "function" MySQL telle que ci-haut ou inscrite dans une variable.


Voici aussi les lignes auxquelles réfèrent les messages d'erreur:
$resuRESU = mysql_query($requRESU, $db);  //ligne 101
if ( mysql_numrows($resuRESU) > 0) {         //ligne 105
Les lignes 101 et 105 donnent aussi de très bons résultats si j'exclus la référence à la fonction MySQL de ma requête.

Merci