Jump to content
Serial

Checkbox Ne Se Décoche Pas

Recommended Posts

Bonjour,

 

J'ai crée un nouveau champ dans ma base dans la table ps_product. C'est simplement une checkbox qui prend pour valeur 0 ou 1 (cochée ou décochée).

 

Pour l'ajouter dans le BO, je suis aller dans la classe Product.php, ajouter mon champ dans la définition.

Enfin pour l'afficher dans l'onglet "Prix", j'ai mis ce code là :

<div class="form-group">
	<div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="is_solde" type="default"}</span></div>
	<label class="control-label col-lg-2" for="is_solde"> </label>
	<div class="col-lg-9">
		<div class="checkbox">
			<label class="control-label" for="is_solde" >
				<input type="checkbox" name="is_solde" id="is_solde" {if $product->is_solde}checked="checked"{/if} value="1" />
				{l s='Display the "sold" icon on the product page, and in the text found within the product listing.'}
			</label>
		</div>
	</div>
</div>

Après test, si je coche mon champ, ca met bien la valeur à 1 dans ma base.

Par contre, dès que je décoche, la valeur ne se remet pas à zéro. Et pourtant, lors de l'enregistrement de la fiche produit, j'ai bien le message "Mise à jour réussie". Et ma case se "recoche" :D

 

J'ai du rater quelque chose mais je ne trouve pas :wacko:

Edited by Serial (see edit history)

Share this post


Link to post
Share on other sites

Si tu mets un value à 1 dans un checkbox... ben il vaudra 1 si il est coché et n'existera pas si il n'est pas coché.

Si il n'est pas coché la valeur n'est pas transmise dans le $_POST et is_solde n'existe pas dans le tableau de la REQUEST, c'est pour ça que ça ne met pas à jour.

Le value sur un checkbox n' d'intérêt que dans le cas multiple avec un tableau.

 

Dans ton cas le mieux est de ne pas mettre de value dans l'input checkbox côté HTML

 

Et côté PHP tu testes simplement l'existence de la valeur dans le tableau.

$lIsSolde = isset($_POST['is_solde']) ? 1 : 0;

Ensuite tu n'as plus qu'à mettre à jour ta valeur en base avec $lIsSolde

 

Note: sans value dans l'input, si coché, la valeur par défaut du $_POST de la checkbox est "on"

Edited by franckm1000 (see edit history)

Share this post


Link to post
Share on other sites

 

Si tu mets un value à 1 dans un checkbox... ben il vaudra 1 si il est coché et n'existera pas si il n'est pas coché.

Si il n'est pas coché la valeur n'est pas transmise dans le $_POST et is_solde n'existe pas dans le tableau de la REQUEST, c'est pour ça que ça ne met pas à jour.

Le value sur un checkbox n' d'intérêt que dans le cas multiple avec un tableau.

 

Dans ton cas le mieux est de ne pas mettre de value dans l'input checkbox côté HTML

 

Et côté PHP tu testes simplement l'existence de la valeur dans le tableau.

$lIsSolde = isset($_POST['is_solde']) ? 1 : 0;

Le problème a été résolu sur un autre post, par contre il faut vivre avec son temps, on n'utilise plus $_POST[] chez prestashop mais Tools::getValue('is_solde') qui fait la même chose et renvoie si 0 si vide^^

Share this post


Link to post
Share on other sites

Ne t'inquiètes pas pour moi, je vis très bien avec mon temps.

Et puis finalement en regardant Prestashop, Tools::isSubmit('is_solde') est encore plus adapté non ?

Edited by franckm1000 (see edit history)

Share this post


Link to post
Share on other sites

Non, c'est pour vérifier qu'un des boutons de type "submit" a été validé ce qui permet de faire une pré-sélection dans le cas de formulaires multiples :)

Share this post


Link to post
Share on other sites

Oui mais la méthode isSubmit() ne fait que tester l'existence d'une variable dans le tableau de la REQUEST:

public static function isSubmit($submit)
	{
		return (
			isset($_POST[$submit]) || isset($_POST[$submit.'_x']) || isset($_POST[$submit.'_y'])
			|| isset($_GET[$submit]) || isset($_GET[$submit.'_x']) || isset($_GET[$submit.'_y'])
		);
	}

Là où getValue() commence par tester l'existence de la variable (ce que fait issubmit) puis si la variable existe alors renvoie sa valeur:

public static function getValue($key, $default_value = false)
	{
		if (!isset($key) || empty($key) || !is_string($key))
			return false;

		$ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default_value));

		if (is_string($ret))
			return stripslashes(urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret))));

		return $ret;
	}

isSubmit() est plus générique et n'est pas forcément à mon sens réservée aux input de type submit d'un formulaire.

Et dans le cas particulier énoncé ci-dessus, elle est plus adaptée vu qu'une variable issu d'un checkbox existe/ou pas.

Edited by franckm1000 (see edit history)

Share this post


Link to post
Share on other sites

On peut en débattre plusieurs heures, mais la logique syntaxique privilégie d'utiliser isSubmit pour un bouton type "Submit" et getValue pour tous les champs de données (à part les $_FILES qui ne sont pas gérés nativement par Presta)

 

Si vous voulez réinventer la roue, c'est possible aussi. Je pense juste qu'il est bon d'indiquer aux lecteurs éventuels de ce post les méthodes qui existent et quand les utiliser.

Share this post


Link to post
Share on other sites

J'ai bien compris le fait de retranscrire "isSubmit" par rapport à un bouton de type submit mais c'est là que je ne vous rejoins pas totalement dans le sens où je lis isSubmit('ma_var') comme "est-ce que j'ai soumis ma_var ?"

Donc (et pour moi le code le confirme) isSubmit() est totalement générique par rapport à l'existence d'une valeur issue du formulaire.

 

Mais bien sûr dans l'absolu on peut parfaitement utiliser les 2 vu que getValue() renvoie également false si la variable n'existe pas dans le tableau de la REQUEST;

 

Bon J'essayais d'être en adéquation avec mon temps c'est tout -_-:)

Edited by franckm1000 (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More