web-dev-qa-db-ja.com

RSFormは、フォームを送信する前にメールがデータベースにあるかどうかを確認します

次のフィールドを持つRSFormがあります。

  • フルネーム
  • 電子メールアドレス

新しいデータのみを取得したいのですが、$_POST送信されたメールアドレスがすでにデータベースにあるかどうかを確認するスクリプト?

RSFormsのドキュメントによると、私はこれを使用してこれを行うことができます

$_POST['form']['email_address']

しかし、どのコードを使用するのか本当にわかりません。

1
RustyJoomla

「PHP Scripts」の下のフォームのプロパティタブにある2番目のテキストエリアに以下を入力する必要があります。

$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);
}

このファイルにこの関数を追加して、新しい検証ルールを作成することもできます。components/ com_rsform/controller /validation.php。email_addressフィールドを編集し、検証ルールとして「一意」を選択することで選択できます。

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;
}

このページには、カスタム検証に関するもう少しドキュメントがあります。 https://www.rsjoomla.com/support/documentation/rsform-pro/customizing-rsform-pro/custom-validation-rules.html

このスレッドも役立つかもしれません: https://www.rsjoomla.com/forum/37-rsform-pro/9162-setup-form-so-each-user-can-only-submit-once-。 html

3
Helge Sverre