PHP Classes

PHP Contact Form with Database Connection to SQLite: Process contact forms storing details using SQLite

Recommend this page to a friend!
  Info   View files Example   View files View files (2)   DownloadInstall with Composer Download .zip   Reputation   Support forum (1)   Blog (1)    
Last Updated Ratings Unique User Downloads Download Rankings
2023-04-28 (7 months ago) RSS 2.0 feedNot enough user ratingsTotal: 120 This week: 1All time: 9,455 This week: 118Up
Version License PHP version Categories
sqlite3contactform 1.0.0BSD License7Databases, User Management, Chat, AJAX, P..., A...
Description 

Author

This package can process contact forms storing details using SQLite.

It provides a class that implements functions to execute SQL queries to manage information of user contacts in an SQLite database.

Currently, it can:

- Create the database tables to store user messages and banned user IP addresses

- Add, update, and delete user messages

- Check, ban, and unban user computer IP addresses

- Search user messages by keyword

- Get submitted messages by the date

- Get the count of the total number of messages

Instructions:

class php_sqlite3_contact_form extends SQLite3
Functions:
- create_tables() // creates the tables if they don't exist
- get_sanitized_input($input) // sanitize input
- check_banned($ip) // check if an IP is banned
- ban_ip($ip) // add an IP to the banned table
- unban_ip($ip) // remove an IP from the banned table
- get_banned_ips() // get a list of banned IPs
- add_message($email, $subject, $message, $ip) // add a message
- update_message($id, $email, $subject, $message, $ip) // update a message
- delete_message($id) // delete a message
- get_messages() // get all messages
- get_message($id) // get a message by ID
- search_messages($keyword) // search messages by keyword
- get_messages_by_date_range($start_date, $end_date) // get messages in a date range
- count_messages() // count the total number of messages

Create:
//See an example for more detailed usage... but the basics are:
$cform = new php_sqlite3_contact_form('contact_form.db');
$cform->create_tables();

function show_messages_list($messages)
{
$the_str = "";
// as divs
while($row = $messages->fetchArray(SQLITE3_ASSOC))
$the_str .= show_message_row($row);
return $the_str;
} // end show_messages_list

echo show_messages_list($cform->get_messages());

Innovation Award
PHP Programming Innovation award nominee
May 2023
Number 3
Contact forms are prevalent features many sites have to let users contact the site managers to send important messages.

This package implements a contact form manager that stores messages in an SQLite database.

Since SQLite uses local files, it does not require a database server. This package does not need a database server to store contacts, making it simpler to implement in any site with PHP code.

Manuel Lemos
Picture of JImmy Bo
  Performance   Level  
Name: JImmy Bo is available for providing paid consulting. Contact JImmy Bo .
Classes: 14 packages by
Country: United States United States
Age: ???
All time rank: 1229175 in United States United States
Week rank: 14 Up3 in United States United States Up
Innovation award
Innovation award
Nominee: 8x

Winner: 1x

Example

<?php

require_once('class.php_sqlite3_contact_form.php');

/*
    Just an example of using the class.php_sqlite3_contact_form.php class. Not for production use.
   
    file: example.php_sqlite3_contact_form.php
    title: PHP SQLite3 Contact Form Manager Example
    description: An example of using the php_sqlite3_contact_form class
    license: BSD 3-Clause License <https://opensource.org/licenses/BSD-3-Clause>
    requires: PHP SQLite3
    uses: jQuery for example

*/

// create new cform object
$cform = new php_sqlite3_contact_form('contact_form.db');
// create tables if they don't exist
$cform->create_tables();

function
show_banned()
{
  global
$cform;

 
$result = $cform->get_banned_ips();
 
$the_str = "<div class='banned-header'>Banned IPs</div><div class='banned-ips'>";

  while (
$row = $result->fetchArray()) {
   
$the_str .= show_banned_row($row);
  }
 
$the_str .= "</div>";
  return
$the_str;
}

function
show_banned_row($row)
{
 
$the_str = "<div class='ip-row'>";
 
$the_str .= "<div class='fld'><div class='ip'>".$row['ip']."</div></div>";
 
$the_str .= "<div class='fld'><div class='btn btn-unban-ip' data-ip='".$row['ip']."'>Unban IP</div></div>";
 
$the_str .= "</div>";
  return
$the_str;
}

function
show_message_row_inner($row)
{
 
$the_str = "";
 
$the_str .= "<div class='fld '><input class='def-hide' type=text name='id' value='".$row['id']."' readonly></div>";
 
$the_str .= "<div class='fld'><input type=text name='email' value='".$row['email']."'></div>";
 
$the_str .= "<div class='fld'><input type=text name='subject' value='".$row['subject']."'></div>";
 
$the_str .= "<div class='fld'><textarea name='message'>".$row['message']."</textarea></div>";
 
$the_str .= "<div class='fld'><input class='def-hide' type=text name='ip' value='".$row['ip']."' readonly></div>";
 
$the_str .= "<div class='fld'><input class='def-hide' type=text name='tstamp' value='".$row['tstamp']."' readonly></div>";
 
$the_str .= "<div class='fld fldbtn'><div class='def-hide btn btn-update-message' data-id='".$row['id']."'>Update</div></div>";
 
$the_str .= "<div class='fld fldbtn '><div class='def-hide btn btn-reset-message' data-id='".$row['id']."'>Reset</div></div>";
 
$the_str .= "<div class='fld fldbtn '><div class='def-hide btn btn-delete-message' data-id='".$row['id']."'>Delete</div></div>";
 
$the_str .= "<div class='fld fldbtn '><div class='def-hide btn btn-ban-ip' data-ip='".$row['ip']."'>Ban IP</div></div>";
 
  return
$the_str;
}
// end show_message_row_inner

function show_message_row($row)
{
 
$the_str = "";
 
$the_str .= "<div class='message' msg-id='".$row['id']."'>";
 
$the_str .= show_message_row_inner($row);
 
$the_str .= "</div>";

  return
$the_str;
}
// end show_message_row

function show_messages_list($messages)
{
 
$the_str = "";
 
// as divs
 
while($row = $messages->fetchArray(SQLITE3_ASSOC))
   
$the_str .= show_message_row($row);
  return
$the_str;
}
// end show_messages_list

# gets ajax request and then returns json data and quits.
if(!empty($_GET['ajax']))
{
  switch(
$_GET['ajax'])
  {

   
      case
'load_banned':
       
$return_arr[] = array(
         
"command" => 'html',
         
"selector" => ".banned-list",
         
"msg" => show_banned()
        );
        break;
// load_banned
     
     
case 'ip_unban':
     
$ip = $_POST['flds']['ip'];
     
$cform->unban_ip($ip);

     
$return_arr[] = array(
       
"command" => 'alert',
       
"msg" => "IP $ip has been unbanned."
     
);

     
$return_arr[] = array(
       
"command" => 'html',
       
"selector" => ".banned-list",
       
"msg" => show_banned()
      );

      break;
// ip_unban

   
case 'ip_ban':
     
$ip = $_POST['flds']['ip'];

     
// if ip alreadu banned, alert already banned.
     
if($cform->check_banned($ip))
      {
       
$return_arr[] = array(
         
"command" => 'alert',
         
"msg" => "IP $ip is already banned."
       
);
        break;
      }

     
$cform->ban_ip($ip);

     
$return_arr[] = array(
       
"command" => 'alert',
       
"msg" => "IP $ip has been banned."
       
#"data" => show_banned_list($cform->get_banned_ips())
     
);

     
$return_arr[] = array(
       
"command" => 'html',
       
"selector" => ".banned-list",
       
"msg" => show_banned()
      );

      break;
// ban_ip

   
case 'messages_get':
     
// $messages = $cform->get_messages();
      // $ret = array();
      // while($row = $messages->fetchArray(SQLITE3_ASSOC))
      // {
      // $ret[] = array(
      // "id" => $row['id'],
      // "email" => $row['email'],
      // "subject" => $row['subject'],
      // "message" => $row['message'],
      // "ip" => $row['ip'],
      // "tstamp" => $row['tstamp']
      // );
      // }

     
$messages_html = show_messages_list($cform->get_messages());

     
$return_arr[] = array(
       
"command" => 'update_messages_list',
       
"data" => $messages_html
     
);

    break;
// messages_get

   
case 'message_get':
     
// just handle a row fetch for a single message
      // show_message_row($row)
     
$id = $_POST['flds']['id'];
     
$message = $cform->get_message($id);
     
$row = $message->fetchArray(SQLITE3_ASSOC);

     
$the_str = show_message_row_inner($row);

     
$return_arr[] = array(
       
"command" => 'update_message_row',
       
"id" => $id,
       
"data" => $the_str
     
);

      break;
// message_get

   
case 'message_add':
     
// print array $_POST
      // print_r($_POST);
     
$email = $_POST['flds']['email'];
     
$subject = $_POST['flds']['subject'];
     
$message = $_POST['flds']['message'];
     
$ip = $_POST['flds']['ip'];

     
$cform->add_message($email, $subject, $message, $ip);

     
$return_arr[] = array(
       
"command" => 'reset_message_add_form'
     
);

     
$return_arr[] = array(
       
"command" => 'refresh_messages_list'
     
);

     
$return_arr[] = array(
       
"command" => 'enable_input',
       
'selector' => '.message-add-form .btn-submit'
     
);

      break;
// message_add

   
case 'message_delete':
     
$id = $_POST['flds']['id'];
     
$cform->delete_message($id);

     
$return_arr[] = array(
       
"command" => 'remove_message_row',
       
"id" => $id
     
);

      break;
// message_delete

   
case 'message_update':
       
// print_r($_POST);
        // print_r($_POST['flds']);

       
$id = $_POST['flds']['id'];
       
$email = $_POST['flds']['email'];
       
$subject = $_POST['flds']['subject'];
       
$message = $_POST['flds']['message'];
       
$ip = $_POST['flds']['ip'];

       
$cform->update_message($id, $email, $subject, $message, $ip);

       
$return_arr[] = array(
         
"command" => 'success',
         
"id" => $id
       
);

       
$return_arr[] = array(
         
"command" => 'update_message_row',
         
"id" => $id
       
);

        break;
// message_update
 
} // end switch
 
  // if we have a return array, send it back as json for javascript processing
 
if(!empty($return_arr) && is_array($return_arr))
    die(
json_encode($return_arr));
 
  die();
// end ajax, end program.
} // end ajax

?>
<!-- jQuery example manager -->
<html>
<head>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

  <script>
    /*
    // send_data structure
    new_arr[key] = {};
    new_arr[key].col = the_col;
    new_arr[key].val = the_val;

    var url = "ajax.command_process.php?&ajax=customer_save&id="+db_id;
    do_cmd_post(url, new_arr);
    */

    function do_cmd_post(url, send_data)
    {

      $.post( url, { flds: send_data /* in php will appear as $_POST['flds'] */ },
        function( return_data ) {
          do_cmd_process(return_data);
        }, "json" ); // punt any returned data to processor

    }
  </script>

  <style>
    html, body {
    font-family: Arial, Helvetica, sans-serif;
    padding:0;margin:0;
    }

  </style>

<script>

  function do_cmd_process(data) // handle data coming back from ajax
  {

    if (data instanceof Array) {
      data.forEach(function(entry) {
        console.log(entry.command);
       
        //console.log(entry.message);
        // handle returned commands //
        switch(entry.command)
        {
          case 'alert':
              alert(entry.msg);
            break;
       
          case 'reload':
              window.location.replace('./');
            break;

         
          case 'update_messages_list':
              $('#messages-list').html(entry.data);
            break;

          case 'update_message_row':
            // $the_str .= "<div class='message' msg-id='".$row['id']."'>";
            // the target div is a div with class: .message
            // update html
            $('.message[msg-id="'+entry.id+'"]').html(entry.data);
            // remove any editing class
            $('.message[msg-id="'+entry.id+'"]').removeClass('editing');
            break;
         
          case 'remove_message_row':
            // $the_str .= "<div class='message' msg-id='".$row['id']."'>";
            // the target div is a div with class: .message
            // update html
            $('.message[msg-id="'+entry.id+'"]').remove();
            break;



          case 'refresh_messages_list':
              var id = entry.id;
              var url = "example.php_sqlite3_contact_form.php?&ajax=messages_get";
              do_cmd_post(url, {});
            break;
         
          case 'refresh_message_row':
              var id = entry.id;
              var url = "example.php_sqlite3_contact_form.php?&ajax=message_get";
              do_cmd_post(url, {id: id});
            break;

          case 'scrolltop':
              $('html, body').animate({ scrollTop: $('body').offset().top - 190 }, 200);
            break;

          case 'reload_messages_list':
              $('#messages-list').load('example.php_sqlite3_contact_form.php #messages-list');
            break;

          case 'reset_message_add_form':
              $('#message-add-form').each(function(){
                this.reset();
              });
            break;
         
          case 'reset_message_add_form':
              $('#message-add-form').each(function(){
                this.reset();
              });
            break;
           
                            // generic commands //
                            case 'alert':
                                alert(entry.msg);
                                break;
                            case 'log':
                                console.log(entry.msg);
                                break;
                            case 'append':
                                $(entry.selector).append(entry.msg);
                                break;
                            case 'prepend':
                                $(entry.selector).prepend(entry.msg);
                                break;
                            case 'html':
                                $(entry.selector).html(entry.msg);
                                break;
                            case 'val':
                                $(entry.selector).val(entry.msg);
                                break;
                            case 'focus':
                                $(entry.selector).focus();
                                break;
                            case 'blur':
                                $(entry.selector).blur();
                                break;
                            case 'clear':
                                $(entry.selector).val('');
                                break;
                            case 'js':
                                eval(entry.msg);
                                break;
                            case 'disable_input':
                                $(entry.selector).prop('disabled', true);
                                break;
                            case 'enable_input':
                                $(entry.selector).prop('disabled', false);
                                break;

        }
      });
    }
  }

</script>



</head>
<body>



<script>

    $(document).on('click', '.message', function() {
      // switch all .def-hide on the message to .def-hide-show
      var $this = $(this);
      var $message = $this.closest('.message');
      $message.find('.def-hide').removeClass('def-hide').addClass('def-hide-show');
    });

    // on double click, hide if .def-hide-show is showing
    $(document).on('dblclick', '.message', function() {
      // switch all .def-hide-show on the message to .def-hide
      var $this = $(this);
      var $message = $this.closest('.message');
      $message.find('.def-hide-show').removeClass('def-hide-show').addClass('def-hide');
    });

    // on editing an input or textarea in .message, apply an editing class to the .message div
    $(document).on('change', '.message input, .message textarea', function() {
      var $this = $(this);
      var $message = $this.closest('.message');
      $message.addClass('editing');
    });


   

  </script>

<style>


.section-button-wrapper {
    width:100%;
    margin:0px; padding:0px;
    display: block;
    background-color: #38c172;
    border-bottom: 1px solid #28a162;
  }



  .section-button {
    margin:0px; padding:0px;
  display: inline-block;
 
  padding: 10px 20px;
  background-color: #38c172;
  color: #fff;
  border-radius: 5px;

  text-align: center;
  text-decoration: none;
  font-size: 2vmax;

  cursor: pointer;
  transition: all 0.3s ease;
  /* center */
  position: relative;
  left: 10vw;
  margin:2vw;
 
 


  }

  .section-button:hover {
    background: #555;
  }
 

  </style>

  <script>


    $(document).ready(function(){
      $('#message-add').hide();

      $('.message-add-showhide').click(function(){
        /* if it has class 'showing' then remove class 'showing' */
        /* slide down if not showing */
        if($('#message-add').hasClass('showing'))
        {
          $('#message-add').removeClass('showing');
          $('#message-add').slideUp();
        }
        else
        {
          $('#message-add').addClass('showing');
          $('#message-add').slideDown();
        }


      });
    });
  </script>
<div class='section-button-wrapper showhide-wrapper'>
  <div class='section-button message-add-showhide'>show/hide add message</div>
</div>

<div id="message-add">
  <form id="message-add-form" action="javascript:void(0);" method="post">
  <div class='message-add-form'>

              <div class='message-add-form-row'>
                <div class='message-add-form-label'>Email</div>
                <div class='message-add-form-input'><input type="text" name="email" placeholder="email" /></div>
              </div>

              <div class='message-add-form-row'>
                <div class='message-add-form-label'>IP</div>
                <div class='message-add-form-input'><input type="text" name="ip" placeholder="ip" /></div>
              </div>

              <div class='message-add-form-row'>
                <div class='message-add-form-label'>Subject</div>
                <div class='message-add-form-input'><input type="text" name="subject" placeholder="subject" /></div>
              </div>

              <div class='message-add-form-row'>
                <div class='message-add-form-label'>Message</div>
                <div class='message-add-form-input'><textarea name="message" placeholder="message"></textarea></div>
              </div>

              <div class='message-add-form-row'>
                <div class='message-add-form-label'></div>
                <div class='message-add-form-input'><input class='btn btn-submit' type="submit" value="Add Message" /></div>
              </div>

  </div>

  </form>
</div>


<style>

 
/* CSS for the message-add form */

#message-add {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 70vh;
  background-color: #d8f3dc;
 
}

.message-add-form {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 2rem;
  border-radius: 1rem;
  background-color: #fff;
  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2);
  max-width: 90%;
  width: 30rem;
}

.message-add-form-row {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  margin: 0.5rem 0;
  width: 100%;
}

.message-add-form-label {
  font-size: 1.2rem;
  font-weight: bold;
  color: #226a51;
  flex: 0.3;
}

.message-add-form-input {
  flex: 0.7;
}

.message-add-form input[type="text"],
.message-add-form textarea {
  font-size: 1.2rem;
  padding: 0.5rem;
  border: none;
  border-radius: 0.5rem;
  background-color: #e2f0d9;
  width: 100%;
  transition: background-color 0.2s ease-in-out;
  color: #226a51;
}

.message-add-form input[type="text"]:focus,
.message-add-form textarea:focus {
  outline: none;
  background-color: #cfe5ce;
}

.message-add-form input[type="submit"] {
  font-size: 1.2rem;
  font-weight: bold;
  color: #fff;
  background-color: #4b8e74;
  border: none;
  border-radius: 0.5rem;
  padding: 0.5rem 1rem;
  margin-top: 1rem;
  cursor: pointer;
  transition: background-color 0.2s ease-in-out;
}

.message-add-form input[type="submit"]:hover {
  background-color: #3a6e5a;
}

/* Responsive CSS for the message-add form */

@media screen and (max-width: 1024px) {
  .message-add-form {
    max-width: 100%;
    width: 90%;
  }
 
  .message-add-form-label {
    font-size: 1rem;
    flex: 0.4;
  }
 
  .message-add-form-input {
    flex: 0.6;
  }
}

</style>

<div class='section-button-wrapper btn-update-list-wrapper'>
  <div class='section-button btn-update-list'>Refresh List</div>
</div>




<div id="messages-list" class='messages-list'>
  <?php

   
// echo show_messages_list($cform->get_messages());
 
?>

</div>
<script>
  $(function() {
    var send_data = {};
    var url = "example.php_sqlite3_contact_form.php?&ajax=messages_get";
    do_cmd_post(url, send_data);
  }); // end document ready
  </script>

<script>

        $(document).ready(function() {

          // hide update section

          // add message
          $('#message-add-form').submit(function() {
            // disable .message-add-form .btn-submit
            $('.message-add-form .btn-submit').attr('disabled', 'disabled');

            var email = $('input[name=email]').val();
            var subject = $('input[name=subject]').val();
            var message = $('textarea[name=message]').val();
            var ip = $('input[name=ip]').val();

            var send_data = {};
            send_data['email'] = email;
            send_data['subject'] = subject;
            send_data['message'] = message;
            send_data['ip'] = ip;

            var url = "example.php_sqlite3_contact_form.php?&ajax=message_add";
            do_cmd_post(url, send_data);

          });

          $(document).on('click', '.btn-update-message', function() {

            // get the data
            var id = $(this).parent().parent().find('input[name=id]').val();
            var email = $(this).parent().parent().find('input[name=email]').val();
            var subject = $(this).parent().parent().find('input[name=subject]').val();
            var message = $(this).parent().parent().find('textarea[name=message]').val();
            var ip = $(this).parent().parent().find('input[name=ip]').val();
           

            var send_data = {};
            send_data['id'] = id;
            send_data['email'] = email;
            send_data['subject'] = subject;
            send_data['message'] = message;
            send_data['ip'] = ip;

            var url = "example.php_sqlite3_contact_form.php?&ajax=message_update";
            do_cmd_post(url, send_data);
          });


          // update list
          $('.btn-update-list').click(function() {

            var url = "example.php_sqlite3_contact_form.php?&ajax=messages_get";
            do_cmd_post(url, {});

          });

          // reset message (reload)
          $(document).on('click', '.btn-reset-message', function() {
            id = $(this).parent().parent().find('input[name=id]').val();
            var url = "example.php_sqlite3_contact_form.php?&ajax=message_get";
            do_cmd_post(url, {id: id});
           

          });

          // delete message
          // handle even on dynamic loaded elements
          $(document).on('click', '.btn-delete-message', function() {

            var id = $(this).parent().parent().find('input[name=id]').val();

            var send_data = {};
            send_data['id'] = id;

            var url = "example.php_sqlite3_contact_form.php?&ajax=message_delete";
            do_cmd_post(url, send_data);

          }); // end btn-delete-message click

          // ban ip
          $(document).on('click', '.btn-ban-ip', function() {
            // button has a data-ip= attribute
            var ip = $(this).attr('data-ip');

            var send_data = {};
            send_data['ip'] = ip;

            var url = "example.php_sqlite3_contact_form.php?&ajax=ip_ban";
            do_cmd_post(url, send_data);
          }); // end btn-ban-ip click
         
          // unban ip
          $(document).on('click', '.btn-unban-ip', function() {
            // button has a data-ip= attribute
            var ip = $(this).attr('data-ip');

            var send_data = {};
            send_data['ip'] = ip;

            var url = "example.php_sqlite3_contact_form.php?&ajax=ip_unban";
            do_cmd_post(url, send_data);
          }); // end btn-unban-ip click
         
        }); // end document ready

</script>



<style>
  .btn {
    display: inline-block;
    padding: 10px;
    background: #ccc;
    cursor: pointer;

  }

  .btn:hover {
    background: #ddd;
  }


  #messages-list {
    margin-bottom: 20px;

  }
 


  </style>




<style>
/* Messages List */
#messages-list {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;

}

.message {
  position:relative;
  background-color: #fff;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
  border-radius: 5px;
  padding: 20px;
  margin: 20px;
  width:30vw;
  min-width:400px;
  box-sizing: border-box;
  color: #333;
  font-size: 16px;
}

.message.editing {
  background-color: red;
}


/* if the screen is smaller than 768px, make the message 100% width */
@media screen and (max-width: 1400px) {
  .message {
    width: 100%;
  }
}



.message:hover {
  transform: translateY(-5px);
  transition: all 0.3s ease;
  cursor: pointer;
}

.message .fld {
  margin-bottom: 10px;
}

.message input[type="text"],
.message textarea {
  padding: 10px;
  border: none;
  border-radius: 5px;
  background-color: #f5f5f5;
  width: 100%;
  font-size: 16px;
  color: #333;
}

.message input[type="text"]:focus,
.message textarea:focus {
  outline: none;
  background-color: #fff;
}

.message input[type="text"][readonly] {
  background-color: #d9d9d9;
}

.message div.fldbtn {
  position:relative;
  padding:0px;margin:0px;

  display:inline-block;

  color: #fff;
  text-align: center;
  text-decoration: none;
  font-size: 16px;
  cursor: pointer;
  transition: all 0.3s ease;





}
.message .btn {
  display:block;
  margin:0px;
  position:relative;

  background-color: #38c172;
  color: #fff;

 
  border-radius: 5px;
 
  text-align: center;
  text-decoration: none;
  font-size: 16px;

  cursor: pointer;
  transition: all 0.3s ease;
  /* set flex size to about 30% */
 
  font-size:2vmax;
  width:7.4vw;
  min-width:100px;

  margin:0.2vw;
  padding:0.3vw;
 
}

.message .btn:hover {
  background-color: #2f855a;
}

.message .btn-delete-message {
  background-color: #e53e3e;
}

.message .btn-delete-message:hover {
  background-color: #c53030;
}

.message .btn-update-message {
  background-color: #4299e1;
}

.message .btn-update-message:hover {
  background-color: #3182ce;
}


.message .btn-reset-message {
  background-color: #ed8936;
}

.message .btn-reset-message:hover {
  background-color: #dd6b20;
}


  </style>

   
<style>
  /* hide .def-hide by default for jQuery to show with a show() function */
  .message .def-hide {
    display:none;
  }


 
</style>



<!-- show and handle banned list -->
<div class='banned-list'>banned list</div>
<script>
  // document ready
  $(function() {

    var send_data = {};

    var url = "example.php_sqlite3_contact_form.php?&ajax=load_banned";
    do_cmd_post(url, send_data);

  }); // end document ready
  </script>

<style>
  .banned-list {
    /* flex */
    display:flex;
    flex-direction:column;
    justify-content:flex-start;
    align-items:flex-start;
    padding:2vw;

  }
  .banned-list .banned-header {
    font-size:2vmax;
    font-weight:bold;
    margin-bottom:10px;
  }

  .banned-list .ip-row {
    display:block;
    padding:2vw;
  }

  .banned-list .ip-row .fld {
    display:inline-block;
    width:25vw;
  }

  </style>
</body>
</html>


  Files folder image Files  
File Role Description
Plain text file class.php_sqlite3_contact_form.php Class PHP SQLite3 Contact Form Manager
Accessible without login Plain text file example.php_sqlite3_contact_form.php Example PHP SQLite3 Contact Form Manager Example

 Version Control Unique User Downloads Download Rankings  
 0%
Total:120
This week:1
All time:9,455
This week:118Up
User Comments (1)