web-dev-qa-db-fra.com

Comment faire pour empêcher options.php de supprimer les données existantes valides de la base de données

Je suis en train de configurer un plugin et j'ai utilisé l'API de paramétrage pour la première fois pour créer un formulaire dans les paramètres. Les données du plug-in sont initialement créées par défaut lorsque le plug-in est activé et stockées dans la base de données dans un format sérialisé.

Aujourd'hui, j'ai ajouté la fonction de rappel de validation, qui fonctionne bien pour effectuer la validation. Cependant, lorsque la validation de n'importe quel champ échoue et que la fonction renvoie false (j'ai également essayé de renvoyer NULL), les données valides existantes dans la base de données sont supprimées.

La question est de savoir comment les choses sont censées se passer ou est-ce que je fais quelque chose de stupide? J'aurais cru que, dans cette situation, les données valides existantes dans la base de données seraient restées inchangées jusqu'à ce que l'utilisateur ait présenté un ensemble de données valides pour le modifier.

Toutes les suggestions appréciées.

1
Pete Lawless

Votre fonction sanitize_callback ne doit pas renvoyer false ou null, ce qui indique que l'entrée n'est pas valide. Son objectif est de toujours renvoyer une valeur valide. La valeur renvoyée par cette fonction correspond à ce qui sera sauvegardé dans la base de données. Par conséquent, pour que tout ce qui est filtré soit purifié, il devra renvoyer quelque chose qui a du sens. Comparez-le avec intval comme dans cet exemple , ce qui forcera l'API de configuration à stocker une valeur int, quelle que soit l'entrée.

Quoi qu'il en soit, pour résoudre votre problème, vous devriez:

  • Renvoie la valeur précédemment stockée si l'entrée est invalide.
  • Renvoie une valeur par défaut si l'entrée est vide (et les valeurs vides ne sont pas autorisées)
  • Renvoie la nouvelle valeur saisie si elle est jugée valide.

De plus, en plus de la dernière instruction, votre valeur pourrait bien devenir valide pendant l'assainissement: imaginez des entrées telles que " [email protected]" ou "0123" qui pourraient être assainies en "[email protected]" et 123 en fonction de vos besoins.

1
Simon