pb Lecture de fichier txt

eru
Eléphanteau du PHP | 39 Messages

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?

ViPHP
ViPHP | 3607 Messages

13 sept. 2006, 15:34

essaye en enlevant '=>$ligne' ?

eru
Eléphanteau du PHP | 39 Messages

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?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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>

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

eru
Eléphanteau du PHP | 39 Messages

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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: )

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

eru
Eléphanteau du PHP | 39 Messages

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:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 sept. 2006, 18:08

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

eru
Eléphanteau du PHP | 39 Messages

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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>).

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

eru
Eléphanteau du PHP | 39 Messages

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;
}

}
?> 

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

eru
Eléphanteau du PHP | 39 Messages

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>");

}