fingolfin Posté 29 Août 2005 Posté 29 Août 2005 Encore bonjour tous le monde Donc je susi en train d'essayer de faire pour mon jeux php que quand ont a pas assez de ressources bah le ou les bâtiments ne se construisent pas, mais il s'avèrent que sa n'as pas l'aire de prendre ne compte le elseif.... Donc je venais ici pour vous demander si vous connaissiez un site qui expliquez particulièrement bien le système des conditions, voilà merci encore pour vos réponses
rportal Posté 29 Août 2005 Posté 29 Août 2005 dans ton if verifie si tu ne fais pas un truc du genre if($ma_variable=$ma_valeur){...} else if(...){...} Dans ce cas met == si tu ne veux pas affecter la valeur a ta variable, il s'agit d'une erreur classique quand on ne rentre pas dans une condition else if
fingolfin Posté 29 Août 2005 Auteur Posté 29 Août 2005 voici le code qui ne marche pas <? $scierie1 = 'scierie1'; $bois = "bois"; $gold = "gold"; $pierre = "pierre"; $terrain = "terrainl"; $bucherons = "ubucherons"; $fer = "fer";if (( $bois >= $scierie1*400 OR $gold >= $scierie1*500 OR $pierre >= $scierie1*100 OR $fer >= $scierie1*200 OR $bucherons >= $scierie1*8) AND isset ($_POST['scierie1'])) { $scierie1 = htmlentities ($_POST['scierie1'], ENT_QUOTES); $scierietotale = "scierie1 + $scierie1"; $rgold = "gold - ($scierie1 * 500)"; $rbois = "bois - ($scierie1 * 400)"; $terrainl = "terrainl - ($scierie1 * 300)"; $rbucherons = "bucherons - ($scierie1 * 8)"; $rfer = "fer - ($scierie1 * 200)"; $rpierre = "pierre - ($scierie1 * 100)"; mysql_query("UPDATE membre SET scierie1=$scierietotale WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']."'"); mysql_query("UPDATE membre SET gold = $rgold WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']. "'"); mysql_query("UPDATE membre SET bois = $rbois WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']."'"); mysql_query("UPDATE membre SET terrainl = $terrainl WHERE pseudo ='".$_SESSION['pseudo']."' AND password ='".$_SESSION['password']."'"); mysql_query("UPDATE membre SET bucherons = $rbucherons WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']. "'"); mysql_query("UPDATE membre SET fer = $rfer WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']."'"); mysql_query("UPDATE membre SET pierre = $rpierre WHERE pseudo ='".$_SESSION['pseudo']."' AND password ='".$_SESSION['password']."'"); echo "Les bâtiments ont étaient créer"; } else if($bois < $scierie1*400 OR $gold < $scierie1*500 OR $pierre < $scierie1*100 OR $fer < $scierie1*200 OR $bucherons < $scierie1*8 ) { echo"Vous n'avez pas assez de ressource pour construire ces scieries"; die(); }?>
fingolfin Posté 29 Août 2005 Auteur Posté 29 Août 2005 Alors quelqu'un à une idée du blem? (et si quelqu'un avait uen adresse qui expliquer bien aussi).
rportal Posté 29 Août 2005 Posté 29 Août 2005 Euhhh , tu essayes de faire des comparaisons sur des valeurs numeriques non? dans ce cas pourquoi tu initialises tes variables avec des chaines de caracteres??? le probleme vient de la: $scierie1 = 'scierie1';$bois = "bois";$gold = "gold";$pierre = "pierre";$terrain = "terrainl";$bucherons = "ubucherons";$fer = "fer"; je pense que tu voulais faire un truc du genre: $bois = $_SESSION["bois"];.... ou un truc avec $_POST , $_GET ou initialiser avec la base de donnees....
Anonymus Posté 29 Août 2005 Posté 29 Août 2005 Ceci dit, rportal, par la suite, il est marqué : $scierie1 = htmlentities ($_POST['scierie1'], ENT_QUOTES); ce qui sous entend que ce n'est pas ce qu'il cherche à faire. Fingolfin, tu pourrais expliquer ce que tu cherches à faire, avec ce code ? parce que le début ne permet pas de comprendre
rportal Posté 29 Août 2005 Posté 29 Août 2005 De toute facon, il fait toujours ses tests avec les memes valeurs (il les initialise à des valeurs fixes) et pas les bonnes (chaines de caracteres au lieu de nombre)... vu qu'il les initialise je n'ai pas lu son code en entier, je me suis juste arreté à son probleme de savoir pourquoi sa premiere condition est toujours vraie... Ce qui etait initialement sa question (pourquoi le elseif marche pas...)
fingolfin Posté 30 Août 2005 Auteur Posté 30 Août 2005 Bah ce que j'essaye de faire c'est de dire si le joueur n'as pas assez de bois ou d'or ou de pierre ou de main d'oeuvre alors il ne peut pas construire, et s'il a assez bah alors il peut construire. ces lignes la: $scierie1 = 'scierie1';$bois = "bois";$gold = "gold";$pierre = "pierre";$terrain = "terrainl";$bucherons = "ubucherons";$fer = "fer"; 2tant en faites les champs de ma table (scierie1 c'est le champs du nombre de scierie level1 vu que je ne peut pas dire directement scierie1bah j'ai stocker dans une variable).
rportal Posté 30 Août 2005 Posté 30 Août 2005 oui mais non, dans ce cas tu affecte des chaines de caracteres et non pas les valeurs dans ta table. il faut que tu fasses une requete SQL pour recuperer tes donnes et ensuite tu les affectes à tes variables. Cela ne se fait pas de mainiere automatique Si les valeurs sont passees par la requete HTTP (via un formulaire par exemple), utilise les variable $_GET ou $_POST en fonction du contexte.
minirop Posté 30 Août 2005 Posté 30 Août 2005 aussi pourquoi faire un elseif (sans else) si c'est pour dire "vous ne pouvez pas construire" autant mettre un else simple
fingolfin Posté 30 Août 2005 Auteur Posté 30 Août 2005 Bah j'y est penser à mettre un esle à la place du elseif, mais le pc m'afficher uen erreur quand je mettais else donc moi j'ai pas chercher j'ai remit elseif vu que sa marché.
TheRec Posté 30 Août 2005 Posté 30 Août 2005 (modifié) Bonsoir, c'est tout le problème... pour apprendre il faut chercher et pas se contenter d'une solution qui te paraît moins logique mais qui "fonctionne". Les erreurs viennent souvent (lorsqu'on commence) de la syntaxe et la ton meilleure ami ce n'est pas ce forum car on ne te dira jamais mieux comment écrire que dans le manuel de PHP. Suprême aide, il est en Français ( http://www.php.net/manual/fr/ ) ! Il existe même une version spéciale Français ( http://www.nexen.net/docs/php/annotee/manuel_tocd.php ) qui est "commentée" ... Modifié 30 Août 2005 par TheRec
fingolfin Posté 30 Août 2005 Auteur Posté 30 Août 2005 Bah moi en faites comme je l'ai demander je ne sais plus dans quel topic, j'aimerais bien connaître le nom d'un bon livre sur le php et le SQL. Autrement pour mes conditions donc j'ai mit des requêtes comme sa: $bois = mysql_query('SELECT COUNT(*) AS bois FROM membre'); Pour récupérer les ressources et autres truc nécéssaires,et donc maintenant la deuxièmes solution est prise en compte, mais plus la premières , et sa doit venir du faites que pour la deuxièmes solution (elseif donc) il y a une erreur comme quoi 'scierie1' n'est pas défini, pourtant juste au dessus de mes requête pour les ressource j'ai mit: $scierie1 = htmlentities ($_POST['scierie1'], ENT_QUOTES); (j'ai aussi essayer de le mettre dans elseif mais sa ne le prennait pas du tous en compte). Et voici l'erreur rapporté: Notice: Undefined index: scierie1 in c:\documents and settings\génie\bureau\jeux\constructionscierie.php on line 44
fingolfin Posté 30 Août 2005 Auteur Posté 30 Août 2005 Beuh maintenant j'ai défini scierie en mettant: $scierie1 = 'scierie1'; Et bah y' plus d'erreur mais je suis revenu au point de départ que même si le joueur est à -99999999 d'or bah les bêtiments continue à se construire...
rportal Posté 30 Août 2005 Posté 30 Août 2005 Bah moi en faites comme je l'ai demander je ne sais plus dans quel topic, j'aimerais bien connaître le nom d'un bon livre sur le php et le SQL. Autrement pour mes conditions donc j'ai mit des requêtes comme sa: $bois = mysql_query('SELECT COUNT(*) AS bois FROM membre'); Pour récupérer les ressources et autres truc nécéssaires,et donc maintenant la deuxièmes solution est prise en compte, mais plus la premières , et sa doit venir du faites que pour la deuxièmes solution (elseif donc) il y a une erreur comme quoi 'scierie1' n'est pas défini, pourtant juste au dessus de mes requête pour les ressource j'ai mit: $scierie1 = htmlentities ($_POST['scierie1'], ENT_QUOTES); (j'ai aussi essayer de le mettre dans elseif mais sa ne le prennait pas du tous en compte). Et voici l'erreur rapporté: Notice: Undefined index: scierie1 in c:\documents and settings\génie\bureau\jeux\constructionscierie.php on line 44 <{POST_SNAPBACK}> si tu traduis le message de la notification (qui n'est pas une erreur, tu peux les enlever dans ton php.ini) tu remarques que l'index scierie1 n'existe pas dans $_POST donc tu n'as pas de champ dans ton formulaire qui s'appelle scierie1 ou tu valides ton formulaire avec la méthode GET dans ce cas, il faut utiliser $_GET
fingolfin Posté 30 Août 2005 Auteur Posté 30 Août 2005 (modifié) Bah justement, dans mon formulaire scierie1 existe (d'ailleurs dans la condition if je l'ai mit bah aucun problème). Voici d'ailleurs le code du formulaire: <form method="post" action="constructionscierie.php"><input type="text" name="scierie1"/><br/><input type="submit" value="Contruire les scierie" /></form> Modifié 30 Août 2005 par fingolfin
Anonymus Posté 30 Août 2005 Posté 30 Août 2005 Lorsque l'on validera ce formulaire, le programme initialisera la variable $_POST['scierie1']. Ce qui n'est pas pareil que la variable $scierie1. Pour que la seconde prenne la valeur de la première, il faut le lui dire : $scierie1 = $_POST['scierie1']; Pour en revenir à la requète à la base de données, que tu fais plus haut : $bois = mysql_query('SELECT COUNT(*) AS bois FROM membre'); En gros, c'est pô ca du tout Ce que tu as mis c'est : On prend tous les enregistrements de la table 'membre', et on les compte. Ca, c'est la requète. On aura donc le nombre d'enregistrements de la table 'membre'. Puis, dans la requète, on appelle ce nombre 'bois'. Ca permet de se servir de cette variable sql plus tard.. Un peu comme si le champ 'bois' valait "le nombre de membre" de la table membre. Enfin, tu executes la fonction mysql_query, qui renvoie une ressource sql. Donc, un truc du style '#1', qui signifie 'la '1ere' requète s'est bien passée, vous pouvez la retrouver à l'index '1'. Et tu affectes cet identifiant de ressource sql à la variable $bois. Bref, il serait étonnant que tu retrouves le nombre que tu comptais retrouver, avec ceci Idem à Rportal, je me suis arreté à la première erreur, mais j'ai comme l'impression qu'il y en a plétore : $scierietotale = "scierie1 + $scierie1"; ne te renverra pas un nombre, mais une chaine de caractères. Si $scierie1 égale 10, alors $scierietotale sera égale à la chaine de caractères 'scierie1 + 10', et non à un nombre... echo "Les bâtiments ont étaient créer"; nan, nan :: echo "Les bâtiments ont été crée"; mysql_query("UPDATE membre SET scierie1=$scierietotale WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']."'");mysql_query("UPDATE membre SET gold = $rgold WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']. "'");[/QUOTE]En fait, tu fais un UPDATE sur la table 'membre', pour quantité de valeurs, avec des conditions identiques. La même table, les mêmes conditions, tu peux donc condenser tout ceci, ainsi :[CODE]mysql_query("UPDATE membre SET scierie1=$scierietotale,gold = $rgold WHERE pseudo='".$_SESSION['pseudo']."' AND password='".$_SESSION['password']."'"); par exemple.. Et ainsi y mettre tous tes updates en même temps. etc, Anonymus.
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 Bah pourtant sa marche parfaitement toute les lignes ressemblant à $scierietotale = "scierie1 + $scierie1"; Vu que sa prend scierie1 dans la BDD qui est églae au nombre de scierie niveau 1 du joueur et sa rajoute le nombre de scierie que le joueur veut créer (et sa marche je l'ai vérifier pleins de fois).
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 (modifié) <?//on récupère les données après le formulaire$bucherons = $_POST['bucherons'];$pseudo = $_POST['pseudo'];//On imagine que pour avoir une série il faut$siriebois = 500;$sirieor = 500;$siriepierre = 500;$sirieterrain = 500;$siriefer = 500;//on se connecte à la db pour prendre toutes les données si haut suivant la $pseudo$db1 = mysql_connect('', 'pseudo', 'mdp'); // 1mysql_select_db('nombase',$db1); $sql1= "SELECT * FROM tatable_tbl WHERE pseudo='$pseudo' ORDER BY id "; $req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error()); $val = mysql_fetch_assoc($req1); // 2 // 3 if ($siriebois>=$val["bois"]){echo "Vous ne pouvez construire de scierie"; }else{//La on effectue les paiements$val['bois'] -= $sieriebois;$val['or'] -= $sierieor;$val['pierre'] -= $sieriepierre;$val['terrain'] -= $sierieterrain;$val['fer'] -= $sieriefer;mysql_close($db1);//on se reconnecte$db1 = mysql_connect('', 'pseudo', 'mdp'); // 1mysql_select_db('nombase',$db1); //MAintenant on charge les paiements sur la table$sql = "UPDATE tatable_tbl SET bois='$val['bois']' AND SET or='$val['or']' AND SET pierre='$val['pierre']' AND SET terrain='$val['terrain']' AND SET fer='$val['fer']' WHERE pseudo='$pseudo' "; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); echo "Scierie construite avec succès"; mysql_close($db1);}?> Pour le SET je suis pas sur à 100% que ca soit bon. Modifié 31 Août 2005 par snwoman49
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 Euh même si je comprend pas tous, sa me parait bien il faudras que je rajoute quelque calcul et que je modifie un ou deux truc, mais sa me parait bon, merci je vais faire sa tous de suite.
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 Ben c'est pour t'expliquer comment procéder. Faut faire chaque chose en son temps.
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 (modifié) Bah c'est vrai que moi j'ai tendence à tous entasser lol Voilà une ligne que je comprend pas: $sql1= "SELECT pseudo FROM tatable_tbl WHERE pseudo='$pseudo' ORDER BY id "; Je comprend pas pourquoi ont parle de pseudo à cette endroit. Modifié 31 Août 2005 par fingolfin
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 Ben quand le gars il est connecté à ton jeu,il a un pseudo qui lui est assigné,donc dans ta table on va aller à la ligne de ce pseudo,et ne prendre que les valeurs assigné à ce pseudo.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant