PHP Classes

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

Recommend this page to a friend!
     
  Info   Example   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not enough user ratingsTotal: 131 This week: 1All time: 9,344 This week: 35Up
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: 1198173 in United States United States
Week rank: 41 Up6 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 (2)  
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

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads Download Rankings  
 0%
Total:131
This week:1
All time:9,344
This week:35Up
User Comments (1)