2013-02-22 2 views
0

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

На базе MySql, которая хранит данные, которые я сделал хранимую процедуру

DELIMITER // 
CREATE PROCEDURE find_email(emailaddr VARCHAR(60)) 
BEGIN 

DECLARE form_email VARCHAR(60); 
SET form_email=emailaddr; 

SELECT count(*) 
FROM wordpress.cf7dbplugin_submits 
WHERE form_name='Register' 
AND field_name LIKE '%email%' 
AND field_value=form_email; 
END // 

Таким образом, я мог бы получить число от того, сколько раз адрес электронной почты был в базе данных.

В моем PHP файл я сделал это

Global $res; 
$res = $mydb->query("CALL find_email"); 
if($res>0) 
{ 
echo "<script>alert('This email address is already in use!')</script>"; 
} 
else 
{ 
$tableName = $this->getSubmitsTableName(); 
      $parametrizedQuery = "INSERT INTO `$tableName` (`submit_time`, `form_name`, `field_name`, `field_value`, `field_order`) VALUES (%s, %s, %s, %s, %s)"; 
      $parametrizedFileQuery = "INSERT INTO `$tableName` (`submit_time`, `form_name`, `field_name`, `field_value`, `field_order`, `file`) VALUES (%s, %s, %s, %s, %s, %s)"; 
      $order = 0; 
      $noSaveFields = $this->getNoSaveFields(); 
      $foundUploadFiles = array(); 
      global $mydb; 
} 

Если я изменить код и установить вручную $ Рез быть 0, форма работы, как это предполагается. В противном случае ничего не происходит, когда я нажимаю кнопку «Отправить».

Надеюсь, что я разместил достаточно подробностей, заранее спасибо всем, у кого есть решение.

+0

Почему бы вам не передать какие-либо параметры в хранимую процедуру? Не должно быть («CALL find_email (some_email)»)? – ducin

+0

@tkoomzaaskz Извините, но можете ли вы уточнить? Предполагается, что «какая-то электронная почта» является конкретным электронным письмом? – collin

+0

вы создали хранимую процедуру, которая принимает один строковый аргумент. Когда вы вызываете эту хранимую процедуру, вы не передаете никаких аргументов, которые выглядят случайными. Я думал о чем-то вроде: $ res = $ mydb-> query («CALL find_email ($ some_email)»); – ducin

ответ

0

Вы слишком много усложнили все это. Во-первых, не используйте хранимые процедуры в MySQL, если вам это действительно не нужно. Вместо этого используйте чистый:

SELECT count(*) FROM table WHERE email LIKE '%value%' 

Второй. Вы должны предоставить HTML-форму формы, чтобы я знал, каковы ваши переменные $ _POST. Так, например, если ваша форма выглядит следующим образом:

<form ...> 
    <input type="text" id="mail" name="mail" /> 
</form> 

Тогда вы будете получить доступ к электронной почте внутри PHP скрипт с $_POST['mail'].

В-третьих. Это зависит от того, обрабатывает ли один PHP-скрипт/контроллер среды как отображение необработанной формы (get), так и отправку (post) или они являются отдельными PHP-скриптами/контроллерами. Если вы используете один файл, он должен выглядеть так:

if (isset($_POST['email'])) { 
    // process - check SQL and eventually display javascript alert 
} else { // get 
    // display the form 
} 

Надеюсь, что это поможет. Я предлагаю вам прочитать несколько руководств, так как задавать вопросы могут не всегда, если вы не понимаете, о чем вы спрашиваете.

+0

Имя на входе «register-email» – collin

+0

должно быть _ вместо -. В любом случае сделайте код PHP следующим: $ db-> query ("SELECT count (*) FROM table WHERE email LIKE '% $ _ POST [' register_email ']%'"); – ducin

+0

Я только что заменил эту строку кода и получил ошибку 500. – collin

Смежные вопросы