AIDE PHP

Résolu/Fermé
SitHamster - 30 sept. 2008 à 10:58
 SitHamster - 1 oct. 2008 à 08:43
Bonjour,
J'essaie de créer un compteur (par exemple pour le nombre de visiteurs d'un site). Dans le code qui suit, la phase 1 marche (a chaque ouverture du fichier php, je recupère un nombre stocké dans un .txt, je l'incrémente, affiche "vous etes le n-ieme visiteur et je remplace le nombre du .txt par sa nouvelle valeur.
Maintenant, j'essaie de lire dans le fichier, après l'incrémentation, ce qu'il contient caractère par caractère. Le but, c'est de récupérer la valeur de chaque caractère du .txt et d'afficher une image qui lui correspond (de 0 a 9, en .jpg)
PB : rien ne s'affiche!

mon code:
<?php /* Date de création: 30/09/2008 */ ?>
<html>
<body>
<?php
$i="";
$file=fopen("compteur.txt","r");
while (!feof($file))
$i.=fgets($file);
$i++;
?>
<p>Vous êtes le
<?php echo ($i);
?>
<sup>ème</sup> visiteur</p>
<?php
fclose($file);
$file=fopen("compteur.txt","w");
fputs($file,"$i");
fclose($file);

$k="";
$file=fopen("compteur.txt","r");
for($j=0;$j<(strlen($file));$j++)
{
$k=substr($file, $j,$j+1);
control();
?><img src="<?php print($image) ?>"/><?php
}
function control()
{
if($k==0)
$image="C:/wamp/www/chiffres/zero.jpg";
else
if($k==1)
$image="C:/wamp/www/chiffres/un.jpg";
else
if($k==2)
$image="C:/wamp/www/chiffres/deux.jpg";
else
if($k==3)
$image="C:/wamp/www/chiffres/trois.jpg";
else
if($k==4)
$image="C:/wamp/www/chiffres/quatre.jpg";
else
if($k==5)
$image="C:/wamp/www/chiffres/cinq.jpg";
else
if($k==6)
$image="C:/wamp/www/chiffres/six.jpg";
else
if($k==7)
$image="C:/wamp/www/chiffres/sept.jpg";
else
if($k==8)
$image="C:/wamp/www/chiffres/huit.jpg";
else
if($k==9)
$image="C:/wamp/www/chiffres/neuf.jpg";

}
?>
</body>
</html>

Non seulement le navigateur m'affiche le symbole d'un fichier cassé (une feuille déchirée, alors que les images vont très bien) mais en plus il m'en mets 14 alors que dans mon essai le fichier txt contient '162' (3 chiffres donc)

Qui pourrait m'aider svp?
A voir également:

22 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 391
30 sept. 2008 à 11:55
Bonjour,

Après la deuxième ouverture de ton fichier, tu ne lis pas le fichier, mais en fait tu n'as pas besoin de relire ton fichier car la variable $i contient le nombre de visiteur, donc ton code pourrait être
$k="";
for($j=0;$j<(strlen($i));$j++)
{
$k=substr($i, $j,$j+1);
control();
?><img src="<?php print($image) ?>"/><?php
}

A plus
0
Rollin'babe !!
30 sept. 2008 à 12:24
Bonjour,

Voici une solution qui devrait peut être fonctionner :

A+.



<?php /* Date de création: 30/09/2008 */ ?>
<html>
<body>
<?php
$i=0; ==> du numérique
$file=fopen("compteur.txt","r");
==> balaie le fichier
while (!feof($file))
$i =( int) fgets($file); ==> casting en numérique
$i++;
?>
<p>Vous êtes le
<?php echo ($i);
?>
<sup>ème</sup> visiteur</p>
<?php
fclose($file);
$file=fopen("compteur.txt","w");
fputs($file,"$i");
fclose($file);

$file=fopen("compteur.txt","r");
==> positionnement sur le dernier enregistrement
for($j=0;$j<=$i ;$j++)
{
$k = fgets($file);
}
==> extraie chaque caractére et affiche l'image correspondante
for($j=0;$j<strlen($k);$j++)
{
$k=substr($k, $j,$j+1);
control();
?><img src="<?php print($image) ?>"/><?php
}

function control()
{
if($k=="0")
$image="C:/wamp/www/chiffres/zero.jpg";
else
if($k=="1")
$image="C:/wamp/www/chiffres/un.jpg";
else
if($k=="2")
$image="C:/wamp/www/chiffres/deux.jpg";
else
if($k=="3")
$image="C:/wamp/www/chiffres/trois.jpg";
else
if($k=="4")
$image="C:/wamp/www/chiffres/quatre.jpg";
else
if($k=="5")
$image="C:/wamp/www/chiffres/cinq.jpg";
else
if($k=="6")
$image="C:/wamp/www/chiffres/six.jpg";
else
if($k=="7")
$image="C:/wamp/www/chiffres/sept.jpg";
else
if($k=="8")
$image="C:/wamp/www/chiffres/huit.jpg";
else
if($k=="9")
$image="C:/wamp/www/chiffres/neuf.jpg";

}
?>
</body>
</html>
0
Rollin'babe !!
30 sept. 2008 à 13:02
Re,

En tenant compte de l'avis éclairé de christounet avec des corrections à de chtites erreurs de ma part :

<?php /* Date de création: 30/09/2008 */ ?>
<html>
<body>
<?php
$i=0;
$file=fopen("compteur.txt","r");
while (!feof($file))
$i =( int) fgets($file);
$i++;
?>
<p>Vous êtes le
<?php echo ($i);
?>
<sup>ème</sup> visiteur</p>
<?php

fclose($file);
$file=fopen("compteur.txt","w");
fputs($file,"$i");
fclose($file);

$k = "";

==> casting en chaine de caractères du compteur (a vérifier quand même si c'est permis...)
$k = (string) $i;

for($j=0;$j<strlen($k);$j++)
{
$m = "";
$m=substr($k, $j,$j+1);
control();
?><img src="<?php print($image) ?>"/><?php
}

function control()
{
if($m=="0")
$image="C:/wamp/www/chiffres/zero.jpg";
else
if($m=="1")
$image="C:/wamp/www/chiffres/un.jpg";
else
if($m=="2")
$image="C:/wamp/www/chiffres/deux.jpg";
else
if($m=="3")
$image="C:/wamp/www/chiffres/trois.jpg";
else
if($m=="4")
$image="C:/wamp/www/chiffres/quatre.jpg";
else
if($m=="5")
$image="C:/wamp/www/chiffres/cinq.jpg";
else
if($m=="6")
$image="C:/wamp/www/chiffres/six.jpg";
else
if($m=="7")
$image="C:/wamp/www/chiffres/sept.jpg";
else
if($m=="8")
$image="C:/wamp/www/chiffres/huit.jpg";
else
if($m=="9")
$image="C:/wamp/www/chiffres/neuf.jpg";

}
?>
</body>
</html>
0
Merci a vous deux, le code tourne mieux: j'ai bien le nombre d'icones correspondant au nombre de chiffres de mon .txt. Y'a toujours un pb d'accès aux images...
0

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

Posez votre question
Rollin'babe !!
30 sept. 2008 à 13:23
Re,

Tests :

- Peux tu afficher la valeur de $k sur ta page car je suis pas sur du casting en (string)...et vérifier que tu a bien ce qui faut ?.
- Et afficher aussi la valeur de $m dans la boucle avant l'appel de control()....

A+.
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 391
30 sept. 2008 à 13:32
Bonjour,

Ne dois-tu pas remplacer l'instruction print($image) par echo ($image) ?

A plus
0
A rollin'babe: echo ne change rien par rapport a print
A christounet: j'affiche bien $k mais a chaque réaffichage de la page il incrémente de deux
0
Rollin'babe !!
30 sept. 2008 à 13:54
Re,

peux tu me recopier-coller ton code stp.

Merci.
0
<?php /* Date de création: 30/09/2008 */ ?>
<html>
<body>
<?php
$i=0;
$file=fopen("compteur.txt","r");
while (!feof($file))
$i =( int) fgets($file);
$i++;

fclose($file);
$file=fopen("compteur.txt","w");
fputs($file,"$i");
fclose($file);

$k = "";
?>
<p>Vous êtes le <?php
$k = (string) $i;

for($j=0;$j<strlen($k);$j++)
{
$m = "";
$m=substr($k, $j,$j+1);
control();
?><img src="<?php print($image) ?>"/><?php
}

function control()
{
if($m=="0")
$image="C:/wamp/www/chiffres/zero.jpg";
else
if($m=="1")
$image="C:/wamp/www/chiffres/un.jpg";
else
if($m=="2")
$image="C:/wamp/www/chiffres/deux.jpg";
else
if($m=="3")
$image="C:/wamp/www/chiffres/trois.jpg";
else
if($m=="4")
$image="C:/wamp/www/chiffres/quatre.jpg";
else
if($m=="5")
$image="C:/wamp/www/chiffres/cinq.jpg";
else
if($m=="6")
$image="C:/wamp/www/chiffres/six.jpg";
else
if($m=="7")
$image="C:/wamp/www/chiffres/sept.jpg";
else
if($m=="8")
$image="C:/wamp/www/chiffres/huit.jpg";
else
if($m=="9")
$image="C:/wamp/www/chiffres/neuf.jpg";

}
?><sup>ème</sup> visiteur</p><?php
?>
</body>
</html>
0
Rollin'Babe !!
30 sept. 2008 à 14:27
Re,

Ok mais avec l'affichage de $k si possible et pas de l'image pour le moment.

Je voudrais comprendre pourquoi il incrémente de 2...

(:>)
0
<html>
<body>
<?php
$i=0;
$file=fopen("compteur.txt","r");
while (!feof($file))
$i =( int) fgets($file);
$i++;
/*?>
<p>Vous êtes le
<?php echo ($i);
?>
<sup>ème</sup> visiteur</p>
<?php*/

fclose($file);
$file=fopen("compteur.txt","w");
fputs($file,"$i");
fclose($file);
?>
<p>Vous êtes le
<?php
$k = "";

$k = (string) $i;

for($j=0;$j<strlen($k);$j++)
{
$m = "";
$m=substr($k, $j,$j+1);
control();
?><img src="<?php echo($image) ?>"/><?php
}
?>
<sup>ème</sup> visiteur</p>

<?php
function control()
{
if($m=="0")
$image="C:/wamp/www/chiffres/zero.jpg";
else
if($m=="1")
$image="chiffres/un.jpg";
else
if($m=="2")
$image="C:/wamp/www/chiffres/deux.jpg";
else
if($m=="3")
$image="C:/wamp/www/chiffres/trois.jpg";
else
if($m=="4")
$image="C:/wamp/www/chiffres/quatre.jpg";
else
if($m=="5")
$image="C:/wamp/www/chiffres/cinq.jpg";
else
if($m=="6")
$image="C:/wamp/www/chiffres/six.jpg";
else
if($m=="7")
$image="C:/wamp/www/chiffres/sept.jpg";
else
if($m=="8")
$image="C:/wamp/www/chiffres/huit.jpg";
else
if($m=="9")
$image="C:/wamp/www/chiffres/neuf.jpg";
}
echo ($k);
?>
</body>
</html>
0
Rollin'Babe !!
30 sept. 2008 à 14:55
Bon,

(;>)...on v y arriver mais je crois qu'on se comprends pas.

Je voudrais ceci dans ton code en fait :

.......................................
$k = "";
$k = (string) $i;
<?php echo ($k);
?>
..........................................
Tu testes et tu me tiens au courant.

A++.
0
Rollin'Babe !!
30 sept. 2008 à 14:56
Re,

- OK - autant pour moi - c bon - t'obtiens quoi ?..

++.
0
<html>
<body>
<?php
$i=0;
$file=fopen("compteur.txt","r");
while (!feof($file))
$i =( int) fgets($file);
$i++;
/*?>
<p>Vous êtes le
<?php echo ($i);
?>
<sup>ème</sup> visiteur</p>
<?php*/

fclose($file);
$file=fopen("compteur.txt","w");
fputs($file,"$i");
fclose($file);
?>
<p>Vous êtes le
<?php
$k = "";

$k = (string) $i;
echo ($k);
/*
for($j=0;$j<strlen($k);$j++)
{
$m = "";
$m=substr($k, $j,$j+1);
control();
?><img src="<?php echo($image) ?>"/><?php
}
?>*/
?>
<sup>ème</sup> visiteur</p><?php

/*
<?php
function control()
{if...}
*/
echo ($k);
?>
</body>
</html>

La avec les commentaires de part et d'autre de l'affichage des images, $k incrémente bien de 1
0
Rollin'Babe !!
30 sept. 2008 à 15:24
Ok,

C'est bon pour toi cette variable ??? (g po tout compris mais po grave..).

Alors :

- Enlève tous les "echo ($k)".
- Affiche et testes maintenant $m stp.
.....................................................
$m = "";
$m=substr($k, $j,$j+1);
echo($m);
control();
....................................................

Testes et vérifie que $m est correctement décomposé - compare avec le "echo ($k)".

A++.
0
le $m fonctionne bien, et affiche la même valeur que $k quand je les 'echo' tous les deux (j'ai réussi a foutre un beau bordel dans mon code avec mes /* et mes ?> X-p)
0
Rollin'Babe !!
30 sept. 2008 à 16:03
Ok,

Maintenant :

- A tu tes images ou non ?...

A++.
0
Non; j'ai toujours le logo avec la feuille en deux morceaux mais les url des images sont bons ("C:/wamp/www/chiffres/un.jpg" etc.)
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 391
30 sept. 2008 à 16:52
Bonjour,

Dans quel répertoire se trouve ta page html, car si tes images sont dans le même répertoire, tu dois mettre comme chemin d'accès$image="un.jpg";, etc.
Si tes images sont dans un sous-répertoire, alors utilses$image="../chiffre/un.jpg"; car je pense qu'il ne faut pas mettre le chemin complet avec la lettre du disque.
A plus
0
Rollin'Babe !!
30 sept. 2008 à 17:29
Re,

Je pense que christounet a raison.
A tu essayé ?.

A++.
0