UPDATE dans champ FLOAT, valeur vide impossible ?

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 : UPDATE dans champ FLOAT, valeur vide impossible ?

Re: UPDATE dans champ FLOAT, valeur vide impossible ?

par VaN » 14 avr. 2010, 17:22

Ok, mais comment je prépare ça en PHP ?

Voici mon script PHP et ma requête :
$clean["palier_id"] = mysql_real_escape_string($palier_id);
$clean["palier_nom"] = mysql_real_escape_string($palier_nom);
$clean["palier_min"] = mysql_real_escape_string($_POST["palier_min"][$palier_id]);
$clean["palier_max"] = mysql_real_escape_string($_POST["palier_max"][$palier_id]);
$clean["palier_taux"] = mysql_real_escape_string($_POST["palier_taux"][$palier_id]);
		
if(empty($clean["palier_max"])) {
		$clean["palier_max"] = NULL;
}

sql_query(sprintf("UPDATE ".$tables["cotisations_paliers"]." SET palier_nom = '%s', palier_min = '%s', palier_max = '%s', palier_taux = '%s' WHERE palier_id = '%d'", 
$clean["palier_nom"], $clean["palier_min"], $clean["palier_max"], $clean["palier_taux"], $clean["palier_id"]));
Or, le $clean["palier_max"] = NULL; en PHP ne marche clairement pas.

Re: UPDATE dans champ FLOAT, valeur vide impossible ?

par macgawel » 14 avr. 2010, 14:55

Bonjour.

Deux choses :
- Dans ta définition de table, tu as `palier_max` float DEFAULT NULL. Du coup, si tu ne le définis pas dans ton UPDATE, il prendra la valeur par défaut (NULL) :mrgreen:

- NULL (SQL) != NULL (PHP) != ''
traduction :
Tu demandes à SQL de mettre la valeur '' dans palier_max. Comme le champ est définit en FLOAT, la chaîne de caractères vide est "transformée" en FLOAT => 0.
Il faudrait demander à SQL de mettre la valeur NULL...

UPDATE dans champ FLOAT, valeur vide impossible ?

par VaN » 13 avr. 2010, 19:58

Bonsoir, je cherche à mettre à jour une ligne d'une de mes tables, de cette manière :
UPDATE cotisations_paliers SET palier_nom = 'Palier 5', palier_min = '150000', palier_max = '', palier_taux = '0.3' WHERE palier_id = '5'
Voici la structure de la table :
CREATE TABLE IF NOT EXISTS `cotisations_paliers` (
`palier_id` tinyint(4) NOT NULL AUTO_INCREMENT,
`palier_nom` varchar(50) NOT NULL,
`palier_min` float NOT NULL,
`palier_max` float DEFAULT NULL,
`palier_taux` float NOT NULL,
PRIMARY KEY (`palier_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

INSERT INTO `cotisations_paliers` (`palier_id`, `palier_nom`, `palier_min`, `palier_max`, `palier_taux`) VALUES
(1, 'Palier 1', 0, 14999, 2.5),
(2, 'Palier 2', 48000, 44999, 1.7),
(3, 'Palier 3', 45000, 74999, 1.2),
(4, 'Palier 4', 75000, 149999, 1),
(5, 'Palier 5', 150000, NULL, 0.3);
Or, cette requête insère un 0 au lieu d'une valeur vide, dans le champ palier_taux. J'ai essayé en changeant le type du champ palier_max sur VARCHAR, et là, aucun problème, j'ai bien une cellule vide.

Je ne peux pas garder un champ de type FLOAT, et y mettre une valeur vide ?