La fonction fread et easyphp

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 16 oct. 2005 à 12:18
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 18 oct. 2005 à 08:57
Bon voila j'ai un petit soucis de traitement car je lis un fichier avec 151433 carateres et je n'arrivais pas a le traiter bizarement et lorsque j'ai voulu afficher ce qu'il lisait du fichier txt quel ne fut pas ma surprise ... le fichier a été correctement fait mais la lecture se passe assez mal.
Est ce normal?
Si oui quel remedes y a t il ? ( car dans ce fichier txt il y a des id_item et les nom_item issues de 3 tables)


-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

7 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 oct. 2005 à 13:56
envoi nous ton code et un extrait de ton fichier...



c'est pas clair du tout ce que tu dis...



pour lire un fichier : file_get_contents

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
17 oct. 2005 à 01:08
Le probleme vient du fait que la variable contenu dans $row["item_id"] change mais son nom associé non
le fichier d ou sont extrais les noms contient: iditem1;nomitem1;iditem2;nomitem2;
je fais donc une recherche sur chaque iditem d un personnage et je fais correspondre cela a son nom.
le resultat est un tableau ou il y a 3 colones
/iditem/nomitem/recipient
Voici le code!

<?php /* Date de création: 14/10/2005 */ ?>
<html>

<?php


/*************************/
/* By:Teclis */
/* Sous License GNU */
/* Thx To : My Faerie */
/* And More... */
/*************************/


echo "<STYLE>" ;
echo ".tabnormal{background-color:white; color:navy; font-weight:normal}";
//couleur sans passage de souris
echo ".tabover{background-color:green; color:white; font-weight:normal}" ;
//couleur avec passage de souris
echo "</STYLE>";


function formulaire_perso()
{
echo "<form name="form_" method="get" action=" ";
echo $_SERVER['PHP_SELF'];
echo "">";

//conexion a la bdd sql
$link = mysql_connect("localhost","root", "")
or die("Impossible de se connecter : " . mysql_error());
//selection de la base
$db_selected = mysql_select_db('l2jdb', $link);
if (!$db_selected) {
die ('Impossible d\'utiliser la base : ' . mysql_error());
}
$table= "characters";
$query = "SELECT * FROM $table";
$result = mysql_query($query) or die("Echec de la requête");

if (mysql_num_rows($result) == 0) { //si aucun resultat
echo "Aucune ligne trouvée, rien à afficher.";
exit; }
//choix perso
echo "<SELECT NAME="comboperso">"; //si resultat
while ($row = mysql_fetch_assoc($result)) { //creation d'une combobox
$nomperso= $row["char_name"]; //avec boucle while (ligne par ligne)
$idperso= $row["obj_Id"]; //recuperation de variables de la table
echo "<OPTION VALUE="$idperso">";
printf(" %s ",$row["char_name"]);
}

echo "</SELECT>";
//choix du recipient
echo "<SELECT NAME="combooption">";
echo "<OPTION VALUE="INVENTORY">INVENTORY"; //choix par defaut
echo "<OPTION VALUE="WAREHOUSE">WAREHOUSE";
echo "<OPTION VALUE="PAPERDOLL">PAPERDOLL";
echo "<OPTION VALUE="TOUS">TOUS";
echo "</SELECT>";


echo "

";


echo "</table>";
echo "
</center>";
}
function verif_perso(){
$idperso=$_GET['comboperso'];
$recipient=$_GET['combooption'];
$fichier="listitems.txt";
//on va regarder combien d item ont ete synchronise
/*Lecture du fichier addlist.txt*/
$fp = fopen ($fichier, "r");
$text= fread($fp,300000);
//on cherche le nombre d'entrees
$nbentrees=substr_count($text,";");
//nombre de requete au max
$nbrequete=$nbentrees/2;
//on eclate la chaine avec pour separateur ;
$liste = explode( ";",$text);

//conexion a la bdd sql
$link = mysql_connect("localhost","root", "")
or die("Impossible de se connecter : " . mysql_error());
//selection de la base
$db_selected = mysql_select_db('l2jdb', $link);
$table= "items";
if (!$db_selected) {
die ('Impossible d\'utiliser la base : ' . mysql_error());
}
if($recipient!="TOUS"){ $query "SELECT * FROM $table WHERE owner_id '$idperso' AND loc = '$recipient'";
$result = mysql_query($query) or die("Echec de la requête");

if (mysql_num_rows($result) == 0) { //si aucun resultat
echo "Aucune ligne trouvée, rien à afficher.";
exit; }

$indexe =0;

if($indexe == 0){
//creation tableau pilote
//tableau d affichage des parametres decrivant les items

echo "<TABLE border=1 cellpadding=0 cellspacing=0 style=border-width:1px;border-style:solid;border-color:navy>";
echo "<TD> id objet</TD>";
echo "<TD> objet</TD>";
echo "<TD> Recipient</TD>";
echo "</TR>";
$indexe =1; //le tableau est indexe
}
if($indexe==1){ //si tableau indexe
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$item = $row["item_id"]; //on recupere chaque champ dans une variable
for($i=0;$i<=$nbrequete;$i=$i+2){
if($liste[$i]==$row["item_id"]){ //c'est ici ou ca se passe mal
$item1=$liste[$i+1];
}
}
$item2 = $recipient;

//ecriture de chaque parametre
echo "<TR class=tabnormal onmouseover=this.className='tabover' onmouseout=this.className='tabnormal'>";
echo "<TD>$item </TD>";
echo "<TD>$item1 </TD>";
echo "<TD>$item2 </TD>";
echo"</TR>";

}
}
}
else{ $query "SELECT * FROM $table WHERE owner_id $idperso";
$result = mysql_query($query) or die("Echec de la requête");

if (mysql_num_rows($result) == 0) { //si aucun resultat
echo "Aucune ligne trouvée, rien à afficher.";
exit; }


$indexe =0;

if($indexe == 0){
//creation tableau pilote
//tableau d affichage des parametres decrivant les items

echo "<TABLE border=1 cellpadding=0 cellspacing=0 style=border-width:1px;border-style:solid;border-color:navy>";
echo "<TD> id objet</TD>";
echo "<TD> objet</TD>";
echo "<TD> Recipient</TD>";
echo "</TR>";
$indexe =1; //le tableau est indexe
}
if($indexe==1){ //si tableau indexe
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$item = $row["item_id"]; //on recupere chaque champ dans une variable
for($i=0;$i<=$nbrequete;$i=$i+2){
if($liste[$i]==$row["item_id"]){ //c'est ici ou ca se passe mal
$item1=$liste[$i+1];
}
}
$item2 = $row["loc"];

//ecriture de chaque parametre
echo "<TR class=tabnormal onmouseover=this.className='tabover' onmouseout=this.className='tabnormal'>";
echo "<TD>$item </TD>";
echo "<TD>$item1 </TD>";
echo "<TD>$item2 </TD>";
echo"</TR>";

}
}


}


}
if(!isset($_GET['sub']))
{
formulaire_perso();
}
else
{
verif_perso();
}


?>

</html>


-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 oct. 2005 à 08:59
Hello,



il est bizarre ton code. T'as pas peut de faire un dépassement avec tes $i+1, $i+2 etc...?

Et là :

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$item = $row["item_id"]; //on recupere chaque champ dans une variable

for($i=0;$i<=$nbrequete;$i=$i+2){

if($liste[$i]==$row["item_id"]){ //c'est ici ou ca se passe mal
$item1=$liste[$i+1];

}

}



Il sert à quoi ton $item...?

Tu lui assignes la valeur de $row['item_id'], et tu ne t'en sers plus.



Explique plutôt ce que tu cherches à faire, et donne un exemple de comment est écrit ton fichier.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 oct. 2005 à 09:00
Ah oui ok tu l'affiches plus loin.



N'empêche, je n'ai pas compris ce que tu cherchais à faire, ni quel était ton problème.
0

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

Posez votre question
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
17 oct. 2005 à 16:33
Mais euh mon code est simple :O)
Bon alors j essayes de re-expliquer!
j'ai un fichier listitems.txt dans lequel il y a :
id1;item1;id2;item2;...idn;itemn;
Le nombre de recherche a faire dans le fichier texte est correspond donc au nombre de : ";" divisé par 2.
Lors de la requete :$query "SELECT * FROM $table WHERE owner_id '$idperso' AND loc = '$recipient'";
OU$query "SELECT * FROM $table WHERE owner_id $idperso";
qui est choisie par l utilisateur suivant 2 combobox decrites ici:
//choix perso
echo "<SELECT NAME="comboperso">"; //si resultat
while ($row = mysql_fetch_assoc($result)) { //creation d'une combobox
$nomperso= $row["char_name"]; //avec boucle while (ligne par ligne)
$idperso= $row["obj_Id"]; //recuperation de variables de la table //ICI ON RECUPERE TOUS LES OBJETS DETENUS PAR UN PERSO
echo "<OPTION VALUE="$idperso">";
printf(" %s ",$row["char_name"]);
}

echo "</SELECT>";
//choix du recipient
echo "<SELECT NAME="combooption">";
echo "<OPTION VALUE="INVENTORY">INVENTORY"; //choix par defaut
echo "<OPTION VALUE="WAREHOUSE">WAREHOUSE";
echo "<OPTION VALUE="PAPERDOLL">PAPERDOLL";
echo "<OPTION VALUE="TOUS">TOUS";
echo "</SELECT>";

Le but de ce script est de faire apparaitre dans un tableau et suivant la colonne, l id des items detenus par le perso, le noms des items qui correspondent a cet id et le recipient (par exemple inventaire, coffre...)
Ce qui fonctionne:
affichage de chaque id des items
affichage du recipient
Ce qui ne fonctionne pas:
l affichage du nom de l item correspondant a l id

J espere que c'est plus clair.
Merci


-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
17 oct. 2005 à 19:21
je viens re remarquer une chose assez étrange... lors de la sous traitance et la construction du fichier txt, et lors de sa lecture en weblocal avec easyphp il y avait des especes de trous entre les valeur et lors du surlignement avec la souris, les lignes réaparaissaient ...j ai easy php 1.7 ca viendrait de ça qu il ne les vois pas et que le script se plante monumentalement? au passage mon fichiers txt contient 151433 caracteres ... je vais voir pour le faire autrement! meme si le code sera assez inbuvable ...


-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 oct. 2005 à 08:57
Ton error_reporting est fixé à quoi ?

au passage, je n'ai toujours pas compris ce que tu voulais faure, lol.
0
Rejoignez-nous