Create function en PHP

Mammouth du PHP | 881 Messages

13 janv. 2008, 10:41

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.
Soyez artisans de paix

ViPHP
ViPHP | 5924 Messages

13 janv. 2008, 11:23

Tu appliques la fonction php ucfirst() sur le résultat de ta requète et tu auras la même chose.

Mammouth du PHP | 881 Messages

13 janv. 2008, 19:08

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 ?
Soyez artisans de paix

Mammouth du PHP | 2937 Messages

13 janv. 2008, 19:41

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
Modifié en dernier par Victor BRITO le 13 janv. 2008, 19:47, modifié 1 fois.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

13 janv. 2008, 19:44

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

Eléphant du PHP | 259 Messages

13 janv. 2008, 19:47

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 ? :)

Mammouth du PHP | 881 Messages

13 janv. 2008, 23:04

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
Soyez artisans de paix