8791 sujets

Développement web côté serveur, CMS

Bonjour,

dans un formulaire en PHP à l'aide de boutons radio, je récupère une valeur dans le tableau $_POST qui représente des frais de port, c'est donc un Float.

dans la page qui suit le formulaire je récupère le champ dans le tableau $_POST mais c'est devenu un CHAR.. et comme j'ai besoin de l'additionner après à un autre float, j'y arrive pas, bien sur et en cherchant sur le net j'ai pas trouver de pistes pour convertir Char en Float.


Help

Smiley smile
ah, merci à toi, et je viens juste de tomber sur l'info dans un bouquin que j'avais oublié que j'avais Smiley cligne

ceci dit, c'est pas encore ça, j'ai pas les décimales...

par exemple, je récupère 4.50 dans mon formulaire, je fais ce code dans la page suivante


	  settype($_POST['postage'], "float");
	  echo '<pre>' var_dump($_POST); echo '</pre>';


et il me livre la valeur 4 sans les décimales...dans le var_dump


array(1) {
  ["postage"]=>
  float(4)
}

Modifié par lionel_css3 (03 Feb 2013 - 20:12)
ah, merci à toi, et je viens juste de tomber sur l'info dans un bouquin que j'avais oublié que j'avais Smiley cligne

ceci dit, c'est pas encore ça, j'ai pas les décimales...

par exemple, je récupère la valeur 4.50 dans mon formulaire, je fais ce code dans la page suivante


	  settype($_POST['postage'], "float");
	  echo '<pre>' var_dump($_POST); echo '</pre>';


et il me livre la valeur 4 sans les décimales...dans le var_dump


array(1) {
  ["postage"]=>
  float(4)
}

Modifié par lionel_css3 (03 Feb 2013 - 20:12)
Soundboy39 a écrit :
Convertit le en &quot;integer (int)&quot; plutôt qu'en float


et les chiffres après la virgule j'en fais quoi?

4 euro c'est pas pareil que 4,50 euro ....
Essaye peut-être avec un truc du genre :

 <?php
function format_values($val, $type) {
  switch($type) {
    case"int":
      if(!is_int($val)) {
        $val = intval($val);
      }
    break;
    case"float":
      if(!is_float($val)) {
        $val = floatval($val);
      }
    break;
    case"bool":
      if(!is_bool($val)) {
        $val = (bool)$val;
      }
    break;
    case"array":
      if(!is_array($val)) {
        $val = (array)$val;
      }
    break;
    case"string":
      if(!is_string($val)) {
        $val = (string)$val;
      }
    break;
  }
  return $val;
}
?> 


Trouvé là : http://www.astuces-php.info/listing-1-id-11-code-128-forcer-le-type-d-une-variable.html
PHP est un langage peu typé donc je ne vois pas pourquoi tu as ce problème. A mon avis, ton soucis viens d'une partie de ton code que tu n'as pas publié ici.
merci jb..

en gros, je récupère une valeur de frais de port dans un formulaire


          <form method="post" action="commande.php" id="form-port" name="form-port">
          <p><input type="radio" name="postage" checked="checked" value="<?php echo number_format(calc_port($poids, "colissimo", "france"), 2, ',', ' '); ?>" /> Colissimo France : EUR <?php echo number_format(calc_port($poids, "colissimo", "france"), 2, ',', ' '); ?></p>
          <p><input type="radio" name="postage" value="<?php echo number_format(calc_port($poids, "minimax", "france"), 2, ',', ' '); ?>" /> Mini Max France : EUR <?php echo number_format(calc_port($poids, "minimax", "france"), 2, ',', ' '); ?></p>
         
		  <input type="submit" value="passer la commande" />          
          </form>



la fonction calc_port renvoie un nombre décimal.
ensuite je récupère ce nombre pour l'ajouter à un total (float) mais il me semble bien que le $_POST ne contient que du texte...


	  $port = $_POST['postage'];                       
	  $grandTotal = $panier->total() + $port; 
	  echo $grandTotal;



à ce stade, si j'ai 10.00 de total et 7.10 de port, le echo $grandTotal me renvoie 17, donc les décimales ont sauté.

plus tard dans le code, si je veux afficher $port


          <p><span>frais de port: </span><em><?php echo number_format($port, 2, ',', ' '); ?></em></p>


j'ai l'erreur

A non well formed numeric value encountered in
<b>F:\vhosts\toto\shop\commande.php</b>
on line
<b>70</b>
<br>
7,00
Modifié par lionel_css3 (04 Feb 2013 - 09:42)
MoOgly a écrit :
Essaye peut-être avec un truc du genre :

 &lt;?php
function format_values($val, $type) {
  switch($type) {
    case&quot;int&quot;:
      if(!is_int($val)) {
        $val = intval($val);
      }
    break;

......... / ..............

      if(!is_string($val)) {
        $val = (string)$val;
      }
    break;
  }
  return $val;
}
?&gt; 




merci, mais ça n'a rien à voir avec la question Smiley smile
ça y est j'ai trouvé d'où venait mon erreur !!!

elle est dans le code que j'ai mentionné ici.... voyons si les plus perspicaces d'entre vous vont trouver cette erreur???


je dis rien....

réponse ce soir si personne n'a trouvé.... Smiley biggrin
jb_gfx a écrit :
Ben tu remplaces les points par des virgules dans ton form.


hé oui.... bravo pour ton oeil de lynx.....
Bonjour,

Je me permet d'ajouter une petite chose.
L'utilisateur ne peut-il pas forcer une autre valeur que celle calculée par ta fonction calc-port.
Dans la barre d'adresse taper: javascript:form-port.postage[0].value = 0; puis javascript:form-port.postage[1].value = 0; (ou un truc du genre, mais c'est possible) et ainsi quelle que soit la radio selectionnée, ton port vaudra 0!
Tes 'value' devrait être du genre port_1 - port_2, etc... et tu ferais un switch sur le $_POST['postage'];
A titre d'exemple:

$postage = 0;
switch ($_POST['postage']) {
   case 'port_1':
      $postage = calc_port($poids, "colissimo", "france");
   break;
   case 'port_2': 
   default:
      $postage = calc_port($poids, "minimax", "france");
   break;
}


Cdt.
Modifié par Giamba (04 Feb 2013 - 18:45)
Giamba a écrit :
Bonjour,

Je me permet d'ajouter une petite chose.
L'utilisateur ne peut-il pas forcer une autre valeur que celle calculée par ta fonction calc-port.
Dans la barre d'adresse taper: javascript:form-port.postage[0].value = 0; puis javascript:form-port.postage[1].value = 0; (ou un truc du genre, mais c'est possible) et ainsi quelle que soit la radio selectionnée, ton port vaudra 0!
Tes 'value' devrait être du genre port_1 - port_2, etc... et tu ferais un switch sur le $_POST['postage'];


Cdt.


tu n'as pas tort, ceci dit c'est une boutique à très petite échelle, donc celui qui prépare l'envoi (moi en l’occurrence) aura largement le temps de vérifier si le port correspond à la réalité de la commande et si l'utilisateur a voulu gruger..

dans le même registre... pour un envoi à l'international (qui n'est pas encore implémenté) l'utilisateur pourrait choisir le colissimo france...pour payer moins cher, mais c'est oublier qu'il existe un maillon intransigeant dans la chaine: l'Homo-verificatus Smiley biggrin

mais ta remarque est intéressante et je vais y réfléchir, niveau sécurité, ceci la 'value' est le résultat d'une fonction qui dépend du poids..

PS: le javascript dont tu parles, tu le tapes seul ou bien à la suite l'url?
Modifié par lionel_css3 (05 Feb 2013 - 10:16)
lionel_css3 a écrit :


tu n'as pas tort, ceci dit c'est une boutique à très petite échelle, donc celui qui prépare l'envoi (moi en l’occurrence) aura largement le temps de vérifier si le port correspond à la réalité de la commande et si l'utilisateur a voulu gruger..

dans le même registre... pour un envoi à l'international (qui n'est pas encore implémenté) l'utilisateur pourrait choisir le colissimo france...pour payer moins cher, mais c'est oublier qu'il existe un maillon intransigeant dans la chaine: l'Homo-verificatus Smiley biggrin

mais ta remarque est intéressante et je vais y réfléchir, niveau sécurité, ceci dit la 'value' est le résultat d'une fonction qui dépend du poids..

PS: le javascript dont tu parles, tu le tapes seul ou bien à la suite l'url?