Appel fonction PHP

Résolu/Fermé
DAG - 11 juil. 2008 à 13:10
 DAG - 11 juil. 2008 à 13:59
Bonjour,

J'ai coder le programme suivant :

<?php 
include 'connexion_bdd.php';
$file = $_FILES['file']['tmp_name'];
$file_name = $_FILES['file']['name'];
$file_type = $_FILES['file']['type'];

//MAIN
echo "Vous avez rentrer le fichier : "
	."<strong>".$file_name."</strong>"
	."."
	."<br><br>";	
	
if($file_type == 'application/vnd.ms-excel')
{
RH_excel_file ();

}
else
{
	echo 
	"!! Le fichier doit être au format Excel CSV. !!"
	."<br>"
	."<br>"
	."Pour enregistrer un fichier au format CVS sous Excel :" 
	."<br>"
	."- Ouvrir le fichier original, au format xls"
	."<br>"
	."- Cliquer sur"
	."<strong>"." Fichier"."</strong>"
	." puis sur"
	."<strong>"." Enregistrer sous..."."</strong>"
	."<br>"
	."- Puis dans " 
	."<strong>"."Type de fichier"."</strong>"
	.", choisir : "
	."<strong>"."CVS (séparateur : pointvirgule) (*.cvs)"."</strong>"."."
	."<br>"
	."- Enfin, " 
	."<strong>"."valider."."</strong>";
}



//FICHIER EXCEL DE LA RH
function RH_excel_file ()
{
	$file = $_FILES['file']['tmp_name'];
	$file_name = $_FILES['file']['name'];
	$file_type = $_FILES['file']['type'];
	
	$content = file_get_contents($file,'r');
	$content = explode(";", $content);
	for($var=0; $var<12; $var++)
	{
		echo $content[$var];
		echo "<br>";
	}
	$dernierCar = explode("\n", $content[12]);
	echo $dernierCar[0] ."<br>";
	
	echo "<br>"."Voulez-vous continuer ?"."<br>";
	echo "<a href='./traitement.php' title='passer le fichier'> <input type='Submit' value='Valider';/> </a>";	
	

	lisserChaineCarac($content[1]);
	
	
	/* $sql = "CREATE TABLE T1 
	(
	`ID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,"
	.$content[0] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[2] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[3] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[4] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[5] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[6] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[7] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[8] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[9] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[10] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[11] 
	."VARCHAR( 50 ) NOT NULL,"
	.$content[12] 
	."VARCHAR( 50 ) NOT NULL,"
	.$dernierCar[0] 
	."VARCHAR( 50 ) NOT NULL,"
	.")"
	."ENGINE = InnoDB"
	.";"; 

	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

	mysql_close(); */
}



function lisserChaineCarac ($chaineCarac)
{
	$chaineCarac = str_replace(' ','',$chaineCarac);
	$chaineCarac = str_replace('\'','',$chaineCarac);
	$chaineCarac = str_replace('é','e',$chaineCarac);
	$chaineCarac = str_replace('è','e',$chaineCarac);
	$chaineCarac = str_replace('ê','e',$chaineCarac);
	$chaineCarac = str_replace('é','e',$chaineCarac);
	$chaineCarac = str_replace('à','a',$chaineCarac);
	$chaineCarac = str_replace('ç','c',$chaineCarac);
	$chaineCarac = str_replace('/','-',$chaineCarac);
	$chaineCarac = str_replace('\\','-',$chaineCarac);
	$chaineCarac = str_replace('*','',$chaineCarac);
}

?> 



Je rentre un fichier Excel, je l'analyse avec la fonction
function RH_excel_file ()
. Je récupère les champs de la première ligne de ce fichier. Et je voudrais créer une table MySQL avec ces données.
Pour ce faire, je "lisse" les noms avec la fonction
lisserChaineCarac ($chaineCarac)
.
Le probleme, c'est que lorsque que je l'appelle dans la fonction function RH_excel_file () je n'arrive pas à garder la valeur en mémoire.

Est-ce que quelqu'un aurai une idée ?

Merci d'avance !
A voir également:

7 réponses

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
11 juil. 2008 à 13:18
Bonjour.

Je n'ai pas eu le courage de tout regarder, mais une chose me chiffonne :
La fonction lisserChaineCarac ($chaineCarac) ne retourne aucune valeur !

=> il faudrait faire :
$chaineCarac = lisserChaineCarac ($chaineCarac);
0
Oui, en fait, je voudrais faire une fonction qui prend une chaine de caractère (par exemple "Unité d'organisation"). Et lorsque j'appelle cette fonction, elle me ressorte une variable "lisser" : "Unitédorganisation".

Ceci afin de pouvoir ensuite faire un genre de :

CREATE TABLE ma_table (`ID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Unitédorganisation VARCHAR( 50 ) NOT NULL,
)
ENGINE = InnoDB;
";  


Voila pour résumer ! J'espere être assez claire...

En le probeme est que lorsque j'appelle cette fonction "lisser" ailleurs, dans une autre fonction, la variable ne bouge pas !
0
Oui exact, tu as raison :

function lisserChaineCarac ($chaineCarac)
{
	$chaineCarac = str_replace(' ','',$chaineCarac);
	$chaineCarac = str_replace('\'','',$chaineCarac);
	$chaineCarac = str_replace('é','e',$chaineCarac);
	$chaineCarac = str_replace('è','e',$chaineCarac);
	$chaineCarac = str_replace('ê','e',$chaineCarac);
	$chaineCarac = str_replace('é','e',$chaineCarac);
	$chaineCarac = str_replace('à','a',$chaineCarac);
	$chaineCarac = str_replace('ç','c',$chaineCarac);
	$chaineCarac = str_replace('/','-',$chaineCarac);
	$chaineCarac = str_replace('\\','-',$chaineCarac);
	$chaineCarac = str_replace('*','',$chaineCarac);
	return $chaineCarac;
}


Et pour l'appeler :

	$chaineCarac = lisserChaineCarac($content[0]);
	echo $chaineCarac;


C'est tout con, mais je ne suis pas habituer à coder...

Merci !
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
11 juil. 2008 à 13:33
Vas voir dans la doc php - ou ici - ce qui concerne la portée des variables et le foncionnement des focntions...

En gros, tu as deux options :
1. Faire comme je t'ai dis.

2. "globaliser" la chaîne de caractères :
function lisserChaineCarac () {
global $chaineCarac;
//Ton code
}

Le problème de cette mêthode, c'est (entre autres) que tu ne peux plus utiliser la fonction pour une autre chaîne de caractères...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup, maintenant ça marche !

Je voulais juste savoir sinon : est-ce que par hasard il n'existerais pas déjà des fonctions toutes faites pour rentrer un fichier CSV dans une table MySQL ?
J'ai un fichier comme ça :
titre1     titre2     titre3
data1     data1     data1
data2     data2     data2


Et je voudrais créer une table MySQLa l'image du fichier Excel, c'est a dire que les différents champs de la table MySQL porterais le nom de ceux du fichier Excel, et les données d'après viendrons peupler la table ?

C'est que je suis en train d'essayer de coder...
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
11 juil. 2008 à 13:51
Là, ça passe hors-sujet, tu ferais mieux d'ouvrir un nouveau post - si ce n'est déjà fait.

Pour une utilisation ponctuelle, phpMyAdmin te permet de le faire :
Sélectionne ta table, en bas de la page tu as Insérer des données provenant d'un fichier texte dans la table, quelques paramètres plus tard c'est fait.

En bonus, tu peux voir la requête passée par phpMyAdmin. Un exemple :
LOAD DATA LOCAL INFILE '<monfichier>' INTO TABLE `<matable>` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'
0
Oui j'ai réussi à faire avec LOAD DATA. Mais le problème (si j'ai bien compris) est qu'il faut avoir créer autant de champs dans la table MySQL qu'il y en a dans le fichier Excel (c'est comme ça que j'ai fait en tout cas).

En fait load data prend TOUTES les données d'une colonne du fichier Excel et les met dans le champs d'une table MySQL.
Donc on se retrouve avec une table du genre :

table 1 :
TitreChamps1          TitreChamps2
NOM                       PRENOM
tintin                       milou
titi                          tata


Du coup je me retrouvais avec toutes les premières valeurs de chaque champs de ma table fausses... (elle portent le nom du champs justement !)

Donc je me suis mis à essayer de coder ce que je veux faire !
0