Aller au contenu

Les conditions


fingolfin

Sujets conseillés

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

Contributeurs actifs dans ce sujet

Contributeurs actifs dans ce sujet

Bonjour,

Par rapport à ta question de base, ce qu'il faut que tu apprennes surtout c'est les types de variables, malheureusement (quoique, pour certains cas ça aide) PHP n'est pas une langage fortement typé, si tu décide d'additionner une chaîne de caractères et un entier il ne sortira pas de message d'erreur dans sa configuration de base... Un exemple :

$var1 = "10"; // Une chaîne de caractères
$var2 = 10;   // Un entier
$var3 = $var1 + $var2;
$var4 = "$var1 + $var2";
echo $var3; // Entier : 20
echo $var4; // Chaine de caractères : 10 + 10

Il faut que tu sois conscient de ce que tu veux comme type de variable et ce que tu y met dedans. Dans ton cas je suppose que tu veux un entier, et si tu place le résultat entre guillemets ("), tu n'obtiendras une châine de caractères. Cela ne pose pas de problèmes à la comparaison en cas d'égalité (==) car, comme le précise le manuel PHP, lors d'une comparaison avec une chaîne de caractères toutes les variables qui ne seraient pas une chaîne de caractères est convertie. Par contre si tu utilises l'égalité stricte (===), la conversion de type (appelée le transtypage) ne s'effectue pas.

Tu as une aide complète ici avec chaque cas et ce qui est retourné :

http://php.benscom.com/manual/fr/types.comparisons.php

Et ici tu as toutes les possibilité des comparaisons :

http://php.benscom.com/manual/fr/language.....comparison.php

Et finalement ici tu as tous les types (avec un lien vers leur page spécifique) :

http://php.benscom.com/manual/fr/language.types.php

Pour résumer, avant de travailler avec des variables il faut savoir ce que tu as dans tes variables et comment se comporte PHP lors d'opérations mathématiques ou de comparaisons avec ces types variables...La meilleure solution étant de t'imposer de ne jamais comparer/aditionner/soustraitre/... des variables qui ne sont pas du même type...à toi de voir...

**EDIT** Pour coller à la question en cours, tu as l'id du membre dans $_SESSION['idmembre'] si tu as gardé le code que je t'avais donnée dans un précédent sujet (cela se trouvat dans le fichier "login.php" si je me souviens bien)...

(Au passage je t'en ai parlé déjà plusieurs fois durant différents sujets...

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Merci pour ces liens, utrement pour l'id je ne croit pas qu'il faut la mettre quelque part dans ce code, il y a juste le pseudo de demander et j'ai mit:

'".$_SESSION['pseudo']."'

Autrement il y a une erreur à cette ligne que je n'arrive pas à trouver:

$sql = ("UPDATE jeuxphp SET bois='bois -$val['bois']' AND SET gold='gold - $val['or']' AND SET pierre='pierre - $val['pierre']'  AND SET terrainl='terrainl -$val['terrain']' AND SET fer='fer - $val['fer']'   WHERE pseudo ='".$_SESSION['pseudo']."' AND password ='".$_SESSION['password']."'");

Voici l'erreur:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\documents and settings\génie\bureau\jeux\constructionscierie.php on line 90

Lien vers le commentaire
Partager sur d’autres sites

Tu as effectivement un message d'erreur car à nouveau tu ne sais pas utiliser les chaînes et la concaténation de celles-ci ... http://php.benscom.com/manual/fr/language.types.string.php

Voici ta chaîne bien formée :

$sql = ("UPDATE jeuxphp SET bois='bois - ".$val['bois']."' AND SET gold='gold - ".$val['or']."' AND SET pierre='pierre - ".$val['pierre']."'  AND SET terrainl='terrainl - ".$val['terrain']."' AND SET fer='fer - ".$val['fer']."'   WHERE pseudo ='".$_SESSION['pseudo']."' AND password ='".$_SESSION['password']."'");

Il faut encore que je te dise que d'après ce que j'ai lu dans tes messages et sujets précédents il me semble que tu as un petit problème de structure de base de données... si tu as des données redondantes entres tes tables comme "pseudo" et "password" (apparemment tu as ces champs dans les tables "membre" et "jeuxphp") c'est que tu n'as pas utilisé les relations entre les tables (je pensais que tu l'avais fait c'est pourquoi je te disait d'utiliser $_SESSION['idmembre']... je te conseille tout de suite la lecture d'articles sur le sujet... je n'ai malheureusement pas de livre récent à te conseiller...désolé...

Un dernier conseil. fait attention à toujours avoir les valeurs pour $val['bois'], $val['or'], ... car un trou dans ta requête la rendrait invalide...

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Lol bah tu vient de répondre à la questions que j'allais poser, je n'ait qu'une table, la table "membre", et il y avait un message comme quoi jeuxphp.jeuxphp n'existait pas, donc je me demandais ce qu'il voulais dire et enfaite j'avais mit le nom de ma BDD au lieu du nom de ma table (heureusement que tu as édité lol).

Euh par contre scierie1 (du formulaire) et toujours un "index undifined", que se soit avec mon code ou avec celui de snwoman49......

Pourtant je ne rêve pas il y a bien écrit "scierie1" dans ce formulaire:

<form method="post" action="constructionscierie.php">
<input type="text" name="scierie1"/><br/>
<input type="submit" value="Contruire les scierie" />
</form>  

Modifié par fingolfin
Lien vers le commentaire
Partager sur d’autres sites

Tu n'aurais pas une erreur, ici ? :

$val['or'] -= $sierieor;

Le undefined index, ligne 90, c'est quel fichier ?

Que se trouve t il, ligne 90 ?

Lien vers le commentaire
Partager sur d’autres sites

Non il n'y a pas d'erreur à cette ligne (c'est le code de snwoman49 et c'est écrit partout sierie au lieu de scierie donc c'est bon).

Par contre, il y a ces deux erreur maintenant:

Notice: Undefined index: scierie1 in c:\documents and settings\génie\bureau\jeux\constructionscierie2.php on line 48

Notice: Undefined index: bois in c:\documents and settings\génie\bureau\jeux\constructionscierie2.php on line 65

La ligne 48:

$scierie1 = $_POST['scierie1'];

Scierie1 est dans le formulaire..

La ligne 65:

if ($scieriebois>=$val["bois"])

La par contre c'est vrai que bois n'est pas définit avant......

Lien vers le commentaire
Partager sur d’autres sites

La ligne 65:
if ($scieriebois>=$val["bois"])

La par contre c'est vrai que bois n'est pas définit avant......

<{POST_SNAPBACK}>

Si c'est définis.

Comme je l'ai expliqé plus haut,tu va sur la ligne de ta table machintruc_tbl dont le pseudo = $pseudo et là tu va prendre les données présentes.Pour pouvoir ensuite comparer avec les prix de la scierie.

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

//Là tu dits que si la valeur d'achat de la scierie en bois est supèrieur à la valeur présente dans la tablesql pour le champ bois alors on peut pas acheter de scierie.

if ($siriebois>=$val["bois"])
{
echo "Vous ne pouvez construire de scierie";
}

Modifié par snwoman49
Lien vers le commentaire
Partager sur d’autres sites

Bah alors pourquoi sa me met tous le temps:

Notice: Undefined index: scierie1 in c:\documents and settings\génie\bureau\jeux\constructionscierie2.php on line 48

Notice: Undefined index: $bois in c:\documents and settings\génie\bureau\jeux\constructionscierie2.php on line 68

Lien vers le commentaire
Partager sur d’autres sites

POur là as tu bien tout définis,en mettant le nom de ta table,pseudo,host,mdp ?

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

Lien vers le commentaire
Partager sur d’autres sites

Oui j'ai un champs bois, (même qu'il y en a 5000 ^^)

Au faites c'est normal que quand je met tous en haut du code (enfin vers le haut)

$pseudo= $_SESSION['pseudo'];

A la place de:

$pseudo=$_POST['pseudo'];

Bah l'ordi me met une dizaine d'erreur? (comem s'il n'y avait pas de pseudo justement), alors que j'ai bien mit inclut mon membres.php qui initialise les sessions.

Lien vers le commentaire
Partager sur d’autres sites

Comme je te le dits les sessions je connais pas bien,mais ce qu'il faut récupèrer c'est soit le pseudo du membre ou son id,en tout cas une information qui fera prendre la ligne de ce membre.

Lien vers le commentaire
Partager sur d’autres sites

Mais ce formulaire, il est bon ou pas?

<form method="post" action="constructionscierie.php">
<input type="text" name="pseudo"/><br/>
<input type="text" name="scierie1"/><br/>
<input type="submit" value="Contruire les scierie" />
</form>

Car tous ce qui est censer être définit à partir des post de ce formulaire, bah sa marche jamais....

Modifié par fingolfin
Lien vers le commentaire
Partager sur d’autres sites

Voilà je viens de tester le script,j'ai rectifié toutes mes erreurs et tout marche.

<?

//on récupère les données après le formulaire
$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('localhost', '', ''); // 1
mysql_select_db('',$db1);  
$sql1= "SELECT * FROM scierie_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

$bois = $val['bois'];
$gold = $val['gold'];
$pierre = $val['pierre'];
$terrain= $val['terrain'];
$fer = $val['fer'];
mysql_close($db1);
$bois -= 500;
$gold -= 500;
$pierre -= 500;
$terrain -= 500;
$fer -= 500;
//on se reconnecte

$db1 = mysql_connect('localhost', '', ''); // 1
mysql_select_db('',$db1);  

//MAintenant on charge les paiements sur la table

$sql = "UPDATE scierie_tbl SET bois='$bois',gold='$gold',pierre='$pierre',terrain='$terrain',fer='$fer' WHERE pseudo='$pseudo' ";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo "Scierie construite avec succès";
mysql_close($db1);
}

?>

Maintenant le formulaire.

<form method="post" action="scierietest.php">
<input type="text" name="pseudo"/><br/>
<input type="submit" value="Contruire les scierie" />
</form>

Et maintenant la table

CREATE TABLE `scierie_tbl` (
 `id` int(11) NOT NULL auto_increment,
 `pseudo` varchar(50) NOT NULL default '',
 `bois` varchar(50) NOT NULL default '',
 `gold` varchar(50) NOT NULL default '',
 `pierre` varchar(90) NOT NULL default '',
 `terrain` varchar(50) NOT NULL default '',
 `fer` varchar(50) NOT NULL default '',
 `scierie` varchar(50) NOT NULL default '',
 PRIMARY KEY  (`id`)
)

Tu peux tester ici en entrant comme pseudo snowman49.

http://www.meteorologic.net/scierie.php

A+

Lien vers le commentaire
Partager sur d’autres sites

Beuh y'a plus personne?

<{POST_SNAPBACK}>

Il faut arrête ce genre de "bump", 10-15 minutes après ton message... personnellement ça ne m'encourage pas à te répondre.

**EDIT** Je retire la deuxième phrase..vu que tu as edité ton message par après...quoique les n° de ligne ça aide pour les erreurs...

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Personnellement je ne te conseille pas de désactiver les E_NOTICE elle peuvent te servir dans le cadre du développement...au contraire les E_NOTICE sont nuisibles dans un environement de production (elle donnent des renseignements critique, surtout lorsque par exemple tu as la directive register_globals activée...)

Pour ton problème je tiens a renouveller (euh pour la 3ème fois) mon conseille, dans la reuqête SQL utilise un WHERE id=".$_SESSION['idmembre'], passer le pseudo par le formulair est une très mauvais idée car les utilisateur pourraient modifier le champ (caché ou non) et modifier les informations d'un autre utilisateur...

[Hors sujet]

rportal> Travailles-tu sans les E_NOTICE quand tu développes le CMS qui figure dans ta signature ?

[/Hors sujet]

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Pour ton problème je tiens a renouveller (euh pour la 3ème fois) mon conseille, dans la reuqête SQL utilise un WHERE id=".$_SESSION['idmembre'], passer le pseudo par le formulair est une très mauvais idée car les utilisateur pourraient modifier le champ (caché ou non) et modifier les informations d'un autre utilisateur...

<{POST_SNAPBACK}>

Je n'en suis pas si sur, en effet, on parle ici des sessions, et les données sont enregistrés sur le serveur. La seule chose que l'utilisateur peut changer est l'id de session, mais pour tomber sur un autre id utilisé par quelqu'un d'autre, il va mettre du temps :rolleyes:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



Connectez-vous maintenant

×
×
  • Créer...