JeuWeb - Crée ton jeu par navigateur
Achats de troupes - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Achats de troupes (/showthread.php?tid=5012)



Achats de troupes - vulcain - 24-07-2010

Bonjour,

Je voudrai savoir comment faire lorsque je récupère $_POST['achat'], je fais pour enlever X ressources au joueurs, mettre à jour dans la BDD avec ses troupes supplémentaires et lui dire qu'il n'a pas assez de sous si c'est le cas.

J'ai 100 000 gold, je possède 50 gobelins, sachant qu'un gobelin coûte 15 000 gold et que je veux en acheter 1. Je vais donc sur ma page "caserne" là où on peut les former, je rentre 1 pour en acheter 1. Je fais recruter, et là ça doit me renvoyer sur la même page me disant que j'ai bien acheter $_POST['achat'] gobelins, donc si j'en n'achète un je devrai en avoir 51.

Comment faire ?

Merci de votre aide,

Bonne journée


RE: Achats de troupes - Joojo - 24-07-2010

Code PHP :
<?php 
if (isset($_POST['achat']))
{
if(
ctype_digit($_POST['achat'])) //On vérifie que le chaine postée est un nombre
{
$nbre de gobelins = $_POST['achat'];
$cout total des achats = $nbre de gobelins * 15 000;

//Tu vas chercher le montant d'argent que possède le joueur avec un SELECT.

//S'il a assez, tu soustraits le montant de ses po avec $cout total des achats puis tu update ta bdd (argent et nombre de gobelins)

//Sinon tu affiches "Vous n'avez pas assez d'argent." avec un echo
}
}

Voilà en gros.


RE: Achats de troupes - vulcain - 24-07-2010

Ok merci,

Donc là j'ai fait un petit script en partant de la base du tien.
J'ai donc crée une table troupes pour le moment j'y ai mit :

-ID
-Pseudo
-Gold

Maintenant, voici mon script :

Code PHP :
<?php

//Connexion à la base de données.
mysql_connect($localhost, $conquestworld, $*********);
mysql_select_db($conquestworld);

$reponse = mysql_query("SELECT pseudo, gold, gobelins WHERE pseudo='".$pseudo."' LIMIT 1");
$donnees = mysql_fetch_array($reponse);
// Si $_POST['achat'] existe:
if(!empty($_POST['achat'])
{
if (
$_POST['pseudo'] != NULL)
{
// Assez de gold
if(($_POST['achat']*15000) <= $donnees['gold'])
{
$depense=$_POST['achat']*15000;
$galdsnow=('.$donnees['gold'].'-$depense;
$archersnow='.$donnees['gobelins'].'+$_POST['achat'];
// J'actualise
mysql_query("UPDATE membres SET gold=$goldnow WHERE pseudo='".$pseudo."'");
mysql_query("UPDATE troupes SET gobelins=gobelinssnow WHERE pseudo='".$pseudo."'");
}
else echo
'Ressources insuffisante';
}
}
}

?>

Dîtes moi si je dois changer quelques choses ou bien l'améliorer.


RE: Achats de troupes - Joojo - 24-07-2010

Je crois que empty et null vérifie la même chose, peut être une condition à supprimer. Plutôt une condition if (isset)) puis if(!=NULL).

Des parenthèses seules et concaténation inutile dans tes variables, ton script ne va pas fonctionner là.

Ici tu peux te prendre une injection SQL ta variable pseudo n'est pas du tout protégée et je te conseille d'utiliser les sessions pour transmettre l'id et le login si besoin. Protège protège les données qu'envoie le joueur! (avec les requêtes sql préparées plus besoin)

les commandes mysql_query etc.. deviennent obselétes, la PDO parait que c'est l'avenir, va lire les tutos du sdz la dessus


RE: Achats de troupes - Colmea - 24-07-2010

Salut,

Perso je pense au contraire que empty et null ne vérifient pas la même chose.

empty = ''
null = NULL

et je partage l'avis de Joojo quand à mysql_query Smile Demandons quand même l'avis des pros du forum


RE: Achats de troupes - vulcain - 24-07-2010

Merci pour vos conseils, mon script fonctionne. ^^


RE: Achats de troupes - wildd - 24-07-2010

pas besoin du select.

UPDATE SET gold= gold - $cout WHERE pseudo='".$pseudo."' AND gold >= $cout");

UPDATE membres SET gobelins= gobelins + $gobelinsAchetes WHERE pseudo='".$pseudo."'"

testes naturellement tes retour de mysql_query (pr savoir si l'update de gold échoue ou n'affecte aucune ligne, histoire de pas faire la mise à jour du nombre de troupe, tu aurais l'air malin d'offrir gratuitement des troupes)