fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 Ah c'était pour sa, mais dans ce cas je met plutôt de prendre le pseduo qui est stocker dans la session.
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 Je connais pas trop les sesssions,mais de toute facon il faut que tu prennes le pseudo quelque part.
TheRec Posté 31 Août 2005 Posté 31 Août 2005 (modifié) 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 : 20echo $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é 31 Août 2005 par TheRec
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 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
TheRec Posté 31 Août 2005 Posté 31 Août 2005 (modifié) 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é 31 Août 2005 par TheRec
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 (modifié) 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é 31 Août 2005 par fingolfin
Anonymus Posté 31 Août 2005 Posté 31 Août 2005 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 ?
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 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 48Notice: 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......
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 (modifié) 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'); // 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); //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é 31 Août 2005 par snwoman49
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 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 48Notice: Undefined index: $bois in c:\documents and settings\génie\bureau\jeux\constructionscierie2.php on line 68
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 POur là as tu bien tout définis,en mettant le nom de ta table,pseudo,host,mdp ? $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());
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 (modifié) Oui j'ai tous mit parfaitement Modifié 31 Août 2005 par fingolfin
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 Et donc dans ta table tu as un champ bois ? Car sinon je vois pas pourquoi ca faitca,moi j'utilise ce genre de chose et ca marche impec.
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 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.
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 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.
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 (modifié) 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é 31 Août 2005 par fingolfin
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 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', '', ''); // 1mysql_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 // 3if ($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', '', ''); // 1mysql_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+
fingolfin Posté 31 Août 2005 Auteur Posté 31 Août 2005 (modifié) Lol tu vas rire! Il y a encore une erreur chez moi.......... encore pseudo qui est un index undifined lol Modifié 31 Août 2005 par fingolfin
TheRec Posté 31 Août 2005 Posté 31 Août 2005 (modifié) 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é 31 Août 2005 par TheRec
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 En tout cas là le script est bon,il marche impec ici donc.Je ne puis t'aider plus.Désolé.
rportal Posté 31 Août 2005 Posté 31 Août 2005 (modifié) Retire les notices dans ta config PHP. tu edites ton fichier php.ini et tu mets error_reporting = E_ALL & ~E_NOTICE a la place de error_reporting = E_ALL Ensuite tu relances apache un petit RTFM : http://www.php.net/manual/fr/ref.errorfunc...error-reporting Modifié 31 Août 2005 par rportal
TheRec Posté 31 Août 2005 Posté 31 Août 2005 (modifié) 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é 31 Août 2005 par TheRec
Boo2M0rs0 Posté 31 Août 2005 Posté 31 Août 2005 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
snwoman49 Posté 31 Août 2005 Posté 31 Août 2005 Moi dans l'exemple je parle de pseudo,car sur mon site j'utilise pseudo+mdp. Donc aucun soucis.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant