Php:ajout fichier txt a la base

Fermé
simou - 18 févr. 2012 à 11:43
 simou - 28 févr. 2012 à 08:58
Bonjour,
j'ai un fichier txt que je doit insérer son contenu dans la base mysql, ce fichier contient:
1) l'identificateur de l'élevé (id_eleve)
2) le nom de l'élevé

mon script doit ouvrir le fichier lire le contenu et insérer dans la table élevé avec des condition:
- si l' id_eleve existe dans la table
on va supprimer l'ancien et ajouter le nouveau id_eleve
si non on va ajouter tous simplement
voila mon script
<?php
    
	$connexion=db_connexion();	
	
	
// Connexion db 

$fichier_ouvrir = @fopen("permis.txt", "r");
if ($fichier_ouvrir) {
    while (!feof($fichier_ouvrir)) {
        $var_id= rtrim(fgets($fichier_ouvrir, 11));
		$var_nom_eleve= rtrim(fgets($fichier_ouvrir, 200));
		
    $sql= mysql_query("select * from eleve where id_eleve=$var_id");
     
    if (isset($_POST["$var_id"])) 
	   {
		  $var_id=prepareChaine($_POST["$var_id"]);
		}
		    else
		    { 
		    	$var_id=prepareChaine("");
			
		
		        $req=("DELETE from eleve where id_eleve=$var_id");
	            $req=("INSERT INTO eleve VALUES ('$var_id'),('$var_nom_eleve')");
	     


// Execution de la requete si pas d'erreur
if ($req <> "") {
$req=mysql_query ("$req")or die(mysql_error());
}

 fclose($fichier_ouvrir);

  }
}
// Fermeture DB
?>


mon probleme que se script ne fonctionne pas !!!
Aidez moi a le corriger
merci a vous tous

A voir également:

5 réponses

pas de réponse ???
0
s'il vous plais aidez moi a résoudre ce problème
merci
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
20 févr. 2012 à 17:23
pour savoir si l'éléve exite ou pas tu dois tester si la requête retourne un résultat
if (mysql_num_rows($sql) >=1) alors // supprimer l'élève et l'insérer sinon l'ajouter seulement
0
donc je doit mettre ma requet de test ou exactement
(désolé je suis débutante et je comprend l'algorithme mais en codant je trouve beaucoup de difficulté)
merci encore
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
20 févr. 2012 à 17:47
Au lieu de mettre ça if (isset($_POST["$var_id"])) mets ça if (mysql_num_rows($sql) >=1)
0
bonjour tito23 merci encore une fois de m'aider
voila j'ai changer mon code comme ceci:
<?php
    require_once("xx/db_connect.inc.php");
	require_once('xxx/xx.php'); 

	$connexion=db_connexion();	
		

// Connexion db 

$fichier_ouvrir = @fopen("permis.txt", "r");
if ($fichier_ouvrir) {
    while (!feof($fichier_ouvrir)) {
        $var_id= rtrim(fgets($fichier_ouvrir, 11));
		$var_titre_archt= rtrim(fgets($fichier_ouvrir, 200));
        $sql= mysql_query("select * from architecte1");
		if (mysql_num_rows($sql) >=1)
        {			     
		// $req=("DELETE from architecte1 where id_archi=$var_id");
		
	     $req=("INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id'),('$var_titre_archt')");
	     
         $req=mysql_query ("$req")or die(mysql_error());    
	
		 }   


 fclose($fichier_ouvrir); 
 }

}
// Fermeture DB
?>

mais en exécutant il m'a affiche beaucoup d'erreur :

Warning: feof(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 14

Warning: fgets(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 15

Warning: fgets(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 16

Warning: fclose(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 29

Warning: feof(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 14

Warning: fgets(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 15

Warning: fgets(): 5 is not a valid stream resource in c:\program files\easyphp1-8\www\site2010\affichetxt.php on line 16
.....
j'ai pas compris ??!!
0
re
j'ai modifier le code en fermant le "while "avant la fermeture du fichier :
 
  }
fclose($fichier_ouvrir); 
 
}
// Fermeture DB
?>

comme ça les msg d' erreurs sont disparut mais l'insertion dans la base n'est pas faite !!
0
sakoba2010 Messages postés 157 Date d'inscription lundi 7 février 2011 Statut Membre Dernière intervention 24 juillet 2013 15
21 févr. 2012 à 12:01
Revoir cette ligne
$req=("INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id'),('$var_titre_archt')");

Essais avec ça
$req=("INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id' ,'$var_titre_archt')");
0
merci de me répondre j'ai bien changer mais quand je consulte la table l'insertion n'est pas faite
0
sakoba2010 Messages postés 157 Date d'inscription lundi 7 février 2011 Statut Membre Dernière intervention 24 juillet 2013 15
21 févr. 2012 à 12:18
Il affiche une erreur?
0
oui enfaite il a un inserer un seul enregistrement et quand je actualise il affiche:
"Duplicata du champ '0' pour la clef 1"
0
sakoba2010 Messages postés 157 Date d'inscription lundi 7 février 2011 Statut Membre Dernière intervention 24 juillet 2013 15
21 févr. 2012 à 12:26
Quel est le type de ce champ 'id_archi' ?
0
le type de id_archi int(11)
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié par [Dal] le 23/02/2012 à 10:21
Salut Simou,

1.

Juste une hypothèse.

Si ton fichier contient des données encodées en arabe, il est possible que la cause pour laquelle le texte ne s'insère pas dans ta base, alors que les chiffres oui, est que ta base de données est paramétrée pour utiliser un jeu de caractères différent.

Par exemple si ton fichier texte est encodé sous Windows, en cp1256, tu devras paramétrer MySQL avec ce jeu de caractères, soit : au niveau du serveur (dans my.ini - qui par défaut doit proposer latin1), ou au niveau de création de la base, soit au niveau de la création des tables, ou même colonnes par colonnes.

C'est toi qui décides comment tu veux faire.

Vois cette discussion sur CCM : https://forums.commentcamarche.net/forum/affich-10661668-php-et-la-langue-arabe

Et

- la doc générale MySQL https://dev.mysql.com/doc/refman/5.6/en/charset-syntax.html
- la liste des jeux de caractères supportés par MySQL : https://dev.mysql.com/doc/refman/5.6/en/charset-charsets.html (pour l'arabe encodé depuis Windows c'est "cp1256" et "cp1256_general_ci" pour la collation)

Si la version de MySQL que tu utilises n'est pas 5.6, vois la doc correspondante à ta version en cliquant sur les liens (même si je ne pense pas que cela change beaucoup, sauf si tu as une version vraiment très ancienne).

Si mon hypothèse est correcte, et que tu veux, par exemple, changer le jeu de caractères d'une table que tu as déjà créé, tu peux faire comme cela :

ALTER TABLE architecte1 CHARSET=cp1256 COLLATE=cp1256_general_ci;


2.

Sinon, comme je te l'ai dit en https://forums.commentcamarche.net/forum/affich-24408168-php-inserer-des-donnees-dans-la-base par rapport à ton exemple de données, je pense que ton code n'est pas bon.

Mais c'est toi qui vois, tu es maître de ton destin.

3.

C'est mal vu de créer plusieurs fils sur la même question. Cela crée de la confusion, et multiplie le travail des gens qui essayent de t'aider.


Bon courage :-)


Dal
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
Modifié par tito23 le 23/02/2012 à 12:10
Vu que le fichier texte est en arabe et en français l'encodage utf8 est la seule solution
ajoute cela entre <head>et </head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
et au début du code
mysql_query("set names utf8"); mysql_query("SET CHARACTER SET 'utf8'");
si le problème n'est pas résolu tu dois exécuter cette instuction dans mysql
ALTER TABLE architecte1 CHARSET utf8; 
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
23 févr. 2012 à 13:57
Salut tito, peux-tu m'expliquer comment as-tu deviné que le fichier texte était encodé en utf8 plutôt qu'en cp1256 ?

https://en.wikipedia.org/wiki/Windows-1256


Dal
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
23 févr. 2012 à 14:22
j'ai pas dit que le fichier texte est encodé en utf8 ni en cp1256, je parle de l'encodage du page html et celui de la base de données
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié par [Dal] le 23/02/2012 à 14:47
Très bien. Reste que ce que veux Simou, c'est injecter dans une table de sa base MySQL des données provenant d'un fichier texte. Le minimum, c'est de s'assurer que l'encodage correspond.

C'est pourquoi j'indique ci-dessus https://forums.commentcamarche.net/forum/affich-24483241-php-ajout-fichier-txt-a-la-base#65 : "Par exemple si ton fichier texte est encodé sous Windows, en cp1256, tu devras paramétrer MySQL avec ce jeu de caractères".

De toutes façons, il doit déterminer quel est l'encodage utilisé sur son fichier texte, sinon il n'arrivera à rien.

Ensuite, qu'il décide de coder son site avec tel ou tel Charset, c'est à lui de le déterminer, en fonction de ses contraintes et de ses préférences, il décidera s'il doit changer l'encodage des données issues du fichier texte avec Php (avec iconv https://www.php.net/manual/en/function.iconv.php ou mb_convert_encoding https://www.php.net/manual/en/function.mb-convert-encoding.php), s'il peut produire un fichier texte en utf8 ou pas, etc.


Dal
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
23 févr. 2012 à 14:48
comme a dit Dal ça pourraitt être l'encodage du ficier texte qui pose problème, tu devrais changer son encodage avec notepad++ par exmple, on parle côté opérationnel ça lui aide mieux.
0

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

Posez votre question
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
Modifié par [Dal] le 24/02/2012 à 14:40
Salut Simou,

Il te faudra quand même t'assurer que tes tables MySQL peuvent bien accueillir du utf8, car par défaut MySQL est configuré en latin1. Si tes données sont en utf8, le plus simple est aussi que ton site soit en utf8.

Alors suis les conseils de Tito concernant l'adaptation du format de tes tables. J'ajouterai aussi la collation pour que tes requêtes SQL de classement alphabétique tombent correctement, donc :

ALTER TABLE architecte1 CHARSET=utf8 COLLATE=utf8_general_ci;

Fait pareil pour toutes tes tables.

Et, comme suggéré par Tito, assure toi que ton site comporte dans l'entête des pages générées la balise meta suivante. Retire toutes autres mentions d'encodages différents :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

Enfin, pour la 3ème fois je te signale que ton algorithme de récupération des données n'est pas bon par rapport aux données d'exemple que tu m'as données dans ton autre fil de discussion, et que tu devrais faire comme indiqué là pour les récupérer https://forums.commentcamarche.net/forum/affich-24408168-php-inserer-des-donnees-dans-la-base#14

C'est la dernière :-)

Courage, on approche du but.


Dal
0
toutes mes table sont en utf8_general_ci le problème c 'est que j'ai déjà des enregistrements dans d'autre table qui contiennent l'arabe et fonctionne trés trés bien je comprend pas pourquoi le contenu de ce fichier ne fonctionne pas?
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 090
27 févr. 2012 à 19:09
Bon, on va procéder par étapes.

D'abord, on va vérifier que ton fichier texte contient bien du utf8.

Avec Firefox, fait "Fichier-Ouvrir un fichier..." et ouvre ton fichier texte dedans.

Ensuite fait "Affichage-Encodage des caractères" et vois quel est l'encodage qui permet un affichage correct.

- Si utf8 n'affiche pas correctement, vois dans "Plus d'encodages-Moyen oriental", et essaye les différents encodages disponibles pour l'arabe, et dis nous ce que tu as trouvé

- Si utf8 affiche correctement le contenu du fichier, confirme le nous


Dal
0
bonjour Dal
merci bien de votre aide j'ai bien verifier qua avec l'outil texte j'ai bcp de probleme d'encodage donc j'ai changer le travail en utilisant le xml normalement sa passe très bien
Dés que je trouve des soucis je te demande l'aide si vous voulez bien sur merci infiniment.
Je voudrais aussi remercier tito23 qui m'a aidez aussi merci a vous tous
0