[Codage PHP] Affichage résumé d'une ligne

Fermé
Oasis - 18 sept. 2012 à 20:02
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014 - 25 sept. 2012 à 22:18
Bonjour,

Je tiens à prévenir que je suis débutant en PHP.

J'administre un Jeu en ligne.
J'aimerai ajouter un résumé venant des informations sur les effets d'un objet.
Pour etre plus clair, voici un bout de code de ma page:

print "\n<tr><td>{$r['itmname']}</td><td>{$r['itmdesc']}</td><td>\${$r['itmbuyprice']}</td><td>\${$r['itmsellprice']}</td><td><form action='itembuy.php?ID={$r['itmid']}' method='post'>Qté: <input type='text' STYLE='color: black;  background-color: white;' name='qty' value='1' /><input type='submit' STYLE='color: black;  background-color: white;' value='Acheter' /></form></td></tr>";


Où cette ligne print, affiche des infos sur l'objet, je voudrai ajouter la variable "effect1" , en l'ajoutant avec le print j'obtiens ceci (qui n'est pas pratique pour un joueur lol):
a:4:{s:4:"stat";s:4:"will";s:3:"dir";s:3:"neg";s:8:"inc_type";s:7:"percent";s:10:"inc_amount";i:5;}

Qui comprant toutes les infos que je veux rajouter : Will est la volonté, neg est le sens de l'effet de l'objet (credit ou débit) , percent signifie que cette valeur est en poucentage (d'autres objets sont en valeur numeraire), inc_amount est la valeur de credit ou débit.

Pour résumer: Cet objet apporte 5% de Volonté (will) en l'utilisant.

J'aimerai en fait que cette ligne soit traduite et n'affiche que:

Volonté: + 5%


J'espere avoir été assez clair sur mon probleme, merci par avance aux bons codeurs de votre aide.






A voir également:

19 réponses

Pardon, j'ajoute qu'en fait je pense que c'est une condition dont j'ai besion: si percent alors j'affiche % etc...
Encore merci
0
polimacasto Messages postés 1 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 19 septembre 2012
19 sept. 2012 à 15:00
je n'ais pas compris tu peux réexpliquer stp
0
Natio78 Messages postés 719 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 27 mai 2013 96
19 sept. 2012 à 15:11
ça ressemble à du json ce que tu as, il faut que tu le parcours.

Tu peux faire un print_r($r); et nous dire ce que ça retourne?
avec une boucle foreach ou un for tu dois pouvoir avoir les infos que tu souhaites
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
Modifié par oasisdudesert le 19/09/2012 à 20:08
Merci déjà de te pencher dessus ;)

Voici le résultat du print_r($) :

Array ( [sitemID] => 32 [sitemSHOP] => 16 [sitemITEMID] => 49 [itmid] => 49 [itmtype] => 16 [itmname] => Arc et ses fleches [itmdesc] => Arc milieu de gamme, silencieux et efficace [itmbuyprice] => 425 [itmsellprice] => 210 [itmbuyable] => 1 [effect1_on] => 1 [effect1] => a:4:{s:4:"stat";s:6:"energy";s:3:"dir";s:3:"neg";s:8:"inc_type";s:7:"percent";s:10:"inc_amount";i:3;} [effect2_on] => 1 [effect2] => a:4:{s:4:"stat";s:7:"agility";s:3:"dir";s:3:"neg";s:8:"inc_type";s:6:"figure";s:10:"inc_amount";i:2;} [effect3_on] => 1 [effect3] => a:4:{s:4:"stat";s:6:"energy";s:3:"dir";s:3:"neg";s:8:"inc_type";s:6:"figure";s:10:"inc_amount";i:10;} [weapon] => 3 [armor] => 0 [itmtypeid] => 16 [itmtypename] => Armes blanches )


Qui est fort pratique dailleurs merci , j'allais sur la base pour savoir moi :)

Bref, je peux donc confirmer qu'il s'agit bien de la ligne effect1,effect2 et effect 3 qui resument bien ce que je veux afficher.

Je vais regarder pour le boucle foreach et le for mais c'est fort pas gagné car je ne connais pas du tout.

Merci encore de bien vouloir m'aider.
0

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

Posez votre question
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
21 sept. 2012 à 06:56
UP?
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
Modifié par oasisdudesert le 21/09/2012 à 15:59
Personne ne peut m'aider ?

J'ai du mal a comprend la command foreach
J'aimerai essayé avec la commande if de la facon suivante :

if (contenu de [effect1] contient energy)
echo "Energie":
elseif (contenu de [effect1] contient agility)
echo "Agilité"
if (contenu de [effect1] contient pos)
echo "+"


De facon à ce que ca ecrive Energie +5%
0
je pense que ton tableau est sérialisé il te faut donc faire l'inverse avec la fonction unserialize()

$test = unserialize($r["effect1"]);

ensuite traite la variable $test normalement.
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
Modifié par oasisdudesert le 21/09/2012 à 16:17
Cette ligne contient toutes les infos dont j'ai besoin, le type d'effet, selon si cet effet est croissant ou decroissant, exprimé en pourcentage ou en valeur.



Voici le contenu complet de ma page :

<?php 

/************************************************************************************************** 
| Software Name        : 
| Software Author      :  
| Software Version     : V 
| Website              :  
| E-mail               :  
|************************************************************************************************** 
| The source files are subject to the Ravan Scripts End-User License Agreement included in License Agreement.html 
| The files in the package must not be distributed in whole or significant part. 
| All code is copyrighted unless otherwise advised. 
| Do Not Remove Powered By Ravan Scripts without permission .          
|************************************************************************************************** 
| Copyright (c) . All rights reserved. 
|**************************************************************************************************/ 

include "globals.php"; 
$_GET['shop'] = abs((int) $_GET['shop']); 
if(!$_GET['shop']) 
{ 
print " 

<div class='generalinfo_txt'> 
<div><img src='images/info_left.jpg' alt='' /></div> 
<div class='info_mid'><h2 style='padding-top:10px;'> Magasins </h2></div> 
<div><img src='images/info_right.jpg' alt='' /></div> </div> 
<div class='generalinfo_simple'><br> <br><br> 


Vous faites le tour des magasins du Pays.<br />"; 
$q=$db->query("SELECT * FROM shops WHERE shopLOCATION={$ir['location']}"); 
print "<table width=85% cellspacing=1 border=1 class='table'><tr style='background: gray;'><th>Shop</th><th>Description</th></tr>"; 
while($r=$db->fetch_row($q)) 
{ 
print "<tr><td><a href='shops.php?shop={$r['shopID']}'>{$r['shopNAME']}</a></td><td>{$r['shopDESCRIPTION']}</td></tr>"; 
} 
print "</table></div><div><img src='images/generalinfo_btm.jpg' alt='' /></div><br></div></div></div></div></div>"; 
} 
else 
{ 
$sd=$db->query("SELECT * FROM shops WHERE shopID={$_GET['shop']}"); 
if($db->num_rows($sd)) 
{ 
$shopdata=$db->fetch_row($sd); 
if($shopdata['shopLOCATION'] == $ir['location']) 
{ 
print " 

<div class='generalinfo_txt'> 
<div><img src='images/info_left.jpg' alt='' /></div> 
<div class='info_mid'><h2 style='padding-top:10px;'> {$shopdata['shopNAME']} </h2></div> 
<div><img src='images/info_right.jpg' alt='' /></div> </div> 
<div class='generalinfo_simple'><br> <br><br> 

Parcours d'objets à <b> {$shopdata['shopNAME']} ...</b><br /> 
<table cellspacing=1 class='table'><tr style='background: gray;'><th>Objet</th><th>Description</th><th>Prix</th><th>Prix de vente</th><th>Acheter</th></tr>"; 
$qtwo=$db->query("SELECT si.*,i.*,it.* FROM shopitems si LEFT JOIN items i ON si.sitemITEMID=i.itmid LEFT JOIN itemtypes it ON i.itmtype=it.itmtypeid WHERE si.sitemSHOP={$_GET['shop']} ORDER BY i.itmtype ASC, i.itmbuyprice ASC, i.itmname ASC"); 
$lt=""; 
while($r=$db->fetch_row($qtwo)) 
{ 
if($lt!=$r['itmtypename']) 
{ 
$lt=$r['itmtypename']; 
print "\n<tr style='background: gray;'><th colspan=5>{$lt}</th></tr>"; 
} 
print_r($r); 



print "\n<tr><td>{$r['itmname']}</td><td>{$r['itmdesc']}<br>{$r['effect1']}</td><td>\${$r['itmbuyprice']}</td><td>\${$r['itmsellprice']}</td><td><form action='itembuy.php?ID={$r['itmid']}' method='post'>Qté: <input type='text' STYLE='color: black;  background-color: white;' name='qty' value='1' /><input type='submit' STYLE='color: black;  background-color: white;' value='Acheter' /></form></td></tr>"; 
} 
print "</table></div><div><img src='images/generalinfo_btm.jpg' alt='' /></div><br></div></div></div></div></div>"; 
} 
else 
{ 
print "Vous tentez d\'acceder à un magasin d\'un autre Pays!"; 
} 
} 
else 
{ 
print "Vous tentez d\'acceder à une magasin innexistant!"; 
} 
} 
$h->endpage(); 
?> 


Crois tu pouvoir m'aider sur skype ou autre ? je pourrais t'expliquer en detail
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
21 sept. 2012 à 16:22
Je ne comprend pas,
Que fais unserialize concretement ? et comment le traiter ?
Merci a toi de m'aider, je suis débutant en php
0
ta chaine de caractère est un tableau, sauf qu'il a été mis à la suite, séparé par des virgules, il a été concaténé quoi.
unserialize remet ta chaine de caratère en tableau

Quest-ce que t'affiche ceci ?
$test = unserialize($r["effect1"]);
print_r($test );
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
Modifié par oasisdudesert le 21/09/2012 à 16:29
Array ( [stat] => energy [dir] => neg [inc_type] => percent [inc_amount] => 3 )
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
21 sept. 2012 à 16:32
j'ai edité sorry
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
21 sept. 2012 à 16:30
ohh puree chacune est une variable ?
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
21 sept. 2012 à 16:30
Je dois m'absenter pfff, j'espere trouver la solution en revenant vers 19h30
Merci de ton aide encore
0
Pour récupérer les valeur tu fait:

$test = unserialize($r["effect1"]);

$stat = $test["stat"];
$dir = $test["dir"];
$type = $test["inc_type"];
$amount = $test["inc_amount"];
0
oasisdudesert
21 sept. 2012 à 18:32
Je test des que j arrive chez moi. Merci
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
Modifié par oasisdudesert le 21/09/2012 à 20:15
$test = unserialize($r["effect1"]);  
$stat = $test["stat"];  
$dir = $test["dir"];  
$type = $test["inc_type"];  
$amount = $test["inc_amount"]; 




print "\n<tr><td>{$r['itmname']}</td><td>{$r['itmdesc']}" 
<br> if ($stat=energy) 
{ 
print "Energie" 
} 
else  
{ 
break; 
} 


print " 
</td><td>\${$r['itmbuyprice']}</td><td>\${$r['itmsellprice']}</td><td><form action='itembuy.php?ID={$r['itmid']}' method='post'>Qté: <input type='text' STYLE='color: black;  background-color: white;' name='qty' value='1' /><input type='submit' STYLE='color: black;  background-color: white;' value='Acheter' /></form></td></tr>";


N'est ce pas correct ?
J'aimerai que si le contenu de $stat est energy le traduire en Energie sinon continuer . Je me ferai le reste en if a moins qu'il n'y ait mieux.


Edit: visiblement non car syntax error, où est ce que je plante?
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
22 sept. 2012 à 09:44
up?
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
22 sept. 2012 à 10:45
Que la condition soit verifiée ou pas il m'affiche quand meme meme le mot traduit en mettant :

{
if ($stat=energy)

print "Energie";
}

Ou est ce que j'ai faux pour ne l'afficher que si verifié?
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
Modifié par oasisdudesert le 22/09/2012 à 17:15
Ca fonctionne tres bien grace a toi Flog78 ,
J'ai codé comme ceci :
//Effet 1******************************************************************************************************************** 
$test = unserialize($r["effect1"]);  
$stat = $test["stat"];  
$dir = $test["dir"];  
$type = $test["inc_type"];  
$amount = $test["inc_amount"]; 




print "\n<tr><td>{$r['itmname']}</td><td>{$r['itmdesc']}<br>"; 

if ($stat==energy) 
{ 
echo "Energie"; 
}else if ($stat==will) 
{echo "<img src='images/v.png' alt='Volonté' />Volonté"; 
}else if ($stat==strength) 
{echo "<img src='images/muscle.png' alt='Force' />Force"; 
}else if ($stat==agility) 
{echo "Agilité"; 
}else if ($stat==guard) 
{echo "Defense"; 
}else if ($stat==labour) 
{echo "Travail"; 
}else if ($stat==robskill) 
{echo "Subtilisation"; 
}else if ($stat==IQ) 
{echo "QI"; 
}else if ($stat==brave) 
{echo "Courage"; 
}else if ($stat==hp) 
{echo "<div><img src='images/icon-health.png' alt='Sante' />Santé</div>"; 
}else if ($stat==hospital) 
{echo "Temps Hopital"; 
}else if ($stat==jail) 
{echo "Temps Prison"; 
}else if ($stat==money) 
{echo "Cash"; 
}else if ($stat==crystals) 
{echo "Cristaux"; 
}else if ($stat==crimexp) 
{echo "EXP Crimes"; 
} 

if ($dir==pos) 
{ 
echo "+"; 
} 
else  
{ 
echo "-"; 
} 
echo "$amount"; 
if ($type==percent) 
{echo"%"; 
}


Comment mettre la condition pour que si effec1_on est a 1 car j'ai essayé :

if (effect1_on==1) 
{ 
commande 
}


mais ca ne fonctionne pas, je ne sais pas comment mettre la syntaxe
0
if ($r["effect1_on"]=="1")
{
}

tu devrai mettre des guillements après le égal dans chaque if, c'est plus propre.
if ($stat=="energy") etc...
0
oasisdudesert Messages postés 27 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 3 mai 2014
25 sept. 2012 à 22:18
Merci beauxcoup ca fonctionne , j'ai beaucoup appris grace a toi ^^
0