pb Lecture de fichier txt

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pb Lecture de fichier txt

par eru » 13 sept. 2006, 18:48

ok, je suis repassé avec le systeme de <TD><TR> et ca marche, je ne sais pas trop pourquoi, je vais me plonger plus dedans.

Merci pour tous tes conseils TRUC, merci de m'avoir consacré du temps
ci joint le nouveau code qui marche :

header('Content-type: text/html') ; 
if(isset($_POST['nom']) && !empty($_POST['nom'])) 
{ 

	$mess=ucfirst(addslashes(htmlentities($_POST['nom'])));
	
	for($i=0;$i<7;$i++) {
	$mess=str_replace($correct[$i],$correct2[$i],$mess);
	}	

	$time=date("H")."h".date("i");

$final=$time." - ".$mess;
$final=trim($final)."\n";
$fichier=fopen("fichier.txt","a");
fwrite($fichier,"$final");
fclose($fichier);


$tab = file("fichier.txt"); 
$a=0;
$i=0;
print("<TABLE>");
    foreach($tab as $numero => $ligne) { $i++; }
	for($j=1;$j<=11;$j++) {
		if ($a=='1'){
		$class='blanc';
		$a=0;}
		else {
		$class='edito';
		$a=1;}
    echo(utf8_encode("<TR><TD class='$class' width='450' align='left'>".$tab[$i-$j]."</TD></TR>"));
}
print("</TABLE>");
}//fin if 

else 
{  
$tab = file("fichier.txt"); 
$a=0;
$i=0;
print("<TABLE>");
    foreach($tab as $numero => $ligne) { $i++; }
	for($j=1;$j<=11;$j++) {
		if ($a=='1'){
		$class='blanc';
		$a=0;}
		else {
		$class='edito';
		$a=1;}
    echo(utf8_encode("<TR><TD class='$class' width='450' align='left'>".$tab[$i-$j]."</TD></TR>"));
}
print("</TABLE>");

}

par Truc » 13 sept. 2006, 18:42

supprime le header c'est peut être de sa faute :
header('Content-type: text/html') ;
Fait attention tu as des ouverture de balises tablea à la place de fermeture.
Prend l'habitude d'écrire toutes les balises en minuscule.

par eru » 13 sept. 2006, 18:28

C'est un peu long désolé.
J'explique rapidement, a la base le code que j'ai fait, fait appel a du SQL, hors comme la page est rafraichi toutes les minutes, je me suis dit que cela risquait d'être lourd a supporter en cas de connexion multiples.

Donc je tente actuellement de passer par du fichier texte. C'est pourquoi la première partie est travail avec MySQL, tandis que la deuxieme fait appel au fchier texte

amis puriste tremblez, voici mon code...
<?php
header('Content-type: text/html') ; 

if(isset($_POST['nom']) && !empty($_POST['nom'])) 
{ 

	$mess=ucfirst(addslashes(htmlentities($_POST['nom'])));
	
	for($i=0;$i<7;$i++) {
	$mess=str_replace($correct[$i],$correct2[$i],$mess);
	}	

	$time=date("H")."h".date("i");
	//stockage dans la bdd
 	require "*******"; // paramêtres de connexion
               $ezine_db = ezine_connecte_db();

	$sql = "INSERT INTO `shoutbox` ( `nomcom` , `num` , `time` ) VALUES ('$mess', '', '$time')";
	mysql_query($sql, $ezine_db);

    $str_requete = "SELECT * FROM shoutbox ORDER BY num desc LIMIT 0,10";
    $result_shout = mysql_query ($str_requete,$ezine_db) or ezine_mysql_die();
	
	print("<table>");
$a=0;
	while ($shoutdb =mysql_fetch_object($result_shout))
    {
		if ($a=='1'){
		$class='blanc';
		$a=0;}
		else {
		$class='edito';
		$a=1;}
		$reponse = explode(':',stripslashes($shoutdb->nomcom));
		$finish='<font class="title">'.$reponse[0].':</font>'.$reponse[1];
		print("<TR><TD class='$class' width='450'>$shoutdb->time - ".utf8_encode($finish)."</TD></TR>");
	}
	print("<table>");
	mysql_close();
	$affichage='1';
}//fin if 

else 
{  
$tab = file("fichier.txt"); 
$a=0;
print("<table>");
    foreach($tab as $numero => $ligne) { 
     echo $ligne;
}

}
?> 

par Truc » 13 sept. 2006, 18:21

le souci ne vient pas de la fonction Ajax elle même... montre uun peu le code qui est appelé par la fonction ajax.

Vérifie aussi le retour en javascript :

Code : Tout sélectionner

alert(XhrObj.responseText);
juste avant l'affectation à content.innerHTML.

Autre test... faut bien essayer :P
Affiche avec le echo sans saut de ligne (sans <br>).

par eru » 13 sept. 2006, 18:15

lol ca ne marche pas non plus, mais je pense que j'aurais du spécifier un élément important... c'est que ce fichier php est appelé par une fonction AJAX que voici :

Code : Tout sélectionner

<script language="JavaScript"> /** * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest */ /** * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest */ function sendData(data, page, method) { if(document.all) { //Internet Explorer var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ; }//fin if else { //Mozilla var XhrObj = new XMLHttpRequest(); }//fin else //définition de l'endroit d'affichage: var content = document.getElementById("contenu"); //si on envoie par la méthode GET: if(method == "GET") { if(data == 'null') { //Ouverture du fichier sélectionné: XhrObj.open("GET", page); }//fin if else { //Ouverture du fichier en methode GET XhrObj.open("GET", page+"?"+data); }//fin else }//fin if else if(method == "POST") { //Ouverture du fichier en methode POST XhrObj.open("POST", page); }//fin elseif //Ok pour la page cible XhrObj.onreadystatechange = function() { if (XhrObj.readyState == 4 && XhrObj.status == 200) content.innerHTML = XhrObj.responseText ; } if(method == "GET") { XhrObj.send(null); }//fin if else if(method == "POST") { XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); XhrObj.send(data); }//fin elseif setTimeout("sendData('null', 'post.php', 'POST')", 60000); }//fin fonction SendData /** * Permet de récupérer les données d'un fichier via les XmlHttpRequest: */ function getFile(page) { sendData('null', page, 'GET') }//fin fonction getFile </script>
désolé c'est un peu long, le tout est envoyé dans un <div id="contenu">

le probleme doit sans doute venir de se transfert..
Car si je lance juste le script php, toutes les lignes sont affichées. mais dans le div seul la première apparait

par Truc » 13 sept. 2006, 18:08

effectivement c'est étonnant :-k
essaie avec :
foreach($tab as $numero => $ligne) 
{ 
   echo $ligne.'<br/>'; 
} 

par eru » 13 sept. 2006, 17:52

lol, pas de problème voila la réponse :

Code : Tout sélectionner

Array ( [0] => 15h02 - Test : please [1] => 14h56 - Tiriliriksdjfkb : POJHYG .... [116] => )
le problème semble venir de la balise '<BR>'
mais alors je ne sais plus comment revenir a la ligne, c'est ridicule... :oops:

par Truc » 13 sept. 2006, 17:48

Oui ça fonctionne mais il n'y a pas de mise en page :wink:
ça sert juste de test... c'était surtout pour voir sous quel forme tu récupères ces données.
Fait un copier coller de l'affichage ici. (pas 200 lignes :wink: )

par eru » 13 sept. 2006, 17:45

ok merci beaucoup, ca marche si j'affiche directement $tab, cependant est-ce que quelqu'un peut m'expliquer pourquoi ca ne marchait pas avant, juste pour que je ne refasse pas les même erreurs (enfin si vous avez le temps :P

par Truc » 13 sept. 2006, 17:34

essaye en enlevant '=>$ligne' ?
Si on supprime cette ligne il n'y aura pas de différence majeur sauf que tu ne pourra plus accéder aux indices (numéro de ligne) la ligne du fichier se retrouverait dans $numero.

Affiche le contenu de $tab avec :
<pre>
<?php print_r($tab); ?>
</pre>

par eru » 13 sept. 2006, 17:27

bin je vais essayer , mais je comprends pas trop pourquoi... :oops:

si je l'enlève, forcément y'a plus de variable a afficher non?

par jojolapine » 13 sept. 2006, 15:34

essaye en enlevant '=>$ligne' ?

pb Lecture de fichier txt

par eru » 13 sept. 2006, 14:53

Bonjour, j'ai un petit soucis pour lire dans un fichier txt :
Voici mon code :
 $tab = file("fichier.txt"); 
    foreach($tab as $numero => $ligne) { 
   echo $ligne.'<BR>'; 
    }
?> 
ce code est censé lire dans un fichier txt avec plusieurs lignes lequel est du type :

Code : Tout sélectionner

00h00 - nom: message 00h00 - name: message
Le probleme c'est qu'une seule ligne s'affiche, la première du fichier.
Je n'arrive pas a cerner le problème, pourrize vous me conseiller svp?