Проверить отправку формы по данным в базе данных? - PullRequest
0 голосов
/ 11 января 2012

У нас есть система регистрации, которую мы используем, когда люди заполняют форму, и их информация помещается в нашу базу данных SQL.Однако у нас нет системы для проверки дубликатов регистраций, и я надеюсь получить некоторые рекомендации о том, как проверить, может быть, имя или адрес электронной почты и установить ошибку.

Вот наши настройки ошибоккод (один пример, у нас есть несколько проверок):

      <cfif not len(trim(form.last_name)) or form.last_name eq "Last Name">
          <cfset errors = errors & "<li>You must include your complete last name.</li>">
      </cfif>

Если ошибок не найдено, вот код запроса для вставки данных в базу данных:

    <cfquery name="InsRegistrant" datasource="#application.Datasource#" dbtype="odbc">
        INSERT INTO Schedule_Registrations(
            schedule_id,
            first_name,
            last_name,
            phone_number,
            email,
            guest,
            list_type,
            datetime_registered
        )
        VALUES(
            #url.schedule_id#,
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.first_name#">,
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.last_name#">,
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#CleanPhoneNumber#">,
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.email#">,
            #attendee.guest#,
            <!--- Values for list types 
                0 = NEVER USE Will cause many many problems
                1 = Main List
                2 = Waiting List --->                    
            #attendee.list_type#,
            #createodbcdatetime(now())#
        )                
    </cfquery>

Там нет«уникальный» идентификатор привязан к конкретному человеку, поэтому я думаю, что лучший способ - это запретить регистрацию, которая соответствует кому-либо с идентичным именем / фамилией или даже только адресом электронной почты.Любые идеи о том, как реализовать такую ​​функцию с использованием вышеуказанной системы, были бы полезны.

Ответы [ 4 ]

0 голосов
/ 16 января 2012
<cfquery name="checkdup" datasource="whatever"> 
Select 1 from Schedule_Registrations where email=#form.email#
</cfquery>
<cfif #checkdup.recordcount# is 0>
<cfquery name="doyourquery" datasource="whatever">
insert into Schedule_Registrations
(email,etc1,etc2) values ('#form.email#','#etc1#','#etc2#')
</cfquery>
Thanks for registering
<cfelse>
You have already registered an account
</cfif>

И да, все необходимое для cfqueryparam вам понадобится.Это только основы.

Удачи:)

WHeis

0 голосов
/ 11 января 2012

Вы также можете установить столбец электронной почты в базе данных в качестве первичного ключа, что определенно предотвратит повторные регистрации.Вам, конечно, придется изящно обрабатывать дубликаты первичного ключа, которые будут выброшены из БД!

0 голосов
/ 11 января 2012

Размещение уникального ключа в почтовом столбце было бы проще, чем изменение первичного ключа.Но вы также должны обработать ошибку, выданную БД

0 голосов
/ 11 января 2012

Это упрощено, но .. вы поняли.

<cfquery name="RegistrantEmailExists" datasource="#application.Datasource#" dbtype="odbc">
   SELECT COUNT(email) as EmailExists FROM Schedule_Registrations WHERE email = <cfqueryparam value="#form.email#" cfsqltype="cf_sql_varchar" >
</cfquery>

<cfif RegistrantEmailExists.EmailExists gt 0>
   <cfset errors = errors & "<li>That Email Address already exists.</li>">
</cfif>
...