harvox
Membre royal très actif
Nombre de messages : 1187
Point(s) Fort(s) : Event/mapping
Point(s) Faible(s) : ruby ?
Niveau RPG Maker : Malgrès mes questions je connais pas mal le logiciel, je dirais 7/10
Date d'inscription : 05/04/2007
|
Sujet: Comparer et éditer Mer 2 Juil 2008 - 23:03 |
|
|
Salut
J'ai fais ce script php qui devrais faire ceci :
- Code:
-
[Character] Account=test8 CharName=test8 CharUID=1000023 Class=145 Model=2012001 Face=0 Reborn=3 Level=120 Experience=72000000 Strength=700 Agility=700 Vitality=700 Spirit=700 CurrentHP=100000 CurrentMP=75 StatPoints=0 LocationMap=1002 LocationX=440 LocationY=384 Silvers=999600 CPs=100 Hair=410 PKPoints=0 Eq_HeadGear=112949-7-3-255-3-3 Eq_Necklace=121229-7-3-255-3-3 Eq_Armor=139299-7-3-255-3-3 Eq_RightHand=421239-7-3-255-3-3 Eq_LeftHand=0 Eq_Ring=152239-7-3-255-3-3 Eq_Boots=160229-7-3-255-3-3 Eq_Garment=0 Eq_Adds=0 Inventory1= Inventory2= Inventory3= Inventory4= Skills=1120,3-1021,0-1000,4-1115,4-1002,3-1046,4-1045,4-1001,3- Profs=420,20-410,20-500,20-480,20-0,20-421,20- Defense=6675 Ban=0 Dodge=154 [WareHouse] Pass=0 Money=0 Tc= Pc= Ma= Bi= Am= Dc= Sc= Home= Chercher la ligne "Silvers=xxx" et remplacer la valeur qu'il y a après le = par 0
J'ai fais ceci, mais lors du début de la boucle for il y a un problème :'(
Parse error: syntax error, unexpected T_DO in C:\wamp\www\site\restau.php on line 46
- Code:
-
<form name="acces" method="post" action="?"> Pseudo : <input type="text" name="pseudo" /><br /> <br/> <input type="submit" name="Créer" /> </form> <?php if($fichier = fopen('C:\Mon serveur privé\TheCOServer\TheCOServer\Server\Accounts'.$pseudo.'.acc', "r")) //si l'ouverture a réussi { $accname = fgets($fichier); $accname = fgets($fichier); //deux fois pour lire la 2eme ligne //aprés on coupe la chaine $accname = explode("=", $accname); //$accname[1] vaut ce qu'il y a aprés le = $fclose($fichier); //On verfie si les variable son bien egale if ($pseudo == $accname['1']) { $fichier = fopen('C:\Mon serveur privé\TheCOServer\TheCOServer\Server\Characters'.$pseudo.'.CHR', "r+") for ($i = 1; $i <= 21; $i++) //j'espére que sa fait bien 21 je peux pas test { $silvers = fgets($fichier); } fseek($fichier, 0); //on revient au debut de la 29eme ligne fputs($fichier, "Silvers=0"); fclose($fichier); } } else { echo 'Ce compte n\'existe pas'; } ?> Merci d'avance si quelqu'un peux m'aider.
|
|
Samarium
Conquérant
Nombre de messages : 2183
Age : 35
Point(s) Fort(s) : Programmation : PHP, Ruby, Java
Point(s) Faible(s) : Dessin
Niveau RPG Maker : Expert
Logiciel préféré : RMXP ; IGM
Date d'inscription : 05/08/2006
|
|
harvox
Membre royal très actif
Nombre de messages : 1187
Point(s) Fort(s) : Event/mapping
Point(s) Faible(s) : ruby ?
Niveau RPG Maker : Malgrès mes questions je connais pas mal le logiciel, je dirais 7/10
Date d'inscription : 05/04/2007
|
Sujet: Re: Comparer et éditer Jeu 3 Juil 2008 - 10:32 |
|
|
Merci
Mais heu...sa fonctionne pas :'( Enfin l'erreur est partie mais le script marche pas :'(
|
|
Jaconil
Villageois (Nv 1)
Nombre de messages : 1
Date d'inscription : 05/03/2008
|
Sujet: Re: Comparer et éditer Sam 2 Aoû 2008 - 16:20 |
|
|
Salut,
Ma réponse est un peu tardive, il se peut que tu aies déjà résolu ton problème, mais j'ai remarqué que plusieurs petites erreurs se glissaient dans ton code.
Tout d'abord, tu peux rajouter une condition : - Code:
-
if (isset($_POST['Creer'])) Qui permet de ne pas avoir "Ce compte n'existe pas" au premier chargement de la page. J'ai par ailleurs remplacé ton "Créer" par "Creer" pour éviter d'avoir des problèmes d'accents si la page change d'encodage (on sait jamais).
Ensuite, ta variable '$pseudo' n'est pas défini, sauf si tu as activé le module 'register_globals' (ce qui est déconseillé pour la sécurité du serveur), et ensuite il faudrait la sécuriser pour l'utiliser sans problème dans la suite du code, ce qui donne : - Code:
-
$pseudo = mysql_escape_string($_POST['pseudo']); Pour ton premier fopen, rajoute un '@' devant pour éviter une erreur si le pseudo (et le fichier) n'existe pas, et sur Windows il faut aussi échapper les antislashs en en mettant 2 ('\\'), et il me semble que tu as oublié des \\ pour séparer le dernier dossier de ton fichier.
'fclose' étant une fonction, ce n'est pas la peine de mettre un '$' devant aussi
Ensuite pour ta seconde condition, il faut rajouter un 'trim' devant '$accname[1]', et entre les crochets, ne mets pas de ' vu que c'est un tableau et que tu y recherches un indice dedans.
Pour ton second 'fopen', il faut aussi doubler les antislashs, et en rajouter aussi juste avant le nom du fichier.
Après il y a un problème avec le 'fseek' car si tu mets 0, il ne revient pas au début de la ligne, mais au début du fichier Il faut pour cela récupérer le nombre d'octets lus dans le fichier avec 'ftell', en soustrayant ceux de la ligne courante pour y revenir au début. Ce qui donne : - Code:
-
$octets = ftell($fichier) - strlen($silvers); fseek($fichier, $octets); //on revient au debut de la 29eme ligne (et c'est la ligne 21, pas 29 )
Alors ensuite je me suis permis de rajouter des lignes pour écrire convenablement dans le fichier, donc j'ai d'abord calculé la différence d'octets entre le premier chiffre (999600 et 0), et ensuite je rajoute autant d'espace que la différence d'octets, il faudra juste utiliser 'trim' pour les enlever lors d'une prochaine lecture. (Attention cependant à ce qu'il y ait toujours un chiffre derrière le =, sinon le script bugguera). Et enfin il faut rajouter le caractère "\n" (avec des doubles quotes pour l'interpréter) pour indiquer qu'on doit sauter une ligne ensuite. Donc dans le script ce plus gros morceau donne ça : - Code:
-
$nouveau_texte = "Silvers=0"; $lg1 = strlen($nouveau_texte); $lg2 = strlen($silvers); $diff = $lg2 - $lg1; if ($diff > 0) { for ($i=1; $i < $diff; $i++) {$nouveau_texte .= ' ';} } fputs($fichier, $nouveau_texte."\n"); Bon alors je remets le script en entier ici - Code:
-
<form name="acces" method="post" action="?"> Pseudo : <input type="text" name="pseudo" /><br /> <br/> <input type="submit" name="Creer" /> </form> <?php if (isset($_POST['Creer'])) { $pseudo = mysql_escape_string($_POST['pseudo']); if($fichier = @fopen('C:\\Mon serveur privé\\TheCOServer\\TheCOServer\\Server\\Accounts\\'.$pseudo.'.acc', "r")) //si l'ouverture a réussi { $accname = fgets($fichier); $accname = fgets($fichier); //deux fois pour lire la 2eme ligne //aprés on coupe la chaine $accname = explode("=", $accname); //$accname[1] vaut ce qu'il y a aprés le =
fclose($fichier); //On verfie si les variable son bien egale if ($pseudo == trim($accname[1])) { $fichier = fopen('C:\\Mon serveur privé\\TheCOServer\\TheCOServer\\Server\\Characters\\'.$pseudo.'.CHR', "r+"); for ($i = 1; $i <= 21; $i++) //j'espére que sa fait bien 21 je peux pas test { $silvers = fgets($fichier); } $octets = ftell($fichier) - strlen($silvers); fseek($fichier, $octets); //on revient au debut de la 21eme ligne $nouveau_texte = "Silvers=0"; $lg1 = strlen($nouveau_texte); $lg2 = strlen($silvers); $diff = $lg2 - $lg1; if ($diff > 0) { for ($i=1; $i < $diff; $i++) {$nouveau_texte .= ' ';} } fputs($fichier, $nouveau_texte."\n"); fclose($fichier); } } else { echo 'Ce compte n\'existe pas'; } } ?>
Voilà j'espère que j'ai pu t'aider, si tu as d'autres questions n'hésite pas.
Jaconil
|
|
harvox
Membre royal très actif
Nombre de messages : 1187
Point(s) Fort(s) : Event/mapping
Point(s) Faible(s) : ruby ?
Niveau RPG Maker : Malgrès mes questions je connais pas mal le logiciel, je dirais 7/10
Date d'inscription : 05/04/2007
|
Sujet: Re: Comparer et éditer Sam 2 Aoû 2008 - 18:06 |
|
|
Yop merci J'avais résolu mais oublié de le dire^^ x_x Au moins grâce à toi j'ai compris comment marche cette foutu fonction : mysql_escape_string
xD
Mci =)
|
|
Contenu sponsorisé
|
Sujet: Re: Comparer et éditer |
|
|
|
|