Mon projet et ses bug :)

Petit nouveau ! | 9 Messages

09 sept. 2007, 11:10

Bonjours à tous, voila j'ai un projet depuis maintenant quelque semaine, qui était de faire un jeu par navigation (du style Ogame, etc...). J'ai commencer à coder un peu. Et actuellement le formulaire d'inscription est complêtement terminé, ainsi que la partie connexion. Je m'attaque maintenant à toute la partie technique du site.
Et en ce moment j'ai un petit problème pour inscrire une donnée dans ma base de donnée. Je m'explique :

Prenons le joueur Paul, il décide d'acheter des troupes, un Elfe des Bois Chasseur (Dans ma base de donnée cela corespond à ebc pour Elfe des Bois Chasseur) pour cela j'ai créer un formulaire pour qu'il puisse rentrer un nombre de troupe voulu, mais c'est là qu'interviens mon problème, je n'arrive pas a enregistrer mes infos dans la base de donnée. J'ai d'abord tenter avec :

mysql_query("UPDATE user SET ebc='$ebc' WHERE pseudo='$pseudo'") or die(mysql_error());

Ce code marchais qu'a moitier puisqu'il inscrivait bien la bonne valeur dans ma base de donnée, mais dès que j'actualisais la page, cette valeur était effacer, ou même si je rentrais une autre valeur pour une autre unité.

J'ai aussi essayer ça :

mysql_query("INSERT INTO user (ebc) WHERE pseudo='$pseudo' VALUES('$ebc') ") or die(mysql_error());

Mais là pareil sa marche pas et sa m'affichais :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE pseudo='admin' VALUES('')' at line 1

(admin étant le pseudo avec lequel je m'étais connecté.


Je vous donne le code en entier avec une autre méthode mais qui ne marche toujours pas :
<?php
if($_SESSION['connecte'] == true)
{
        // D'abord, on se connecte à MySQL
        mysql_connect("sql.free.fr", "*******", "*******");
        mysql_select_db("*******");
?>
 
<td valign=top align=center>
<table width=600><tr><div class="title"><b><center>Les Elfes des Bois.</center></b></div></tr>
<br />
<br />
<br />
<br />
 
<td align=left>
<?php
                                                           //Mesure de sécurité.
                                $ebc = htmlspecialchars($_POST['ebc']);
                                $ebr = htmlspecialchars($_POST['ebr']);
                                $ebc2 = htmlspecialchars($_POST['ebc2']);
                                                                $eba = htmlspecialchars($_POST['eba']);
                                                                $ebm = htmlspecialchars($_POST['ebm']);
                                                                $ebt = htmlspecialchars($_POST['ebt']);
                                                                $ebr2 = htmlspecialchars($_POST['ebr2']);
?>
<form action="elfesBois.php" method="post">
        Elfes des Bois Rodeurs : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebr" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 4.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user VALUES('".$ebr."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Chasseur : &nbsp;&nbsp;&nbsp;
                <input type="text" name="ebc" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 7.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user('ebc') VALUES('".$ebc."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Archer : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="eba" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 8.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user('eba') VALUES('".$eba."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Magicien : &nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebm" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 9.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user('ebm') VALUES('".$ebm."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Traqueurs : &nbsp;&nbsp;
                <input type="text" name="ebt" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 10.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user('ebt') VALUES('".$ebt."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Cavalier : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebc2" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 15.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user('ebc2') VALUES('".$ebc2."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Ravageurs : &nbsp;&nbsp;
                <input type="text" name="ebr2" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 18.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
                $requete = "INSER INTO user('ebr2') VALUES('".$ebr2."') WHERE pseudo='".$pseudo."'";
?>
<br />
</form>
<br /><br /><br />
 
 
Vos troupes :
<br /><br />
Elfes des Bois Rodeur :
<?php
                $reponse = mysql_query("SELECT ebr FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebr'];
}
?>
<br /><br />
Elfes des Bois Chasseur :
<?php
                $reponse = mysql_query("SELECT ebc FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebc'];
}
?>
<br /><br />
Elfes des Bois Archer :
<?php
                $reponse = mysql_query("SELECT eba FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['eba'];
}
?>
<br /><br />
Elfes des Bois Magicien :
<?php
                $reponse = mysql_query("SELECT ebm FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebm'];
}
?>
<br /><br />
Elfes des Bois Traqueurs :
<?php
                $reponse = mysql_query("SELECT ebt FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebt'];
}
?>
<br /><br />
Elfes des Bois Cavalier :
<?php
                $reponse = mysql_query("SELECT ebc2 FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebc2'];
}
?>
<br /><br />
Elfes des Bois Ravageurs :
<?php
                $reponse = mysql_query("SELECT ebr2 FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL concernant la formation
 
/* Avec cette boucle, on affiche la valeur de l'entrée :  */
 
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebr2'];
}
?>
</td>
Voila si vous pouviez m'aider je vous en serais très reconnaissant, j'avoue que je bloque pas mal dessus depuis un petit moment.

Je reste à votre entière disposition pour d'éventuelle question.

Amicalement 4m0ni4c.

ViPHP
ViPHP | 5924 Messages

09 sept. 2007, 12:51

Alors, pas mal de remarques :
$requete = "INSER INTO user VALUES('".$ebr."') WHERE pseudo='".$pseudo."'";
C'est “INSERT INTO” et non “INSER INTO”. Tu as des erreurs dans tes requètes, suis ceci pour le débuggage.

Ensuite, ta méthodologie pour modifier les informations dans ta base est douteuse. Si tu veux modifier un joueur, tu ne fais pas une requète INSERT, tu fais une requète UPDATE. Changer de requète ne règlera pas le problème, bien au contraire. Et en plus de faire des requètes INSERT, tu en fais une par champ, de manière à t'assurer que cela ne marche pas :-/

Ensuite, tu fais en 10 requètes ce que tu pourrais faire en une seule, 10 requètes, cela veut dire 10 fois plus de traffic entre ton serveur web et le serveur SQL, dix fois plus de travail pour le serveur SQL et dix fois plus de travail pour l'interpréteur PHP… Utilise la référence SQL pour savoir faire des bonnes requètes.

Enfin tu mets le traitement des requètes INSERT à l'intérieur des formulaires, ce qui est inutile et nuit à la lisibilité. C'est à dire que les traitements, cela se fait en début de script, et l'affichage en fin de script, et tu peux même utiliser des templates pour complètement désolidariser les 2.

Ah oui, j'oubliais, ce code :
$requete = "INSER INTO user VALUES('".$ebr."') WHERE pseudo='".$pseudo."'";
N'exécute aucune requète…

Petit nouveau ! | 9 Messages

09 sept. 2007, 18:29

Tout d'abord je te remerci d'avoir pris de ton temps pour me répondre, ensuite par rapport à tes réponses que tu m'a donner, j'ai modifier quelque peu mon code, mais certain points reste encore pour moi très flou, voici mon code :
<?php
                                                           //Mesure de sécurité.
                                $ebc = htmlspecialchars($_POST['ebc']);
                                $ebr = htmlspecialchars($_POST['ebr']);
                                $ebc2 = htmlspecialchars($_POST['ebc2']);
                                $eba = htmlspecialchars($_POST['eba']);
                                $ebm = htmlspecialchars($_POST['ebm']);
                                $ebt = htmlspecialchars($_POST['ebt']);
                                $ebr2 = htmlspecialchars($_POST['ebr2']);
								$_SESSION['pseudo'] = $pseudo;
?>
                                                               
 
<form action="elfesBois.php" method="post">
	Elfes des Bois Rodeurs : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		<input type="text" name="ebr" size=5 /> 
			<input type="submit" value="Acheter" /> 
				Coût : 4.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET ebr='$ebr' WHERE pseudo='$pseudo'") or die(mysql_error());
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Chasseur : &nbsp;&nbsp;&nbsp;
                <input type="text" name="ebc" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 7.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET ebc='$ebc' WHERE pseudo='$pseudo'") or die(mysql_error());
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Archer : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="eba" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 8.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET eba='$eba' WHERE pseudo='$pseudo'") or die(mysql_error());
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Magicien : &nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebm" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 9.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET ebm='$ebm' WHERE pseudo='$pseudo'") or die(mysql_error());
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Traqueurs : &nbsp;&nbsp;
                <input type="text" name="ebt" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 10.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET ebt='$ebt' WHERE pseudo='$pseudo'") or die(mysql_error());
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Cavalier : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebc2" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 15.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET ebc2='$ebc2' WHERE pseudo='$pseudo'") or die(mysql_error());
?>
<br />
</form>
 
<form action="elfesBois.php" method="post">
        Elfes des Bois Ravageurs : &nbsp;&nbsp;
                <input type="text" name="ebr2" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 18.000
<?php
/* On inscrit la valeur rentrer par l'utilisateur :  */
			mysql_query("UPDATE user SET ebr2='$ebr2' WHERE pseudo='$pseudo'") or die(mysql_error());

?>
<br />
</form>
<br /><br /><br />
 
 
Vos troupes :
<br /><br />
<?php
	  $reponse = mysql_query("SELECT ebr, ebc, eba, ebm, ebt, ebc2, ebr2 FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL
?>
Elfes des Bois Rodeur : 
<?php
// Avec cette boucle, on affiche la valeur de l'entrée :
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebr'];
?>
<br /><br />
Elfes des Bois Chasseur : 
<?php
echo $donnees['ebc'];
?>
<br /><br />
Elfes des Bois Archer : 
<?php
echo $donnees['eba'];
?>
<br /><br />
Elfes des Bois Magicien : 
<?php
echo $donnees['ebm'];
?>
<br /><br />
Elfes des Bois Traqueurs : 
<?php
echo $donnees['ebt'];
?>
<br /><br />
Elfes des Bois Cavalier : 
<?php
echo $donnees['ebc2'];
?>
<br /><br />
Elfes des Bois Ravageurs : 
<?php
echo $donnees['ebr2'];
}
?>
Mon problème étant toujours le même, la valeur que je rentre dans le formulaire est bien inscrite dans la base de donnée, car le tableau récapitulatif en dessous m'indique bien la valeur que je viens de rentrer, et dans ma base de donnée celle çi apparait également, le seul problème, c'est que dès que j'actualise ou que je rentre une valeur pour un autre champ, la valeur rentré précédement s'efface de la base de donnée. Donc je ne vois vraiment plus comment faire pour résoudre se problème. Si tu pouvais m'aider, ou si il y a des choses que tu ne comprends pas, je reste à ta disposition.

Merci d'avance.

ViPHP
ViPHP | 5924 Messages

09 sept. 2007, 19:14

Tu as oublié plusieurs de mes remarques, et non des moins importantes :
Ensuite, tu fais en 10 requètes ce que tu pourrais faire en une seule, 10 requètes, cela veut dire 10 fois plus de traffic entre ton serveur web et le serveur SQL, dix fois plus de travail pour le serveur SQL et dix fois plus de travail pour l'interpréteur PHP… Utilise la référence SQL pour savoir faire des bonnes requètes.

Enfin tu mets le traitement des requètes UPDATE à l'intérieur des formulaires, ce qui est inutile et nuit à la lisibilité. C'est à dire que les traitements, cela se fait en début de script, et l'affichage en fin de script, et tu peux même utiliser des templates pour complètement désolidariser les 2.
Enfin j'en rajoute une, c'est que tu ne vérifies pas si ton formulaire a été posté ou non, tu considères à chaque fois qu'il a été posté. Tu dois utiliser la structure isset() ou la fonction empty() sur tes variables de post pour vérifier si elles existent, et en tenir compte dans ton script. Du coup, il refait les requètes à chaque fois, même si les champs sont vides ou bien si le formulaire n'a pas été posté.
Et il y a quelquechose qui m'étonne, c'est que tu n'aies pas eu d'erreur, tu ne les aurais pas désactivées par hasard ?

Petit nouveau ! | 9 Messages

09 sept. 2007, 20:41

Bon voila, j'ai rajouter ce que tu m'avais dis, et fais les modification que tu m'a dis, voila ce que j'ai maintenant :
<?php
if (isset($_POST['ebc']) AND isset($_POST['ebr']) AND isset($_POST['ebc2']) AND isset($_POST['eba']) AND isset($_POST['ebm']) AND isset($_POST['ebt']) AND isset($_POST['ebr2'])) // Si les variables existent
{
    if ($_POST['ebc'] != NULL AND $_POST['ebr'] != NULL AND $_POST['ebc2'] != NULL AND $_POST['eba'] != NULL AND $_POST['ebm'] != NULL AND $_POST['ebt'] != NULL AND $_POST['ebr2'] != NULL) // Si on a quelque chose à enregistrer
        {
                                                           //Mesure de sécurité.
                                $ebc = htmlspecialchars($_POST['ebc']);
                                $ebr = htmlspecialchars($_POST['ebr']);
                                $ebc2 = htmlspecialchars($_POST['ebc2']);
                                $eba = htmlspecialchars($_POST['eba']);
                                $ebm = htmlspecialchars($_POST['ebm']);
                                $ebt = htmlspecialchars($_POST['ebt']);
                                $ebr2 = htmlspecialchars($_POST['ebr2']);
								$_SESSION['pseudo'] = $pseudo;
								
			mysql_query("UPDATE user SET ebr='$ebr', ebc='$ebc', eba='$eba', ebm='$ebm', ebt='$ebt', ebc2='$ebc2', ebr2='$ebr2' WHERE pseudo='$pseudo'") or die(mysql_error());
}
}
?>
 
<form action="elfesBois.php" method="post">
	Elfes des Bois Rodeurs : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		<input type="text" name="ebr" size=5 /> 
			<input type="submit" value="Acheter" /> 
				Coût : 4.000
</form>
<form action="elfesBois.php" method="post">
        Elfes des Bois Chasseur : &nbsp;&nbsp;&nbsp;
                <input type="text" name="ebc" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 7.000
</form>
<form action="elfesBois.php" method="post">
        Elfes des Bois Archer : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="eba" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 8.000
</form>
<form action="elfesBois.php" method="post">
        Elfes des Bois Magicien : &nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebm" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 9.000
</form>
<form action="elfesBois.php" method="post">
        Elfes des Bois Traqueurs : &nbsp;&nbsp;
                <input type="text" name="ebt" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 10.000
</form>
 <form action="elfesBois.php" method="post">
        Elfes des Bois Cavalier : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="text" name="ebc2" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 15.000
</form>
 <form action="elfesBois.php" method="post">
        Elfes des Bois Ravageurs : &nbsp;&nbsp;
                <input type="text" name="ebr2" size=5 />
                        <input type="submit" value="Acheter" />
                                Coût : 18.000
</form>
<br /><br /><br /><br />
 
 
Vos troupes :
<br /><br />
<?php
	  $reponse = mysql_query("SELECT ebr, ebc, eba, ebm, ebt, ebc2, ebr2 FROM user WHERE pseudo='$pseudo'")or die(mysql_error()); // Requête SQL
?>
Elfes des Bois Rodeur : 
<?php
// Avec cette boucle, on affiche la valeur de l'entrée :
while ($donnees = mysql_fetch_array($reponse) )
{
echo $donnees['ebr'];
?>
<br /><br />
Elfes des Bois Chasseur : 
<?php
echo $donnees['ebc'];
?>
<br /><br />
Elfes des Bois Archer : 
<?php
echo $donnees['eba'];
?>
<br /><br />
Elfes des Bois Magicien : 
<?php
echo $donnees['ebm'];
?>
<br /><br />
Elfes des Bois Traqueurs : 
<?php
echo $donnees['ebt'];
?>
<br /><br />
Elfes des Bois Cavalier : 
<?php
echo $donnees['ebc2'];
?>
<br /><br />
Elfes des Bois Ravageurs : 
<?php
echo $donnees['ebr2'];
}
?>
Mais toujours pas résolus mon problème, et cette foi çi, rien ne s'inscrit dans ma base de donnée, pourtant lorsque je le fais manuellement, je vois bien apparaître les donnée dans le tableau récapitulatif.

Sinon lorsque tu dis :
Et il y a quelquechose qui m'étonne, c'est que tu n'aies pas eu d'erreur, tu ne les aurais pas désactivées par hasard ?
Tu parle de quoi ? parce que je n'ai rien désactivé, et je n'est pas d'erreur.

Encore merci de ton aide.

Amicalement 4m0ni4c.
Modifié en dernier par 4m0ni4c le 12 sept. 2007, 19:50, modifié 1 fois.

ViPHP
ViPHP | 5924 Messages

09 sept. 2007, 21:23

Ok, c'est plus propre déjà, on a bientôt fini !
Tes modifications m'ont permi de comprendre ce que tu essayes de faire en plus, et d'identifier exactement tous tes problèmes !
En fait, je vais t'expliquer le dilemne. Tu as N formulaires, chacun permettant la modification d'une seule valeur. C'est un choix, mais laisse moi t'expliquer toutes les alternatives qui s'offrent à toi pour gérer ce que tu veux faire :

1ère solution : Tu fais un seul formulaire qui te permet d'acheter toutes les troupes d'un coup !
Tu obtiens le formulaire suivant :
<form action="…" method="post" >
    <input type="text" name="truc1" value="0" /> Acheter des truc1
    <input type="text" name="truc2" value="0" /> Acheter des truc2
    …
    <input type="submit" name="ok" value="Acheter" />
</form>
Ensuite, dans ton code php, tu vérifies si le formulaire a été posté et tu insères tout d'un coup :
if( isset($_POST['ok']) ) // Le formulaire a-t-il été posté ?
{
    $truc1 = empty($_POST['truc1']) ? 0 : intval($_POST['truc1']);
    $truc2 = empty($_POST['truc2']) ? 0 : intval($_POST['truc2']); // On vérifie la validité des champs de formulaire ainsi que leur nature (entier, chaine, …), et par défaut, on les met à 0, si un malin veut acheter une quantité de '56ok6g' de truc1 :)
    …
    mysql_query('UPDATE trucs SET truc1 = truc1+' . $truc1 . ', truc2 = truc2+' . $truc2 . ' WHERE machin = ' . $machin . ';'); // Puisque machin a acheté des trucs :D
}

2nde solution : Tu fais un formulaire qui te permet d'acheter un type de troupes.

Tu obtiens le formulaire suivant :
<form action="…" method="post" >
    Truc à acheter : <select name="truc">
        <option value="truc1">Acheter des truc1</option>
        <option value="truc2">Acheter des truc2</option>
        …
    </select>
    Quantité de trucs à acheter : <input type="text" name="nb" value="0" />
    <input type="submit" name="ok" value="Acheter" />
</form>
Et dans le code tu obtiens ceci :
if( isset($_POST['ok']) ) // Le formulaire a-t-il été posté ?
{
    $nb = empty($_POST['nb']) ? 0 : intval($_POST['nb']);
    $truc = empty($_POST['truc']) ? '' : $_POST['truc'];
    if( $nb && in_array($truc, array('truc1', 'truc2', …)) ) mysql_query('UPDATE trucs SET ' . $truc . '=' . $truc . '+' . $nb . ' WHERE machin = ' . $machin . ';');
}

3ème solution : Un champ submit pour chaque type de troupe.
Personnellement, je te déconseillerais cette solution beaucoup plus lourde lors de l'exécution (notamment on ne peut pas tout acheter d'un coup), mais bon, tu es majeur et conscentant donc bon, tu fais ce que tu veux…

Tu obtiens le formulaire suivant :
<form action="…" method="post" >
    <input type="submit" name="truc1" value="Acheter" /> Acheter des truc1
    <input type="submit" name="truc2" value="Acheter" /> Acheter des truc2
        …
</form>
Et ce code ci
$truc = array_intersect_key($_POST, array('truc1'=>'', 'truc2'=>''));
if( !empty($truc) )
{
    mysql_query('UPDATE trucs SET ' . $truc[0] . '=' . $truc[0] . '+1 WHERE machin = ' . $machin . ';');
}
Il y a encore énormément d'autres solutions, mais beaucoup sont des variantes de celles ci. Personnellement, je te conseillerais la première, qui peut être encore plus puissante que ça avec quelques modifications.

Petit nouveau ! | 9 Messages

09 sept. 2007, 22:21

Arf décidément, il aura été plus coriace que ce que je pensais ce code, le problème n'est toujours pas résolu, tout d'abord voici le code :
<?php
if (isset($_POST['ebc']) AND isset($_POST['ebr']) AND isset($_POST['ebc2']) AND isset($_POST['eba']) AND isset($_POST['ebm']) AND isset($_POST['ebt']) AND isset($_POST['ebr2'])) // Si les variables existent
{
    if ($_POST['ebc'] != NULL AND $_POST['ebr'] != NULL AND $_POST['ebc2'] != NULL AND $_POST['eba'] != NULL AND $_POST['ebm'] != NULL AND $_POST['ebt'] != NULL AND $_POST['ebr2'] != NULL) // Si on a quelque chose à enregistrer
        {
                                                           //Mesure de sécurité.
                                $ebc = htmlspecialchars($_POST['ebc']);
                                $ebr = htmlspecialchars($_POST['ebr']);
                                $ebc2 = htmlspecialchars($_POST['ebc2']);
                                $eba = htmlspecialchars($_POST['eba']);
                                $ebm = htmlspecialchars($_POST['ebm']);
                                $ebt = htmlspecialchars($_POST['ebt']);
                                $ebr2 = htmlspecialchars($_POST['ebr2']);
								$_SESSION['pseudo'] = $pseudo;

if( isset($_POST['ok']) ) /* Le formulaire a-t-il été posté ? */
	{
		/* On vérifie la validité des champs de formulaire ainsi que leur nature (entier, chaine, …)*/
		$ebr = empty($_POST['ebr']) ? 0 : intval($_POST['ebr']);
		$ebc = empty($_POST['ebc']) ? 0 : intval($_POST['ebc']);
		$eba = empty($_POST['eba']) ? 0 : intval($_POST['eba']);
		$ebm = empty($_POST['ebm']) ? 0 : intval($_POST['ebm']);
		$ebt = empty($_POST['ebt']) ? 0 : intval($_POST['ebt']);
		$ebc2 = empty($_POST['ebc2']) ? 0 : intval($_POST['ebc2']);
		$ebr2 = empty($_POST['ebr2']) ? 0 : intval($_POST['ebr2']);
		mysql_query('UPDATE user SET ebr = ebr+' . $ebr . ', ebc = ebc+' . $ebc . ', eba = eba+' . $eba . ', ebm = ebm+' . $ebm . ', ebt = ebt+' . $ebt . ', ebc2 = ebc2+' . $ebc2 . ', ebr2 = ebr2+' . $ebr2 . ' WHERE pseudo = ' . $pseudo . ';');
	} 
		}
}
?>
<form action="teste.php" method="POST">
    Elfes des Bois Rodeurs : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	<input type="text" name="ebr" size=5 /> Coût : 4.000 <br /><br />
    
	Elfes des Bois Chasseur : &nbsp;&nbsp;&nbsp;
	<input type="text" name="ebc" size=5 /> Coût : 7.000 <br /><br />
	
	Elfes des Bois Archer : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	<input type="text" name="eba" size=5 /> Coût : 7.000 <br /><br />
	
	Elfes des Bois Magicien : &nbsp;&nbsp;&nbsp;&nbsp;
	<input type="text" name="ebm" size=5 /> Coût : 9.000 <br /><br />
	
	Elfes des Bois Traqueurs : &nbsp;&nbsp;
	<input type="text" name="ebt" size=5 /> Coût : 10.000 <br /><br />
	
	Elfes des Bois Cavalier :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	<input type="text" name="ebc2" size=5 /> Coût : 15.000 <br /><br />
	
	Elfes des Bois Ravageurs :&nbsp;&nbsp;
	<input type="text" name="ebr2" size=5 /> Coût : 18.000 <br /><br />
    <input type="submit" name="ok" value="Acheter" />
</form>
Toujours la même chose, rien ne s'inscrit dans ma base de donnée :s

Je commence à désespérer lol.

Je te remerci encore une fois si tu peux m'aider, cela ne serais pas de refus :)

Amicalement 4m0ni4c.

ViPHP
ViPHP | 5924 Messages

09 sept. 2007, 22:27

enlève ceci :
if (isset($_POST['ebc']) AND isset($_POST['ebr']) AND isset($_POST['ebc2']) AND isset($_POST['eba']) AND isset($_POST['ebm']) AND isset($_POST['ebt']) AND isset($_POST['ebr2'])) // Si les variables existent 
{ 
    if ($_POST['ebc'] != NULL AND $_POST['ebr'] != NULL AND $_POST['ebc2'] != NULL AND $_POST['eba'] != NULL AND $_POST['ebm'] != NULL AND $_POST['ebt'] != NULL AND $_POST['ebr2'] != NULL) // Si on a quelque chose à enregistrer 
        { 
                                                           //Mesure de sécurité. 
                                $ebc = htmlspecialchars($_POST['ebc']); 
                                $ebr = htmlspecialchars($_POST['ebr']); 
                                $ebc2 = htmlspecialchars($_POST['ebc2']); 
                                $eba = htmlspecialchars($_POST['eba']); 
                                $ebm = htmlspecialchars($_POST['ebm']); 
                                $ebt = htmlspecialchars($_POST['ebt']); 
                                $ebr2 = htmlspecialchars($_POST['ebr2']);
et cela :
        } 
}

Petit nouveau ! | 9 Messages

09 sept. 2007, 22:38

Arf toujours pas :s
Il me reste sa :
<?php
			if( isset($_POST['ok']) ) /* Le formulaire a-t-il été posté ? */
				{
					/* On vérifie la validité des champs de formulaire ainsi que leur nature (entier, chaine, …)*/
						$ebr = empty($_POST['ebr']) ? 0 : intval($_POST['ebr']);
						$ebc = empty($_POST['ebc']) ? 0 : intval($_POST['ebc']);
						$eba = empty($_POST['eba']) ? 0 : intval($_POST['eba']);
						$ebm = empty($_POST['ebm']) ? 0 : intval($_POST['ebm']);
						$ebt = empty($_POST['ebt']) ? 0 : intval($_POST['ebt']);
						$ebc2 = empty($_POST['ebc2']) ? 0 : intval($_POST['ebc2']);
						$ebr2 = empty($_POST['ebr2']) ? 0 : intval($_POST['ebr2']);
						mysql_query('UPDATE user SET ebr = ebr+' . $ebr . ', ebc = ebc+' . $ebc . ', eba = eba+' . $eba . ', ebm = ebm+' . $ebm . ', ebt = ebt+' . $ebt . ', ebc2 = ebc2+' . $ebc2 . ', ebr2 = ebr2+' . $ebr2 . ' WHERE pseudo = ' . $pseudo . ';');
				} 
?>
Après le reste à pas changer, et toujours pas d'inscription dans ma BDD.

ViPHP
ViPHP | 5924 Messages

09 sept. 2007, 22:48

Tu dois laisser le
$pseudo = $_SESSION['pseudo'];
et n'oublie pas le or die(…); après ta requète sql pour le débuggage.

Petit nouveau ! | 9 Messages

09 sept. 2007, 23:02

Hum, je sens qu'on touche au but, mais il y a un dernier problème, voici le code :
<?php
			$_SESSION['pseudo'] = $pseudo;
			if( isset($_POST['ok']) ) /* Le formulaire a-t-il été posté ? */
				{
					/* On vérifie la validité des champs de formulaire ainsi que leur nature (entier, chaine, …)*/
						$ebr = empty($_POST['ebr']) ? 0 : intval($_POST['ebr']);
						$ebc = empty($_POST['ebc']) ? 0 : intval($_POST['ebc']);
						$eba = empty($_POST['eba']) ? 0 : intval($_POST['eba']);
						$ebm = empty($_POST['ebm']) ? 0 : intval($_POST['ebm']);
						$ebt = empty($_POST['ebt']) ? 0 : intval($_POST['ebt']);
						$ebc2 = empty($_POST['ebc2']) ? 0 : intval($_POST['ebc2']);
						$ebr2 = empty($_POST['ebr2']) ? 0 : intval($_POST['ebr2']);
						mysql_query('UPDATE user SET ebr = ebr+' . $ebr . ', ebc = ebc+' . $ebc . ', eba = eba+' . $eba . ', ebm = ebm+' . $ebm . ', ebt = ebt+' . $ebt . ', ebc2 = ebc2+' . $ebc2 . ', ebr2 = ebr2+' . $ebr2 . ' WHERE pseudo = ' . $pseudo . ';') or die(mysql_error());
				} 
?>
Et il m'affiche une erreur :
Unknown column 'teste' in 'where clause'
Donc si je traduis, il trouve pas la colonne (ou champs teste) teste étant le pseudo, donc il y a une erreur au niveau de WHERE pseudo = ' . $pseudo . ' je pense, mais je vois pas vraiment d'où sa peux venir :s

ViPHP
ViPHP | 5924 Messages

09 sept. 2007, 23:12

Utilise des guillemets dans les requètes. Quand tu fais :
'WHERE pseudo = ' . $pseudo . ';'
avec $pseudo à 'test'.
Il le traduit par ceci :
'WHERE pseudo = test;'
d'où l'erreur, car test n'a pas été entouré de guillemets dans la requète.

Petit nouveau ! | 9 Messages

09 sept. 2007, 23:21

Je dois vraiment pas avoir de chance moi :S
<?php
$_SESSION['pseudo'] = $pseudo;
			if( isset($_POST['ok']) ) /* Le formulaire a-t-il été posté ? */
				{
					/* On vérifie la validité des champs de formulaire ainsi que leur nature (entier, chaine, …)*/
						$ebr = empty($_POST['ebr']) ? 0 : intval($_POST['ebr']);
						$ebc = empty($_POST['ebc']) ? 0 : intval($_POST['ebc']);
						$eba = empty($_POST['eba']) ? 0 : intval($_POST['eba']);
						$ebm = empty($_POST['ebm']) ? 0 : intval($_POST['ebm']);
						$ebt = empty($_POST['ebt']) ? 0 : intval($_POST['ebt']);
						$ebc2 = empty($_POST['ebc2']) ? 0 : intval($_POST['ebc2']);
						$ebr2 = empty($_POST['ebr2']) ? 0 : intval($_POST['ebr2']);
						mysql_query("UPDATE user SET ebr = ebr+' . $ebr . ', ebc = ebc+' . $ebc . ', eba = eba+' . $eba . ', ebm = ebm+' . $ebm . ', ebt = ebt+' . $ebt . ', ebc2 = ebc2+' . $ebc2 . ', ebr2 = ebr2+' . $ebr2 . ' WHERE pseudo= ' . $pseudo . ';") or die(mysql_error());
				} 
?>
Cette fois, plus d'erreur, mais rien n'est inscrit.

Sinon il vient de me faire un truc bizare, quand j'ai actualiser la page pour tester le changement il m'a afficher :
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Apache/ProXad [Jun 19 2007 23:13:59] Server at darkmythology.free.fr Port 80
Je sais pas si cela pourais avoir un rapport ou pas.

Merci de ton aide encore une fois.

ViPHP
ViPHP | 5924 Messages

10 sept. 2007, 00:07

Non, tu n'as pas fait ce qu'il fallait, ce n'est pas la requète qu'il faut encadrer de guillemets, c'est le pseudo. Tu appliques des modifications au hasard, tu ne crois pas que cela peut marcher.
Ta requète actuellement, elle est interprétée de cette manière :

Code : Tout sélectionner

… WHERE pseudo= ' . test . ';
Tu ne crois pas tout de même que cela va marcher ?
Je ne vois pas où était le problème de compréhension. Au lieu d'avoir ceci :

Code : Tout sélectionner

WHERE pseudo=test;
Il faut que tu obtiennes ceci :

Code : Tout sélectionner

WHERE pseudo="test";

Petit nouveau ! | 9 Messages

10 sept. 2007, 00:27

Alalala, si tu serais a coter de moi, je crois bien que je te ferais l'amour XD

Tout marche niquel !

ENCORE MERCI !!!!!!

Si je peux faire quoique ce soit pour te remercier dis le moi !

PS: Je met en résolu :)