Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2011, 12h23   #1
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Par défaut Problème accent lecture fichier texte

Bonjour, j'ai beau chercher, chercher et chercher, je n'arrive pas à résoudre mon problème.
Si j'ai bien compris
"Si la page affiche des caractères de ce type : "�"
=> Les données ont été enregistrées au format ISO, et le navigateur les affiche en pensant avoir affaire à de l'UTF-8." expliqué ici.

Voici mon code php :
Code :
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
39
40
<?php
                        $directory = 'prive/upload/files/articles';
 
                        $allowed_types=array('txt');
                        $file_parts=array();
                        $ext='';
                        $title='';
                        $i=0;
 
                        $dir_handle = @opendir($directory) or die("Erreur de repertoire");
 
                        while ($file = readdir($dir_handle)) 
                        {
                            if($file=='.' || $file == '..') continue;
 
                            $file_parts = explode('.',$file);
                            $ext = strtolower(array_pop($file_parts));
 
                            $title = implode('.',$file_parts);
                            $title = htmlspecialchars($title);
 
                            $nomargin='';
 
                            if(in_array($ext,$allowed_types))
                            {
 
                            	$content = file_get_contents(''.$directory.'/'.$file.'');
								encoding="iso-8859-1"
                                echo '
                                <div class="nouvel_article">'
                                .$content.
                                '</div>';
 
 
                            }
                        }
 
                        closedir($dir_handle);
 
?>
En gros j'upload via une petite interface des fichiers textes dans un dossier pour publier des articles sur ma page. le fichier est dans mon cas un .txt dont voici le contenu très basic :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<div class="titre">
 
Ton titre ici
 
</div>
<div class="date">
 
Ajouté le : jj/mm/aaaa
 
</div>
 
<div class="texte">
 
Ton article ici :
 
</div>
Malheureusement l'affichage des accent ne ce fait pas correctement.
Ma page est encrypté comme suit :
Code :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Je suis ouvert à toutes proposiont même à un changement total de méthode pourvu qu'il soit possible à admin novice de poster un article (possibilité de faire un formulaire de post ? ==> j'ai déjà une zone privé)

Je précise que je suis totalement novice en php et que je fait ce que je peux...dc soyez indulgents et expliquez moi simplement plutot que de m'envoyer vers une page comme ça dont je ne comprend rien

Merci !
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 13h49   #2
Membre confirmé
 
Avatar de provirus
 
Homme Simon Levesque
Consultant informatique
Inscription : février 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Simon Levesque
Âge : 26
Localisation : Canada

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : février 2009
Messages : 97
Points : 279
Points : 279
Le plus simple, c'est de tout mettre en UTF-8. (Surtout que ton encoding="iso-8859-1" semble voler dans les airs)
  1. Prends Notepad ++ ici http://notepad-plus-plus.org
  2. Ouvres tes fichiers textes
  3. Utilise le menu "Encoding - Convert to UTF-8 without BOM
  4. Si ton fichier php a aussi des accents, alors fait de même
__________________
Blog - Tutoriels vidéos - Espace DVP
provirus est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/06/2011, 18h59   #3
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Bonjour, merci pour ta réponse mais je ne suis pas sur d'avoir bien compris.
Je dois encoder quoi ? Seulement mon php ou aussi tous mes fichiers texte ?
Merci
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 19h29   #4
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Après de nombreux essaies...c'est seulement l'encodage sur les fichiers textes qui fonctionnes. Ce qui ne m'arrange pas sachant que "le client" devra faire la manipulation à chaque fois...

Je vais voir pour une autre solution à savoir encoder un fichier texte appeler articles.txt et écrire dedans via un formulaire en espérant que cela fonctionne.
J'aurais besoin pour le d'un petit tuyau.

Connaissez un moyen simple de procéder ? avec ajout d'article et suppression le tout via php ou autre dans un seul fichier txt ?

Merci
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 03h08   #5
Membre confirmé
 
Avatar de provirus
 
Homme Simon Levesque
Consultant informatique
Inscription : février 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Simon Levesque
Âge : 26
Localisation : Canada

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : février 2009
Messages : 97
Points : 279
Points : 279
Pour faire un formulaire d'édition, tu pourrais utiliser CKEditor, ce qui te donnerait un éditeur html. Tu n'aurais qu'à prendre le texte et l'écrire dans un fichier avec file_put_contents.

Puisque ton document html est en UTF-8, le contenu sera sauvé comme UTF-8.

Pour effacer les fichiers, c'est unlink().

CKEditor: http://ckeditor.com/download
file_put_contents: http://ca2.php.net/manual/fr/functio...t-contents.php
unlink: http://ca2.php.net/manual/fr/function.unlink.php
__________________
Blog - Tutoriels vidéos - Espace DVP
provirus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h02   #6
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Bonjour bonjour !!
Alors ce que tu m'as dit m'a beaucoup inspiré...
J'ai fait un formulaire en php que voilà :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
    	<div id="creation">
 
        <form name="article" method="post" action="do_creation.php"/>
         <div class="titre">Titre de l'article :</div>
 
          <input type="text" name="titre" value="" class="form" size="30" maxlength="2048"/><br>
 
          <div class="titre">Date d'ajout (format jj/mm/aaaa) :</div>
 
          <input type="text" name="date" value="" class="form" size="30" maxlength="2048"/><br>
 
          <div class="titre">Texte de l'article :</div>
 
         <textarea type="text" name="texte" value="" class="formtexte" size="300"/></textarea>
         <br>
		<input type="submit"  id="poster" name="Submit" value="Publier l'article" class="button"/>
        </form>	
        </div>

do_creation.php
Code :
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
39
40
41
42
43
44
45
46
 
<?php 
		$titre = $_POST['titre'];
		$date = $_POST['date'];
		$texte = $_POST['texte'];
		$texte = stripslashes((nl2br($texte)));
		$data = "<div class=\"titre\">$titre</div><div class=\"date\">Ajouté le : $date</div><div class=\"lignetitre\"></div><div class=\"texte\">$texte</div>";
 
		$fichierChemin = "/prive/upload/files/articles";
		$fichierNom = $_POST['titre'];
		$fichierExtension = "txt";
		$fichierContenu = $data;
		$droit = "0777";
		$t_infoCreation = creerFichier($fichierChemin, $fichierNom, $fichierExtension, $fichierContenu, $droit);
		echo "<pre>";
		print_r($t_infoCreation);
		echo "</pre>";
 
 
		function creerFichier($fichierChemin, $fichierNom, $fichierExtension, $fichierContenu, $droit=""){
		$fichierCheminComplet = $_SERVER["DOCUMENT_ROOT"].$fichierChemin."/".$fichierNom;
		if($fichierExtension!=""){
		$fichierCheminComplet = $fichierCheminComplet.".".$fichierExtension;
		}
 
		$leFichier = fopen($fichierCheminComplet, "wb");
		fwrite($leFichier,$fichierContenu);
		fclose($leFichier);
 
		if($droit==""){
		$droit="0777";
		}
 
		$t_infoCreation['fichierCreer'] = false;
		if(file_exists($fichierCheminComplet)==true){
		$t_infoCreation['fichierCreer'] = true;
		}
 
		$retour = chmod($fichierCheminComplet,intval($droit,8));
		$t_infoCreation['permissionAppliquer'] = $retour;
 
		return $t_infoCreation;
		}
 
 
		?>
Ca fonctionne super bien, là je suis en train de regarder pour la fonction unlink() et si possible me faire un petit jquery tree et supprimer les articles désirés.

Petite question au passage : y a-t'il un moyen simple pour faire une petite exécution de mon do_creation.php sans recharger ma page ? et du coup afficher (avec echo j'imagine) ma réponse dans
Code :
<div id="results"></div>
par exemple ?

Merci !
(je vais update le titre du topic...) ==> en fait je ne sais pas faire
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h17   #7
Membre confirmé
 
Avatar de provirus
 
Homme Simon Levesque
Consultant informatique
Inscription : février 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Simon Levesque
Âge : 26
Localisation : Canada

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : février 2009
Messages : 97
Points : 279
Points : 279
Pour exécuter sans recharger la page, c'est du Ajax.

Puisque tu utilises jQuery, tu peux utiliser la fonction "post": http://api.jquery.com/jQuery.post/

Tu peux appeler ton do_creation.php avec les paramètres que tu veux et obtenir un petit bout d'HTML. Pour les paramètres, mets un id à tes input (ex: id="titre" sur ton input). Ensuite tu mets ce bout dans ton "results":
Code :
1
2
3
4
5
6
7
8
 
// Javascript
var letitre = $('#titre').val();
var ladate= $('#date').val();
 
$.post('do_creation.php', {titre: letitre, date: ladate}, function(data) {
  $('#results').html(data);
});
__________________
Blog - Tutoriels vidéos - Espace DVP
provirus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h46   #8
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Tout d'abord, merci de prendre le temps de m'aider !
Alors j'ai du me tromper quelque part car j'ai des erreurs :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 4
 
Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 5
 
Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 6
 
Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 7
 
Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 8
 
Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 9
 
Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\do_creation.php on line 17
Voilà ce que j'ai essayer de faire...

Code :
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
    	<div id="creation">
 
        <form name="article" method="post" id="postform" action=""/>
         <div class="titre">Titre de l'article :</div>
 
          <input type="text" name="titre" id="titre" value="" class="form" size="30" maxlength="2048"/><br>
 
          <div class="titre">Date d'ajout (format jj/mm/aaaa) :</div>
 
          <input type="text" name="date" id="date" value="" class="form" size="30" maxlength="2048"/><br>
 
          <div class="titre">Texte de l'article :</div>
 
         <textarea type="text" name="texte" value="" class="formtexte" size="300"/></textarea>
         <br>
		<input type="submit"  id="poster" name="Submit" value="Publier l'article" class="button"/>
        </form>	
        </div>      
 
        <div id="results">
                // Javascript
                <script type="text/javascript">
				$("postform").submit(function(event) {
   				event.preventDefault(); 
				var letitre = $('#titre').val();
				var ladate= $('#date').val();
 
				$.post('do_creation.php', {titre: letitre, date: ladate}, function(data) {
				  $('#results').html(data);
				});
				});
		</script>
 
        </div>
Merci encore !
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h55   #9
Membre confirmé
 
Avatar de provirus
 
Homme Simon Levesque
Consultant informatique
Inscription : février 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Simon Levesque
Âge : 26
Localisation : Canada

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : février 2009
Messages : 97
Points : 279
Points : 279
Ça fait plaisir

Pour ton erreur de session et de header, quand tu utilises la fonction session_start(), il ne faut pas qu'il y ait eu des lignes d'envoyées. Là ce qui est gossant, c'est que tu n'as certainement pas envoyé des lignes html, mais simplement des retours de lignes. Par exemple, dans ton do_creation.php, la ligne 1 est un retour de ligne. Il y a donc déjà du texte d'envoyé alors il n'est plus possible de faire un session_start() après cette ligne vide.

Tes retours de lignes semblent être dans ton fichier config.php que tu sembles inclure dans ton do_creation.php. Vérifies bien au début et à la fin de ton fichier. Quitte à ouvrir le <?php sans jamais le fermer (donc sans mettre le ?> ) puisque si ton fichier fini avec le ?> suivit d'une ligne vide, cette ligne sera affichée.

Ensuite, quand cela va fonctionner, juste pour préciser, il va manquer des champs de formulaires à ton code Javascript. Je n'ai mis que le titre et la date comme exemple.
__________________
Blog - Tutoriels vidéos - Espace DVP
provirus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h08   #10
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Wouhou !
Ca à l'air de fonctionner, du coup j'ai supprimer tout le code html de mon do_creation.php (ma protection par mp n'étant plus nécessaire j'ai également supprimer mon include congif.php.


Les petits soucis en revanche... le corp de ma page n'ai plus affiché et l'exécution ce fait au lancement de la page et non pas au clic sur submit...

Ca me donne ça :
Code :
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
 
    <div id="creation">
 
        <form name="article" method="post" id="postform" action=""/>
         <div class="titre">Titre de l'article :</div>
 
          <input type="text" name="titre" id="titre" value="" class="form" size="30" maxlength="2048"/><br>
 
          <div class="titre">Date d'ajout (format jj/mm/aaaa) :</div>
 
          <input type="text" name="date" id="date" value="" class="form" size="30" maxlength="2048"/><br>
 
          <div class="titre">Texte de l'article :</div>
 
         <textarea type="text" name="texte" value="" class="formtexte" size="300"/></textarea>
         <br>
		<input type="submit"  id="poster" name="Submit" value="Publier l'article" class="button"/>
        </form>	
        </div>      
 
        <div id="results">
<script type="text/javascript">
 
		$.post('do_creation.php', function(data) {
		  $('#results').html(data);
		});
</script>
        </div>
J'ai "compresser" le javascript pour afficher ma réponse via un echo en php.

EDIT : autant pr moi, la mise en page est revenue...forcément avec du css ça marche mieux
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h14   #11
Membre confirmé
 
Avatar de provirus
 
Homme Simon Levesque
Consultant informatique
Inscription : février 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Simon Levesque
Âge : 26
Localisation : Canada

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : février 2009
Messages : 97
Points : 279
Points : 279
Tu dois aussi binder le code JS à ton button submit.

Code :
1
2
3
4
5
6
7
8
 
$('#poster').submit(function() {
		$.post('do_creation.php', function(data) {
		  $('#results').html(data);
		});
 
		return false; // Pour ne pas que ton form soumet en plus de la soumission AJAX
});
__________________
Blog - Tutoriels vidéos - Espace DVP
provirus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h27   #12
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
Comme je l'ai souvent entendu dire : "l'amateurisme à ses limites..." ce qui est totalement faux quand on peu compter sur l'aide de certains !

J'avais commencer à bidouiller un petit quelque chose sachant d'où venais le problème ......pitoyable ^^

Code :
1
2
3
4
5
6
7
8
<script type="text/javascript">
                $('#poster').click(function() {
                $('#poster').click();
                $.post('do_creation.php', function(data) {
                  $('#results').html(data);
                });
                });
</script>

J'ai essayé ton js mais cela ne fonctionne pas. Quand je supprime action="do_creation.php" de mon <form> et que je click cela me rafraichi la page sans exécuter la requête. En revanche, quand je remet le action="do_creation.php" le php prend le dessus et ma requête est prise en compte.



EDIT : C'est bon ! Merci beaucoup pour ton aide Simon !!
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 19h46   #13
Membre du Club
 
Inscription : novembre 2005
Messages : 179
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : novembre 2005
Messages : 179
Points : 60
Points : 60
J'ai en fait abandonné cette idée car elle ne me convient pas compte tenu de mon faible niveau pour la suite...
Mais un grand merci encore !
brisso est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h55.


 
 
 
 
Partenaires

Hébergement Web