IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Retour de fonction en PHP


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut Retour de fonction en PHP
    Bonjour,
    Je débute en PHP et je n'arrive pas à récupérer, dans mon programme appelant, le résultat d'une fonction externe.

    Ma fonction a pour but de gérer le format des prénoms qui sont (éventuellement) composés de plusieurs prénoms (Jean Marie, Anne Sophie, ....) afin qu'ils soient tous formatés avec une majuscule à chacun desprénoms et qu'un tiret les sépare.

    Voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    function ctrl_format_prenom_double($prenom) {
    		$cherche ="";  $espace = " "; 	$tiret = "-";  $point =".";
     
    		echo "<br>"; echo "Prenom d'arrivée  suite à la saisie : ".$prenom;  echo "<br>";
     
    		// On élimine les blancs (éventuels) au début et à la fin
    		$prenom = trim($prenom);																					
    		echo "<br>"; echo "Prenoms élagués : ".$prenom;  echo "<br>";
     
    		// On cherche "point" et on le remplace par "espace"
    		echo "<br>"; echo "str_replace : (Point par Espace) : ".str_replace($point,$espace,$prenom);  echo"<br>";  		
    		$prenom = str_replace($point,$espace,$prenom);  echo"<br>";  	
     
    		//  On met une majuscule à tous les mots du prénom
    		$prenom = ucwords($prenom," ");                                      
    		echo "<br>"; echo "Tous les Prenoms sont écris avec une Majuscule : ".$prenom;  echo "<br>"; echo"<br>";
     
    		// On cherche "espace" et on le remplace par "tiret"
    		echo "str_replace : (Espace par Tiret) : ".str_replace($espace,$tiret,$prenom);  echo"<br>";  
    		$prenom = str_replace($espace,$tiret,$prenom); echo "<br>";
     
    		// Retour de la valeur du prénom bien formaté dans le programme appelant
    		echo "Valeur Dans la fonction : ".$prenom;  echo "<br>"; echo "<br>";
     
    		return $prenom;
    }
    Au retour dans le programme appelant, je récupère le prénom comme il a été saisi ....

    Merci de votre aide.
    Cordialement

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 408
    Points : 15 775
    Points
    15 775
    Par défaut
    j'ai essayé votre fonction en mettant en entrée "anne.sophie" et j'obtiens bien "Anne-Sophie" comme résultat.
    donc vous avez peut-être un soucis d'utilisation du résultat dans la suite du code.

  3. #3
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonjour et Merci Mathieu pour votre aide sur mon problème.

    Je me suis mal exprimé au sujet de ma difficulté.
    Comme vous j'ai fait le constat que la fonction exécute bien le travail demandé ... et c'est donc dans l'utilisation du retour que le problème se manifeste.

    Voici donc le code qui précède l'appel de cette fonction, et l'utilisation que j'en fais au retour de la fonction. C'est là que je ne retrouve pas le résultat de la fonction !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
      	$ligne = 0;																																	//  Init du n° du compteur de ligne du fichier CSV
    		if (($handle = fopen($fichier, "r")) !== FALSE) {
        		while (($data = fgetcsv($handle, 1000, $separateur)) !== FALSE) {
        				if ($sans_titre ==1){
        						$ligne++; $sans_titre=0;																					//  on saute donc la ligne des titres
        				}	else{
          					$num = count($data); 	     																				// echo "<p> Il y a $num champs dans la ligne $ligne: <br /></p>\n";
          					$ligne++;  																												//   echo "row : ".$ligne;   //  echo "<br>";				//		 	N° de Ligne en cours du ficier CSV
          					//   for ($c=0; $c < $num; $c++) {	echo "Valeur du champ $c : ".$data[$c] . "<br />\n";	}				// On affiche Valeur de chaque champ
     
          					$code_civilite = 	$data[0]; if ($code_civilite == '') { $code_civilite = "7";}   			// Ce qui affichera ???
          					$nom = 						$data[1]; $nom = strtoupper($nom);
        	   				$prenom = 				$data[2]; 	ctrl_format_prenom_double($prenom);   	//   Mise en forme si prénom double		
     
        	   			  	echo "prenom lu au retour de la fonction : ".$prenom; echo "<br>"; 				//  	exit;
     
        	   				$adresse = 				$data[3];
        	   				$code_postal = 		$data[4];
        	   				$commune =				$data[5];
        	   				$tel_fixe = 			$data[6];
        	   				$tel_portable = 	$data[7];
        	   				$e_mail = 				$data[8];
     
    //    	   				echo "code_civilite : ".$code_civilite;   echo "<br>";
    //    	   				echo "nom : ".$nom;   										echo "<br>";
    //    	   				echo "prenom : ".$prenom;    							echo "<br>";
    //    	   				echo "adresse : ".$adresse;    						echo "<br>";
     
          					$my_sql = "SELECT * FROM ".$table." WHERE nom = '".$nom."'"." and prenom = '".$prenom."'";       // Test si inexistant avant d'insérer *
    		   					$result = mysqli_query($my_cnx, $my_sql) or die ('Erreur ici en 49 : '.mysqli_error($my_cnx) );
    		   					$nb_result = mysqli_num_rows($result); 
     
    		   					if ($nb_result < 1) { 																					// Cette personne n'existe pas dans le fichier
    		   							echo "Ligne_".$ligne." : ".$nom." ".$prenom." : Cette Personne n'existe PAS dans le fichier, On va la créer !";  echo "<br>"; echo "<br";
    		   							$my_sql = "INSERT INTO $table (code_civilite, nom, prenom, tel_fixe, tel_portable, e_mail) VALUES ('$code_civilite','$nom','$prenom','$tel_fixe','$tel_portable','$e_mail')";  		
         	  						$result = mysqli_query($my_cnx, $my_sql); 								 // or die ('Erreur ici en 49 : '.mysqli_error($my_cnx) );
    Je fais le constat en ligne 17 : Ce n'est pas le résultat de la fonction qui s'affiche !!!
    Je ne comprends pas !

    Merci de votre aide.
    Cordialement
    Maub85

  4. #4
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Salut,

    tu as une erreur dans l'appel de la fonction, cela doit être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $prenom = ctrl_format_prenom_double($data[2]);   	//   Mise en forme si prénom double
    en faisant comme tu as fais, tu donne à $prenom la valeur de $data[2] et le résultat de la fonction n'était pas exploité.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Attention : ucwords() n'est pas compatible UTF-8 (ex. : "émile").
    voir : mb_convert_case()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    function ctrl_format_prenom_double($prenom)
    {
    	// On élimine les blancs (éventuels) au début et à la fin
    	$prenom = trim($prenom);
     
    	// on remplace "espace" et "point" par "tiret"
    	$prenom = str_replace([' ','.'],'-',$prenom);
    	$prenom = preg_replace('#(-+)#','-',$prenom); // remplace plusieurs tirets consécutifs par un seul
     
    	//  On met une majuscule à tous les mots
    	$prenom = mb_convert_case($prenom, MB_CASE_TITLE ,'UTF-8');	
     
    	// Retour
    	return $prenom;
    }
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $prenom_avant = 'paul.  - émile ..-. .victor';
    $prenom_apres = ctrl_format_prenom_double($prenom_avant);
    echo $prenom_apres;
    ?>
    Dernière modification par Invité ; 10/01/2018 à 16h57.

  6. #6
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Cher ami,
    Je te remercie bien vivement de ton aide.
    La solution est parfaite.

    Cordialement
    Maub85

  7. #7
    Invité
    Invité(e)
    Par défaut
    Petite simplification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    function ctrl_format_prenom_double($prenom)
    {
    	// On élimine les blancs (éventuels) au début et à la fin
    	$prenom = trim($prenom);
     
    	// remplace plusieurs espaces, points, tirets consécutifs par un seul tiret
    	$prenom = preg_replace('#([ \.-]+)#','-',$prenom);
     
    	//  On met une majuscule à tous les mots
    	$prenom = mb_convert_case($prenom, MB_CASE_TITLE ,'UTF-8');	
     
    	// Retour
    	return $prenom;
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  2. [syntaxe] tableau et retour de fonction
    Par BainE dans le forum C++
    Réponses: 4
    Dernier message: 08/12/2005, 16h01
  3. Retour de fonction en C
    Par troumad dans le forum Linux
    Réponses: 2
    Dernier message: 06/11/2005, 21h43
  4. Utilisation d'un retour de fonction dans un decode
    Par CFVince dans le forum Oracle
    Réponses: 4
    Dernier message: 20/10/2005, 17h22
  5. Référence en retour de fonction, à transformer en hash
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 15/07/2005, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo