Aller au contenu
fingolfin

Les conditions

Noter ce sujet :

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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:

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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:

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

<?

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×