8791 sujets

Développement web côté serveur, CMS

Salut,

Voilà je me demandais admettons qu'on créer un formulaire qui permet de calculer quelque chose avec 14 champs à 4 liste déroulante par exemple.

J'aimerais savoir s'il est possible de récupérer seulement les valeurs insérées. C'est à dire que si je remplis le champs numéro 1 et que je remplis le champs numéro 3

Je ferais le calcul seulement avec ces valeurs étant données que les autres champs ne sont pas obligatoires.

Alors, j'ai réfléchi mais étant débutant en php je ne trouve pas de solution concluante Smiley biggol

Cordialement, DjaSama
Il suffit de n'utiliser que les champs non vides
if (!empty($_POST['...'])) {


Si tu es débutant en PHP Alsacréations n'est pas le bon forum pour apprendre : il en existe une foultitude sur le web qui s'en occupent. Smiley cligne
Hey re Smiley lol

Enfin débutant je voulais dire par là que j'ai appris le php du site du zéro il y a peu de temps ^^

Merci je vais essayer ça toute suite je te tiens au courant de la suite des évènements Smiley ravi
Voilà mon code :



<form method="post">
<h3>Caractéristique</h3>
Dommages : +<input name="dmg" size="5" type="text"> et +<input name="dmgp" size="5" type="text">% <br />
Force : <input name="fo" size="8" type="text"> <br />
Intelligence : <input name="int" size="8" type="text"> <br />
Chance : <input name="ch" size="8" type="text"> <br />
Agilité : <input name="agi" size="8" type="text"> <br />

<h3>Sort</h3>
Degats : <input name="deg1" size="8" type="text"> à <input name="dag1" size="8" type="text"> <select name="degtype1"><option value=""></option><option value="neu">Neutre</option><option value="fo">Terre</option><option value="int">Feu</option><option value="ch">Eau</option><option value="agi">Air</option></select><br>
Degats : <input name="deg2" size="8" type="text"> à <input name="dag2" size="8" type="text"> <select name="degtype2"><option value=""></option><option value="neu">Neutre</option><option value="fo">Terre</option><option value="int">Feu</option><option value="ch">Eau</option><option value="agi">Air</option></select><br>

Degats : <input name="deg3" size="8" type="text"> à <input name="dag3" size="8" type="text"> <select name="degtype3"><option value=""></option><option value="neu">Neutre</option><option value="fo">Terre</option><option value="int">Feu</option><option value="ch">Eau</option><option value="agi">Air</option></select><br>
Degats : <input name="deg4" size="8" type="text"> à <input name="dag4" size="8" type="text"> <select name="degtype4"><option value=""></option><option value="neu">Neutre</option><option value="fo">Terre</option><option value="int">Feu</option><option value="ch">Eau</option><option value="agi">Air</option></select><br>

<input value="Calculer" type="submit"></form>


	if (!empty($_POST['deg1'])) 
		{	
			$deg1 = $_POST['deg1'] * (100 + $_POST['int'] + $_POST['dmgp']) / 100 + $_POST['dmg'];
			$deg2 = $_POST['dag1'] * (100 + $_POST['int'] + $_POST['dmgp']) / 100 + $_POST['dmg'];
			
			echo ''.floor($deg1).'';
		}



Donc ce que tu m'as données marche et je t'en remercie seulement j'aimerais savoir s'il y a un moyen de raccourcir le script php ou il est obligé d'écrire toute les possibilités ?

Parce que si je devais écrire tous ça prendrai quand même un bout de temps mais je le ferais car ça m'aide pour le jeu au quel je joue xD

Voilà, merci d'avance

EDIT :

Bon je reviens, si je ne me trompe pas la fonction empty permet de vérifier si un champs est vide ( ce qui peux être utile pour les formulaires ).

Et le fait de mettre un point d'exclamation, cela inverse la fonction donc à la place de déterminer si un champ est vide, cela va déterminer si le champ est rempli.

Donc pour finir ce script ça ne serait pas du tous compliqué pour moi, juste un peu long je pense.

Voilà merci Heyoan, tu m'as bien aidé aujourd'hui lol et je t'en remercie encore Smiley smile
Je ne met pas encore résolu on sais jamais si je rencontre un autre problème ça m'évitera de créer un autre topic surtout que j'en suis à 2 aujourd'hui Smiley rolleyes

Cordialement, DjaSama
Modifié par DjaSama (23 Aug 2010 - 19:44)
Bon voilà, je suis bloqué là

Dans mon formulaire il y a une liste déroulante dont je voudrais extraire les valeurs seulement c'est là ou je bug...

Donc voilà, je l'ai vérifier avec isset il n'y a plus l'erreur effectivement mais quand lorsque je calcul rien ne se passe Smiley ohwell

EDIT : Je viens tous juste de réussir à trouver le problème, je prenais en fait la mauvais valeur. Smiley biggol



	// Calcul pour les dégats neutre
	if (!empty($_POST['deg1'])) 
		{	
			if (!empty ($_POST['dmg']) OR ($_POST['dmgp']) OR ($_POST['fo']) AND ($_POST['degtype1']))
				{	
					$deg1 = $_POST['deg1'] * (100 + $_POST['fo'] + $_POST['dmgp']) / 100 + $_POST['dmg'];
					$deg2 = $_POST['dag1'] * (100 + $_POST['fo'] + $_POST['dmgp']) / 100 + $_POST['dmg'];
					
					echo 'Vos dégats : '.floor($deg1).' à '.floor($deg2).'';
				}
		}



Voilà donc mais le quand je récupère la valeur de degtype1 avec $_POST, coment faire pour afficher se résultat en echo ?

EDIT : Désolé si j'édite à chaque fois mais à chaque fois que je post un problème je trouve la solution à mon problème peu de temps après, donc voilà j'ai trouver comment afficher encore ^^'

Je voudrais savoir s'il est possible dans un calcul par exemple :



$_POST['deg1'] * (100 + $_POST['fo'] + $_POST['dmgp']) / 100 + $_POST['dmg'];



Genre par exemple dans ce calcul ajouté $_POST['int'] ou autres selon la valeur entrée dans le formulaire.

Merci d'avance
Modifié par DjaSama (23 Aug 2010 - 23:09)
DjaSama a écrit :
si je ne me trompe pas la fonction empty permet de vérifier si un champs est vide [...] Et le fait de mettre un point d'exclamation, cela inverse la fonction donc à la place de déterminer si un champ est vide, cela va déterminer si le champ est rempli.
Pas tout à fait : voir ce post.

Sinon plusieurs remarques :

* pour des questions d'accessibilité il faut associer chaque élément INPUT, TEXTAREA ou SELECT) à un élément LABEL. cf. http://openweb.eu.org/articles/formulaire_accessible

* tu utilises des variables dans tes calculs sans vérifier qu'elles existent et qu'elles sont bien numériques (par exemple $_POST['fo']).

* le test suivant
if (!empty ($_POST['dmg']) OR ($_POST['dmgp']) OR ($_POST['fo']) AND ($_POST['degtype1']))
n'est certainement pas celui que tu voulais faire ! Si toutes tes variables sont vides sauf une seule (à part $_POST['degtype1']) qui contiendrait par exemple "blabla" le calcul (si on peut l'appeler comme ça) sera effectué ! !empty doit être appliqué sur chaque champ et il faut que tu apprennes comment fonctionnent les opérateurs logiques ainsi que la notion de précédence des opérateurs.
* chaque Sort dans ton formulaire correspond à 3 champs associés et donc tu te simplifierais la vie (et donc le code) en utilisant un tableau pour chacun (deg[], dag[] et degtype[]).

Donc je me permets de te le redire : il faudrait (re)voir les bases. Smiley langue
D'accord, j'ai regardé les liens que tu m'as passé seulement je n'ai pas compris pour les opérateurs logiques.

Dans mon script, j'ai pas compris c'est quoi le problème que vous trouviez ? je les ai mal utilisé ?

Enfin, j'ai compris qu'il fallais pour chaque champ appliqué !empty mais je ne vois pas comment faire, j'ai essayé mais ça me renvoi une erreur Smiley ohwell
Modifié par DjaSama (24 Aug 2010 - 15:15)
Et un truc du genre, non ?


$datas = array();
foreach($_POST as $k=>$v) {
    if(!empty($v)) {
        $datas[$k] = $v;
    }
}

Modifié par Lpu8er (27 Aug 2010 - 02:30)