2014-02-06 1 views
0

Paul здесь. У меня есть 2 формы:PHP Logic для флажка, где у меня есть 2 формы и 2 таблицы MySQL

  • простой ввод «Регистрация для новостей» для электронной почты и кнопка.

  • Форма «Контакт» с именем, адресом электронной почты, сообщением. У меня также есть флажок, чтобы разрешить подписку на новости из этой формы.

Вы можете увидеть их здесь на странице под названием тест: http://butterflyepidemic.com/test/

Я не уверен, как настроить логику флажка так, что обе формы ведут себя. Если абонент использует форму регистрации, а затем хочет отправить нам сообщение, контактная форма просто не позволит им прогрессировать:

«этот адрес электронной почты уже зарегистрирован»

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

«Ваше сообщение было получено»

или

«Ваше сообщение было получено. Ваш адрес электронной почты уже подписался здесь»

, если не два положительных сообщений:

„Ваше сообщение было получено, и вы подписаны на“

Я новичок реагирующие формы. Я изначально основана на мое развитие на этом уроке:

http://net.tutsplus.com/tutorials/javascript-ajax/building-a-sleek-ajax-signup-form/

, которая использует JS, JQuery, PHP, MySQL, JSON. Но теперь у меня есть вторая форма с большим количеством материала. Мне удалось получить обе формы, чтобы проверить обе таблицы для обоих полей успешно, но теперь логика обратной связи неверна.(Редактирование: Я имею в виду PHP для формы 'контакт')

HTML для 'Регистрация' формы:

<form id="newsletter-signup" action="?action=signup" method="post"> 
     <label for="signup-email">Sign up for news & events:</label> 
     <input type="email" name="signup-email" id="signup-email" placeholder="Your email here..."></input> 
     <input type="submit" name="signup-button" id="signup-button" value="Sign Me Up!"></input> 
     <p id="signup-response"></p> 
    </form> 

и HTML для формы 'контакт':

<form id="contact-form" action="?action=contact" method="post"> 
     <legend>Contact us:</legend> 

     <label for="email">Your email: *</label> 
     <input type="email" name="contact-email" id="contact-email" placeholder="Your email here..." required></input> 

     <label for="name">Your Name: *</label> 
     <input type="name" name="contact-name" id="contact-name" placeholder="Your name here..." required></input> 

     <label for="message">Your Message: *</label> 
     <textarea id="contact-textarea" name="contact-textarea" placeholder="Type your message here..." rows = "8" cols = "35" required></textarea> 

     <label for="checkbox">Subscribe to Newsletter?</label> 
     <input type="checkbox" name="contact-checkbox" id="contact-checkbox" value="1"></input> 

     <p id="contact-response"></p> 

     <input type="submit" name="contact-button" id="contact-button"></input> 

    </form> 

Вот PHP для формы регистрации:

<?php 
//form 1 - signup 
//email signup ajax call 
if(isset($_GET['action'])&& $_GET['action'] == 'signup'){ 
    mysql_connect('***','***','***'); 
    mysql_select_db('***'); 


    //sanitize data 
    $email = mysql_real_escape_string($_POST['signup-email']); 

    //validate email address - check if input was empty 
    if(empty($email)){ 
     $status = 'error'; 
     $message = 'You did not enter an email address!'; 
    } 

    else if(!preg_match('/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/', $email)){ //validate email address - check if is a valid email address 
     $status = 'error'; 
     $message = 'You have entered an invalid email address!'; 
    } 
    else { 

     $existingSignup = mysql_query("SELECT * FROM `signups`, `contact` WHERE signup_email_address='$email' OR contact_email_address='$email'"); 
     if(mysql_num_rows($existingSignup) < 1){ 
      $date = date('Y-m-d'); 
      $time = date('H:i:s'); 

      $insertSignup = mysql_query("INSERT INTO signups (signup_email_address, signup_date, signup_time) VALUES ('$email','$date','$time')"); 
      if($insertSignup){ 
       $status = 'success'; 
       $message = 'you have been signed up!'; 
      } 
      else { 
       $status = 'error'; 
       $message = "Oops, there's been a technical error! You have not been signed up.";  
      } 
     } 

     else { 
      $status = 'error'; 
      $message = 'This email address has already been registered!'; 
     } 
    } 

    //return JSON response 
    $data = array(
     'status' => $status, 
     'message' => $message 
    ); 

    echo json_encode($data); 

    exit; 
} 

и PHP для контактной формы следующим образом:

/*Contact Form*/ 
//ajax call 
if(isset($_GET['action'])&& $_GET['action'] == 'contact'){ 
    mysql_connect('***','***','***'); 
    mysql_select_db('***'); 


    //sanitize data 
    $email = mysql_real_escape_string($_POST['contact-email']); 

    //validate email address - check if input was empty 
    if(empty($email)){ 
     $status = 'error'; 
     $message = 'You did not enter an email address!'; 
    } 
    else if(!preg_match('/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/', $email)){ //validate email address - check if is a valid email address 
     $status = "error"; 
     $message = "You have entered an invalid email address!"; 
    } 
    else { 
     $existingContact = mysql_query("SELECT * FROM `signups`, `contact` WHERE signup_email_address='$email' OR contact_email_address='$email'"); 
     if(mysql_num_rows($existingContact) < 1){ 
      //mysql_free_result($existingContact); 
      //database insert code 

      if (isset($_POST['contact-checkbox'])) { 
       $checkbox = $_POST['contact-checkbox']; 
      } 
      else { 
       $checkbox = 0; 
      } 

      $message = $_POST['contact-textarea']; 
      $name = $_POST['contact-name']; 
      $date = date('Y-m-d'); 
      $time = date('H:i:s'); 

      $insertContact = mysql_query("INSERT INTO contact (contact_email_address, contact_date, contact_time, contact_name, contact_message, contact_checkbox) VALUES ('$email','$date','$time','$name','$message','$checkbox')"); 
      if($insertContact){ 
       $status = 'success'; 
       $message = 'your message has been received';  
      } 
      else if ($insertContact && $checkbox = $_POST['contact-checkbox']){ 
       $status = 'success'; 
       $message = "your message has been received and you have been signed up";   
      } 

      else { 
       $status = 'error'; 
       $message = "Oops, there's been a technical error!"; 
      } 
     } 

     else { 
      $status = 'error'; 
      $message = 'This email address has already been registered!'; 
     } 
    } 

    //return the JSON response 
    $data = array(
     'status' => $status, 
     'message' => $message 
    ); 

    echo json_encode($data); 

    exit; 
} 
?> 

JS для формы 'Регистрации':

$(document).ready(function(){ 
    $('#newsletter-signup').submit(function(){ 

    //check the form is not currently submitting 
    if($(this).data('formsstatus') !== 'submitting'){ 

     //setup variables 
     var form = $(this), 
     formData = form.serialize(), 
     formUrl = form.attr('action'), 
     formMethod = form.attr('method'), 
     responseMsg = $('#signup-response'); 

     //add status data to form 
     form.data('formsstatus','submitting'); 

     //show response message - waiting 
     responseMsg.hide() 
        .addClass('response-waiting') 
        .text('Please Wait...') 
        .fadeIn(200); 

     //send data to server to be validated 
     $.ajax({ 
      url: formUrl, 
      type: formMethod, 
      data: formData, 
      success:function(data){ 
       //setup variables 
       var responseData = jQuery.parseJSON(data), 
        klass = ''; 

       //response conditional 
       switch(responseData.status){ 
        case 'error': 
         klass = 'response-error'; 
        break; 
        case 'success': 
         klass = 'response-success'; 
        break; 
       } 

       //show reponse message 
       responseMsg.fadeOut(200,function(){ 
        $(this).removeClass('response-waiting') 
          .addClass(klass) 
          .text(responseData.message) 
          .fadeIn(200,function(){ 
           //set timeout to hide response message 
           setTimeout(function(){ 
            responseMsg.fadeOut(200,function(){ 
             $(this).removeClass(klass); 
             form.data('formsstatus','idle'); 
            }); 
           },3000) 
          }); 
       }); 
      } 
     }); 
    } 
    //prevent form from submitting 
    return false; 
    }); 
}) 

и, наконец, JS для заполнения формы 'контакта' (почти так же, как и для 'Signup'):

$(document).ready(function(){ 
    $('#contact-form').submit(function(){ 

    //check the form is not currently submitting 
    if($(this).data('formsstatus') !== 'submitting'){ 

     //setup variables 
     var form = $(this), 
      formData = form.serialize(), 
      formUrl = form.attr('action'), 
      formMethod = form.attr('method'), 
      responseMsg = $('#contact-response'); 

     //add status data to form 
     form.data('formsstatus','submitting'); 

     //show response message - waiting 
     responseMsg.hide() 
        .addClass('response-waiting') 
        .text('Please Wait...') 
        .fadeIn(200); 

     //send data to server 
     $.ajax({ 
      url: formUrl, 
      type: formMethod, 
      data: formData, 
      success:function(data){ 

       //setup variables 
       var responseData = jQuery.parseJSON(data), 
        klass = ''; 


       //response conditional 
       switch(responseData.status){ 
        case 'error': 
         klass = 'response-error'; 
        break; 
        case 'success': 
         klass = 'response-success'; 
        break; 
       } 

       //show reponse message 
       responseMsg.fadeOut(200,function(){ 
        $(this).removeClass('response-waiting') 
          .addClass(klass) 
          .text(responseData.message) 
          .fadeIn(200,function(){ 
           //set timeout to hide response message 
           setTimeout(function(){ 
            responseMsg.fadeOut(200,function(){ 
             $(this).removeClass(klass); 
             form.data('formsstatus','idle'); 
            }); 
           },3000) 
          }); 
       }); 
      } 
     }); 
    } 
    //prevent form from submitting 
    return false; 
    }); 
}) 

Это это для кода. Я хотел бы узнать, как я могу настроить логику, чтобы дать соответствующую обратную связь, как в идеальных примерах выше кода, пожалуйста. Я был бы рад любым ключевым словам/ссылкам/примерам того, что мне может понадобиться для исследования. Спасибо, Пол.

+0

Это ** стенограмма кода **. Можете ли вы сузить его до тех мест, где вы испытываете трудности? –

+0

Да, в контактной форме PHP, из строки: 'code' $ existingContact = mysql_query (" SELECT * FROM 'signups',' contact' WHERE signup_email_address = '$ email' ИЛИ ​​contact_email_address = '$ email' "); 'code' – Paul

+0

И что конкретно представляет собой ваша проблема? Что такое подходящая обратная связь? И что не так с обратной связью, которую вы получаете (если у вас есть)? – Tarsis

ответ

0

Это работает для меня:

Шаг 1: Создайте третью таблицу MySQL под названием 'contact_only' в PHPMyAdmin для людей, которые хотят, чтобы сообщение только (без знака вверх)

CREATE TABLE `contact_only` (
    `contact_only_id` int(10) NOT NULL AUTO_INCREMENT, 
    `contact_only_email_address` varchar(250) DEFAULT NULL, 
    `contact_only_name` varchar(250) DEFAULT NULL, 
    `contact_only_message` varchar(3000) DEFAULT NULL, 
    `contact_only_checkbox` tinyint(1) NOT NULL default '0', 
    `contact_only_date` date DEFAULT NULL, 
    `contact_only_time` time DEFAULT NULL, 
    PRIMARY KEY (`contact_only_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

Шаг 2: в «контакте» форма PHP, используйте «если & еще, если» дать соответствующую обратную связь на основе галочки ли пользователь флажок или нет

if (isset($_POST['contact-checkbox'])) { 

    $existingContact = mysql_query("SELECT * FROM `signups`, `contact` WHERE signup_email_address='$email' OR contact_email_address='$email'"); 
    if(mysql_num_rows($existingContact) < 1){ 

     $checkbox = $_POST['contact-checkbox']; 
     $message = $_POST['contact-textarea']; 
     $name = $_POST['contact-name']; 
     $date = date('Y-m-d'); 
     $time = date('H:i:s'); 

     $insertContact = mysql_query("INSERT INTO contact (contact_email_address, contact_date, contact_time, contact_name, contact_message, contact_checkbox) VALUES ('$email','$date','$time','$name','$message','$checkbox')"); 

     if($insertContact){ 
      $status = 'success'; 
      $message = 'your message has been received and you have been signed up';   
     } 
    } 
    else { 

     $checkbox = $_POST['contact-checkbox']; 
     $message = $_POST['contact-textarea']; 
     $name = $_POST['contact-name']; 
     $date = date('Y-m-d'); 
     $time = date('H:i:s'); 

     $insertContact = mysql_query("INSERT INTO contact (contact_email_address, contact_date, contact_time, contact_name, contact_message, contact_checkbox) VALUES ('$email','$date','$time','$name','$message','$checkbox')"); 

     $status = 'success'; 
     $message = 'Message received. Note - this email address has already been subscribed!'; 
    } 
} 
else if (isset($_POST['contact-checkbox']) == false){ 
    $checkbox = 0; 
    $message = $_POST['contact-textarea']; 
    $name = $_POST['contact-name']; 
    $date = date('Y-m-d'); 
    $time = date('H:i:s'); 

    $insertContactOnly = mysql_query("INSERT INTO contact_only (contact_only_email_address, contact_only_date, contact_only_time, contact_only_name, contact_only_message, contact_only_checkbox) VALUES ('$email','$date','$time','$name','$message','$checkbox')"); 

    if ($insertContactOnly) { 
     $status = 'success'; 
     $message = 'your message has been received'; 
    }   
} 

else { 
    $status = 'error'; 
    $message = "Oops, there's been a technical error!"; 
} 

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

http://butterflyepidemic.com/test/

Если вы знаете, как сделать это быстрее и эффективнее, пожалуйста, дайте мне знать! Спасибо, Пол