Nano Hash - криптовалюты, майнинг, программирование

Логика PHP для флажка, где у меня есть 2 формы и 2 таблицы MySQL

Пол здесь. У меня есть 2 формы:

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

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

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

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

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

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

'Ваше сообщение получено'

or

'Ваше сообщение получено. Ваша электронная почта уже зарегистрирована здесь'

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

"ваше сообщение получено и вы подписаны"

Я новичок в адаптивных формах. Первоначально я основывал свою разработку на этом руководстве:

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

который использует JS, jQuery, PHP, MySQL, JSON. Но теперь у меня есть 2-й класс с большим количеством вещей. Мне удалось заставить обе формы успешно проверять обе таблицы для обоих полей, но теперь логика обратной связи неверна. (изменить: я имею в виду 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 для формы «контакт» (почти такой же, как для «регистрации»):

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

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


  • Это стена кода. Можете ли вы сузить его до областей, с которыми у вас возникают трудности? 06.02.2014
  • Да, в контактной форме PHP, из строки: code $existingContact = mysql_query(SELECT * FROM signups, contact WHERE signup_email_address='$email' OR contact_email_address='$email'); code 06.02.2014
  • А в чем именно ваша проблема? Что такое адекватная обратная связь? И что не так с обратной связью, которую вы получаете (если она вообще есть)? 06.02.2014
  • моя проблема связана с логикой обратной связи, в частности, с нацеливанием на переменную, которая сообщает, установлен ли флажок или нет, чтобы мы могли отобразить соответствующее сообщение пользователю. Что не так, так это несколько вещей сейчас, когда я думаю об этом. На данный момент, если флажок снят, пользователь не должен быть подписан, верно? Но если они попытаются подписаться, о, они уже подписались. Кто-нибудь знает, как настроить таргетинг на переменную, когда флажок установлен или не установлен? Ваше здоровье :) 06.02.2014
  • Хорошо, просто мысли вслух: в контактной форме я мог бы создать отдельное поле таблицы для электронных писем (обязательно), которые не хотят подписываться. Таким образом, в MySQL форме регистрации можно запретить поиск в этой группе. Другая проблема заключается в том, что если пользователь подписывается, он не может отправить нам сообщение, потому что он подписан. Хорошо, я попробую создать новое поле базы данных с именем non_subscribed_emails или что-то в этом роде и посмотрю, сработает ли это. 06.02.2014

Ответы:


1

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

Шаг 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 & else if», чтобы дать соответствующую обратную связь в зависимости от того, установил ли пользователь флажок или нет.

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/

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

10.02.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..