2013-10-03 2 views
0

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

Есть ли какая-то конфигурация, которую мне нужно изменить или искать на новом сервере, чтобы заставить это работать?

вот мой код:

if(isset($_POST['submit'])) { 
    $em = trim($_POST['email']); 
    $sql = mysql_query("SELECT email FROM survey_email WHERE email='".mysql_real_escape_string($_POST['email'])."'") or die(mysql_error()); 
    $check = mysql_fetch_assoc($sql); 

    if($em === '' || !preg_match('/^.{1,62}@.{1,62}\.[a-zA-Z]{2,4}$/', $em) || $check > 0){ 
     $error = "Please enter a valid email"; 
    }else{ 
     $success = true;  
     mysql_query("INSERT INTO survey_email 
      (email) VALUES('".$_POST['email']."') ") 
      or die(mysql_error()); 
     header('Location: /survey-email-confirm.php'); 
    } 
} 
+2

"теперь он перестал работать", как в ...? Компьютер поджидает себя? Нет эффекта? Пустой экран? –

+1

Имейте в виду, что ваш код * широко открыт * для SQL-инъекций. Было бы неплохо прочитать и понять это: http://php.net/manual/en/security.database.sql-injection.php – David

ответ

1

Я думаю, вы должны изменить

if($em === '' || !preg_match('/^.{1,62}@.{1,62}\.[a-zA-Z]{2,4}$/', $em) || $check > 0){ 

в

if($em === '' || !preg_match('/^.{1,62}@.{1,62}\.[a-zA-Z]{2,4}$/', $em) || $check){ 

, так как значение $ проверки не будет числовым.

+0

, который сделал трюк! Спасибо. –

0

В приведенной ниже строке возвращает массив, и вы проверяете массив> 0,

$check = mysql_fetch_assoc($sql); 

Я предполагаю, что вы хотите, чтобы получить количество строк, чтобы увидеть, если адрес электронной почты уже существует. Получить его по:

$numRows = mysql_num_rows($sql); 

Затем используйте его в IF состоянии:

$numRows > 0 
Смежные вопросы