problème de fonction et valeurs retournées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème de fonction et valeurs retournées

Re: problème de fonction et valeurs retournées

par sirakawa » 30 mai 2012, 08:42

Il est d'une grande prudence d'initialiser les variables dans la fonction à une valeur par défaut, qui correspond à une valeur habituelle, avant de faire le moindre calcul. Ainsi au retour on n'a pas besoin de recourir à isset...
Ainsi
function calcul_du_prix_du_beurre($revendeur, $ville)
{
$prix = 8.0;
if ($revendeur == "PetitFour")
{
if ($ville == "Marseille")
{
$prix= 16.32;
}
}
return $prix;
}
ou de recourir systématiquement à la clause default: de switch....

Le manque d'initialisation obligatoire dans PHP produit régulièrement ce type d'erreurs et ce genre de questions.

Re: problème de fonction et valeurs retournées

par Xartrick » 29 mai 2012, 15:09

Tu ne peut pas inclure une condition complète dans une variable.
Pour faire des conditions courtes et claires, utilise les conditions ternaires.

$honoraires = (isset($param[0])) ? $param[0] : "0";
$h1         = (isset($param[1])) ? $param[1] : "0";
$h2         = (isset($param[2])) ? $param[2] : "0";
$h3         = (isset($param[3])) ? $param[3] : "0";
$taux1      = (isset($param[4])) ? $param[4] : "0 %";
$taux2      = (isset($param[5])) ? $param[5] : "0 %";
$taux3      = (isset($param[6])) ? $param[6] : "0 %";

Re: problème de fonction et valeurs retournées

par piotrowski-s » 29 mai 2012, 14:34

j'ai presque résolu mon problème, en fait la condition elseif($versement<=$p1 AND ($versement+$acompte)>=$p2) n'était pas assez précise et du coup lorsque je saisissait un acompte de 14000€ avec 0 € de versements il testait celle ci d'ou j'avais $taux3 et $h3 indéfini. j'ai donc complété en rajoutant elseif($versement<=$p1 AND ($versement+$acompte)>=$p2) AND ($versement+$acompte)<=$p3)

la quasiment tout est bon,

j'ai rajouté également ceci:
if (isset($param[1])) { $h1			= $param[1] ;} else { $h1="0" ; }
if (isset($param[2])) { $h2			= $param[2] ;} else { $h2="0" ; }
if (isset($param[3])) { $h3			= $param[3] ;} else { $h3="0" ; }
if (isset($param[4])) { $taux1		= $param[4] ;} else { $taux1="0 %" ; }
if (isset($param[5])) { $taux2		= $param[5] ;} else { $taux2="0 %" ; }
if (isset($param[6])) { $taux3		= $param[6] ;} else { $taux3="0 %" ; }
if (isset($param[0])) { $honoraires	= $param[0] ;} else { $honoraires="0" ; }
le soucis maintenant est que quelque soit la condition,
j'ai des messages d'erreurs, à savoir:

tout vient de cela:

car les variables ne sont pas toujours définies:
$param =array($honoraires,$h1,$h2,$h3,$taux1,$taux2,$taux3);
du coup je voulais savoir si dans le tableau je suis obligé de mettre des variables ou si je peux mettre des conditions aussi?

tel que pour faire cela:
$param =array(if (isset($param[0])) { $honoraires	= $param[0] ;} else { $honoraires="0" ; },$h1,$h2,$h3,$taux1,$taux2,$taux3);
afin que mes variables ne soient plus indéfinies?

Par avance merci.

Re: problème de fonction et valeurs retournées

par piotrowski-s » 29 mai 2012, 13:22

non, ici également elseif($versement=="0" AND $acompte>=$p4)

mais pour l'exemple cité, j'ai bien fais en sorte d'être dans ce cas la.

Re: problème de fonction et valeurs retournées

par xTG » 29 mai 2012, 13:15

Non ces variables ne sont définies que dans ce cas là :
elseif($versement>=$p4)

Re: problème de fonction et valeurs retournées

par piotrowski-s » 29 mai 2012, 13:09

il me renvoit cela:

0 => float 1750
1 => float 850
2 => float 900
3 => null
4 => float 1.17
5 => float 1.1
6 => null


a priori h3 et taux3 ne seraient pas définis.

pourtant dans la fonction ces variables existent bel et bien.

Re: problème de fonction et valeurs retournées

par xTG » 29 mai 2012, 12:55

Commences par isoler le problème... Car là c'est bien joli de dire qu'il y a des variables non définies...
Mais dans la foule de variable que tu utilises...

Tu peux utiliser var_dump() pour afficher l'array que tu retournes de ta fonction.

problème de fonction et valeurs retournées

par piotrowski-s » 29 mai 2012, 11:02

Bonjour à tous j'ai créé la fonction sous jacente et souhaité récupérer les valeurs nécessaires via un array:
  <?php  function honoraires($p1,$p2,$p3,$p4,$t1,$t2,$t3,$principal2,$type,$versement,$acompte)
{
if ($type=="d")
	{
	if($versement=="0" AND $acompte <= $p1)
		{
		$reste1=$acompte;
		$pc=($t1/100);
		$taux1=$pc+1;
		$h1=(($reste1*$taux1)-$reste1);
		$honoraires=$h1;	
		}
	elseif(($versement)<=$p1 AND ($versement+$acompte)<=$p1)
		{
		$reste1=$acompte;
		$pc=($t1/100);
		$taux1=$pc+1;
		$h1=(($reste1*$taux1)-$reste1);
		$honoraires=$h1;
		}
	elseif($versement<=$p1 AND ($versement+$acompte)>=$p2)
		{
		$reste1=$p1-$versement;
		$pc=($t1/100);
		$taux1=$pc+1;
		$h1=(($reste1*$taux1)-$reste1);
		$reste2=$acompte-$reste1;
		$pc2=($t2/100);
		$taux2=$pc2+1;
		$h2=(($reste2*$taux2)-$reste2);
		$honoraires=($h1+$h2);
		}
	elseif($versement=="0" AND $acompte>=$p2 AND $acompte<=$p3)
		{
		$reste2=$acompte-$p1;
		$reste1=$p1;
		$pc=($t1/100);
		$taux1=$pc+1;
		$h1=(($reste1*$taux1)-$reste1);
		$pc2=($t2/100);
		$taux2=$pc2+1;
		$h2=(($reste2*$taux2)-$reste2);
		$honoraires=($h1+$h2);
		}
	elseif($versement<=$p3 AND $versement>=$p2 AND ($versement+$acompte)>=$p2 AND ($versement+$acompte)<=$p3)
		{
		$reste1=$acompte;
		$pc=($t2/100);
		$taux1=$pc+1;
		$h1=(($reste1*$taux1)-$reste1);
		$honoraires=$h1;	
		}
	elseif($versement>=$p2 AND $versement<=$p3 AND ($versement+$acompte)>=$p4)
		{
		$reste1=$p4-$versement;
		$pc=($t2/100);
		$taux=$pc+1;
		$h1=(($reste1*$taux)-$reste1);
		$reste2=$acompte-$reste1;
		$pc2=($t3/100);
		$taux2=$pc2+1;
		$h2=(($reste2*$taux2)-$reste2);
		$honoraires=($h1+$h2);
		}
	elseif($versement=="0" AND $acompte>=$p4)
		{
		$reste1=$p1;
		$reste2=$p3-$p2;
		$pc=($t1/100);
		$taux1=$pc+1;
		$h1=(($reste1*$taux1)-$reste1);
		$pc2=($t2/100);
		$taux2=$pc2+1;
		$h2=(($reste2*$taux2)-$reste2);
		$reste3=($acompte-$reste1-$reste2);
		$pc3=($t3/100);
		$taux3=$pc3+1;
		$h3=(($reste3*$taux3)-$reste3);
		$honoraires=($h1+$h2+$h3);
		}
	elseif($versement>=$p4)
		{
		$reste3=$acompte;
		$pc3=($t3/100);
		$taux3=$pc3+1;
		$h3=(($reste3*$taux3)-$reste3);
		$honoraires=($h3);
		}
		
	$param =array($honoraires,$h1,$h2,$h3,$taux1,$taux2,$taux3);

return $param;




//et après dans ta page

if (isset($_POST['go'])) { 
$param = honoraires($p1,$p2,$p3,$p4,$t1,$t2,$t3,$principal2,$type,$versement,$acompte);

$honoraires = $param[0];
$h1 		= $param[1];
$h2 		= $param[2];
$h3			= $param[3];
$taux1		= $param[4];
$taux2		= $param[5];
$taux3		= $param[6];
}

	}
}

?>
le soucis c'est que lorsque je récupère tout pour injection dans mysql, il me dit que toutes les variables sont indéfinies:
voici le code pour l'injection:
<?php
if (isset($_POST['go'])) { 
$b				 = date_create($_POST['date_reception']);
$c				 = date_format($b, 'Y/m/d');
$sql = 'INSERT INTO versements SET
n_doss				 = "'.mysql_real_escape_string($_GET['n_doss']).'",
date_reception 		         = "'.mysql_real_escape_string($c).'",
mode				 = "'.mysql_real_escape_string($_POST['mode']).'",
montant				 = "'.mysql_real_escape_string($acompte).'",
honoraires			         = "'.$honoraires.'",
taux1				 = "'.$taux1.'",
taux2				 = "'.$taux2.'",
taux3				 = "'.$taux3.'",
h1					         = "'.$h1.'",
h2			 = "'.$h2.'",
h3			 = "'.$h3.'",
pd= "'.mysql_real_escape_string($_POST['pd']).'"
' ;
mysql_query($sql) or die(__LINE__.mysql_error().$sql);
?>
j'ai le droits a tous les messages de type undefined var

donc je ne comprends pas.

si quelqu'un pouvait éclairer ma lanterne,

d'avance merci.