J'ai un RSForm qui a les champs suivants:
Je veux seulement capturer de nouvelles données, comment puis-je utiliser le $_POST
script pour vérifier si l'adresse e-mail soumise est déjà dans la base de données?
Selon la documentation de RSForms, je peux le faire en utilisant
$_POST['form']['email_address']
mais je ne suis pas vraiment sûr du code à utiliser.
Vous devez entrer les éléments suivants dans la deuxième zone de texte dans l'onglet Propriétés du formulaire sous "Scripts PHP":
$formId = 0; // CHANGE THIS VALUE to your form ID
$db = JFactory::getDbo();
$query = $db->getQuery();
$query
->select("*")
->from("__rsform_submission_values")
->where("FormId = " . $db->q($formId))
->where("FieldValue = " . $db->q($_POST['form']['email_address'] ));
$db->setQuery($query);
$db->execute();
$num_rows = $db->getNumRows();
// We found this email in the submissions
if ($num_rows > 0) {
$invalid[] = RSresolveComponentName('email_address', $formId);
echo RSshowForm($formId, $_POST['form'], $invalid);
}
Vous pouvez également créer une nouvelle règle de validation en ajoutant cette fonction à ce fichier: components/com_rsform/controller/validation.php, que vous pouvez sélectionner en modifiant le champ adresse_mail et en sélectionnant "unique" comme règle de validation.
function unique($param, $extra=null)
{
$db = JFactory::getDBO();
$param = $db->getEscaped($param);
$db->setQuery("SELECT * FROM #__rsform_submission_values WHERE `FieldName`='email_address' AND `FieldValue`='".$param."'");
$db->query();
$invalid = $db->getNumRows();
if ($invalid)
return false;
return true;
}
Il y a un peu plus de documentation sur les validations personnalisées sur cette page. https://www.rsjoomla.com/support/documentation/rsform-pro/customizing-rsform-pro/custom-validation-rules.html
Ce fil pourrait également s'avérer utile: https://www.rsjoomla.com/forum/37-rsform-pro/9162-setup-form-so-each-user-can-only-submit-once-. html