Aller au contenu

Sujets conseillés

Posté

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 :D

  • Réponses 84
  • Créé
  • Dernière réponse

Contributeurs actifs dans ce sujet

Contributeurs actifs dans ce sujet

Posté

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 ;)

Posté

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();

}
?>

:unsure:

Posté

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....

Posté

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 :(

;)

Posté

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 :P

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...) :hypocrite:

Posté

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).

Posté

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.

Posté

aussi pourquoi faire un elseif (sans else) si c'est pour dire "vous ne pouvez pas construire" autant mettre un else simple

Posté

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é.

Posté (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é par TheRec
Posté

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 :lol: , 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é

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...

Posté
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  :lol: , 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

Posté (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é par fingolfin
Posté

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.

Posté

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).

Posté (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'); // 1
mysql_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'); // 1
mysql_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é par snwoman49
Posté

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 :D je vais faire sa tous de suite.

Posté (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é par fingolfin
Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant

×
×
  • Créer...