Monday, December 28, 2015

Function to generate clean url slugs from string with duplication check

Function to generate clean url slugs from string with duplication check

function generateClassifiedSlug($string, $id=0){
    //Set char set to UTF-8 - to manage accented characters
    setlocale(LC_ALL, "en_US.UTF8");
    //Remove everything except alphabets and digits
    $url_string=preg_replace("/[^a-z0-9]/i"," ", ltrim(rtrim(strtolower($string))));
    //Remove multiple spaces
    $url_string = preg_replace("/\s+/", " ", $url_string);
    //Replace space with dashes
    $newurl_string=str_replace(" ","-",$url_string);
    //Condition for add / update
    if(!empty($id) && $id!=0){
        $condition = "BlogId!='".$id."' AND ";
        $condition ="";
    $queryCount = 'SELECT blog_url from tblblogs WHERE '.$condition.'
                    blog_url LIKE "'.$newurl_string.'"';

    //Check duplicate
    $rqC = mysql_num_rows(mysql_query($queryCount));
    while($rqC != 0) {
        //Add number to avoid duplicate
        $newurl_string = $newurl_string."-".$i;
        $queryCount = 'SELECT blog_url from tblblogs WHERE '.$condition.'
                    blog_url LIKE "'.$newurl_string.'-'.$i.'"';
        $rqC = mysql_num_rows(mysql_query($queryCount));

    $newurl_string = $newurl_string.(!empty($i) ? "-".$i : "");

    return $newurl_string;

Sunday, December 6, 2015

php file upload: clean name of uploaded file, check for duplicate

File upload: clean name of uploaded file, check for duplicate
$config['upload_path'] = DIR_UPLOAD_BANNER;

$file_parts = pathinfo($_FILES['cms_banner_image']['name']);

//Clean file name, replace all specialcharacters with dahs "-" $file_name = preg_replace('/[^A-Za-z0-9\-]/', '', $file_parts['filename']);

//Replace multiple dash with single $file_name = preg_replace('/-+/', '-', $file_name); $config['file_name'] = $file_name.'.'.$file_parts['extension'];

//Check for duplicate file names $counter = 0;
while (file_exists($config['upload_path'].$config['file_name'])) {
    $config['file_name'] = $file_name.'_'.

Wednesday, November 18, 2015

Maps - enable scroll after first click on map only

Complete script for google map that will enable zoom on clicking in the map area only

<script type='text javascript' src="https://maps.googleapis.com/maps/api/js?key=&sensor=false&extension=.js">
<script type='text javascript'="">
        var latitude = $('#map_latitude').val();
        var longitude = $('#map_longitude').val();
        // When the window has finished loading create our google map below
        google.maps.event.addDomListener(window, 'load', init);
        function init() {
            // Basic options for a simple Google Map
            // For more options see: https://developers.google.com/maps/documentation/javascript/reference#MapOptions
            var mapOptions = {
                // How zoomed in you want the map to start at (always required)
                zoom: 14,
                // The latitude and longitude to center the map (always required)
                center: new google.maps.LatLng(latitude,longitude),
                //Disable scroll wheel by default,
                scrollwheel: false,
                // How you would like to style the map.
                // This is where you would paste any style found on Snazzy Maps.
            // Get the HTML DOM element that will contain your map
            // We are using a div with id='map' seen below in the 
            var mapElement = document.getElementById('map');
            // Create the Google Map using out element and options defined above
            var map = new google.maps.Map(mapElement, mapOptions);
            var marker = new google.maps.Marker({

                map: map,

                position: map.getCenter(),

                icon: 'images/google-map-cion.png'

            // Listen to click event on map and enable zoom
            map.addListener('click', function() {
                map.set('scrollwheel', true);




Wednesday, November 11, 2015

Simple Ajax Pagination Script on Scroll Down

Credit: Jaspreet Singh

<script type="text/javascript">
    jQuery(document).ready(function($) {
    //Set current page to 1     var count = 1;
          if  ($(window).scrollTop() == $(document).height() - $(window).height()){
             //Load artices of current page              loadArticle(count);
             //Increment current page after loading              count++;

    function loadArticle(pageNumber){
          //Show loader           $(".sk-circle").removeClass("hideme");
          //Get search string           var search_string = $("#search_name").val();
              url: "ajaxsearch.php",
              data: "search_string="+search_string+"&page_no="+ pageNumber,
              success: function(html){
                  //Hide loader                   $(".sk-circle").addClass("hideme");
                   if(html == "error"){

                    } else {
                      // This will be the div where our content will be loaded
      return false;



Server side code
$search_string = $_POST['search_string'];
$perpage = 10;
$limit = $pages*$perpage;
$search = 'SELECT * FROM `table_name` WHERE `description` like '%$search_string%' or `PartNo` like '%$search_string%' and status='1' order by id ASC limit $limit, $perpage';

Thursday, November 5, 2015

PHP Tips and Tricks - Handy

1. ini_set('memory_limit', '-1');
Usage: To temporarily set memory limit to unlimited

2. ini_set('memory_limit', '512M');
Usage: How to temporarily set memory limit to 512MB

3. set_time_limit(0);

4. ini_set('max_execution_time', 0);
Usage: How to temporarily set max execution time to infinite

5. error_reporting(E_ALL);
Usage: Report all PHP errors

6. error_reporting(0);
Usage: Turn off all error reporting

7. ini_set("display_errors", 1);
Usage: Run-time configuration

function getClientIp()
    $ip = '';
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];

    return $ip;
Usage: Get user ip

 *9.Generate accented seo friendly url

function accented_seo_url($str) {
    $str = utf8_encode($str);

    $new_string = preg_replace('~[^\\pL\d]+~u', "-", ltrim(rtrim(($str))));

    return mb_strtolower($new_string);
Usage: Generate accented seo friendly url

10. header('Content-Type: text/html; charset=utf-8');
Usage: Set utf8 in header

* Get 2nd monday of the month

//First monday of the month
$dt = new DateTime('first Monday of jan 2017');

//Second monday of the month
$interval = new DateInterval('P1W');
$next_week = $dt->add($interval);
echo $next_week->format('Y-m-d');
Usage: Get 2nd monday of the month. Example https://eval.in/716901
* Get 3rd tuesday of the month

//First tuesday of the month
$dt = new DateTime('first Tuesday of jan 2017');

//Third Tuesday of the month
$interval = new DateInterval('P2W');
$next_week = $dt->add($interval);
echo $next_week->format('Y-m-d');
Usage: Get 3rd Tuesday of the month. Example https://eval.in/716901

Monday, October 26, 2015


Credits: David Walsh for his db backup script. http://davidwalsh.name/backup-mysql-database-php

I implemented a script that can be run via cron, and can schedule different time for backing up diffrent databases.
It reads details of databases scheduled to back up at the toime of execution and create backup
You can schedule the backup of different databases at different time.
The time precision check for minutes only

How to setu-up

Move the code to your server under a directory say "DB_Backup"
Create a database, and a table with this structure

CREATE TABLE IF NOT EXISTS `table_credentials` (
  `title` varchar(255) NOT NULL,
  `host` varchar(255) NOT NULL DEFAULT 'localhost',
  `db_name` varchar(255) NOT NULL,
  `user_name` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `scheduled_execution_time` time NOT NULL,
  `created_date_time` datetime NOT NULL,
  `execution_status` enum('0','1','2','3') NOT NULL DEFAULT '0',
  `last_execution_date` datetime NOT NULL,
  `created_ip` varchar(50) NOT NULL,
  `updated_ip` varchar(50) NOT NULL,
  `is_active` enum('0','1') NOT NULL DEFAULT '1',
  `is_mannual` enum('0','1') NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)

Now update config.php with your db username, password etc.

Add the credentials of databases you want to backup
If you want to backup 5 databases at 12:00 am and 5 other at 1:00 am the make the value of scheduled_execution_time '12:00:00' for the first 5 databases and '1:00:00' for the next 5 databases.

Now schedule the cron to to execute

ROOT_DIRECTORY/DB_Backup/backup_db.php at 12:00 and 1:00

Thats it.

Any suggestion, updates and modification is welcome

Wednesday, September 9, 2015

Complete script for login with google and fetch details of users

Complete script for login with google and fetch details of users

<a id="customBtn" class="gmail_a"> 
    <img src="<?php echo ROOT_URL_BASE;?>image/google.png" /></a>


var googleUser = {};
//Replace with your google client id
var clientId = 'xx-xx.apps.googleusercontent.com';
var startApp = function() {
    gapi.load('auth2', function(){
        //Retrieve the singleton for the GoogleAuth library
        // and set up the client.
        auth2 = gapi.auth2.init({
            client_id: clientId,
            cookiepolicy: 'single_host_origin',
            // Request scopes
            scope: 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email'

function attachSignin(element) {
    auth2.attachClickHandler(element, {}, function(googleUser) {
        gapi.client.load('plus', 'v1', signedIn);
    }, function(error) {
        alert(JSON.stringify(error, undefined, 2));

function signedIn(){
    gapi.client.plus.people.get({userId: 'me'}).execute(function(resp){

function handleEmailResponse(resp) {
    var primaryEmail;
    for (var i=0; i < resp.emails.length; i++) {
        if (resp.emails[i].type === 'account') 
            primaryEmail = resp.emails[i].value;

function parseGoogleUserDetails(GoogleResponse) {
    //The response contains many information of users
    var primaryEmail;
    for (var i=0; i < GoogleResponse.emails.length; i++) {
        if (GoogleResponse.emails[i].type === 'account') 
        primaryEmail = GoogleResponse.emails[i].value;
    var first_name = GoogleResponse.name.givenName;
    var last_name = GoogleResponse.name.familyName;
    var gender;
    if (typeof GoogleResponse.gender != 'undefined') {
        gender = capitalizeFirstLetter(GoogleResponse.gender)
    var city;
    if (GoogleResponse.placesLived.length > 0 )
    for (var i=0; i < GoogleResponse.placesLived.length; i++) {
        if (typeof GoogleResponse.placesLived[i].primary){
            if (GoogleResponse.placesLived[i].primary === true) 
                city = GoogleResponse.placesLived[i].value;
    var formData = {
        'socialMedia': 'google',
        'socialMediaId' : GoogleResponse.id,
        'email' : primaryEmail,
        'first_name' : first_name,
        'last_name' : last_name,
        'gender' : gender,
        'city' : city

Tuesday, September 8, 2015

Facebook API

How to get user email and birthday from Facebook API Version v2.4
I found answer in this thread of stack overflow: http://stackoverflow.com/questions/31554854/how-to-get-user-email-and-birthday-from-facebook-api-version-v2-4
This was the answer I get the solution from: http://stackoverflow.com/a/31556390/345721

Monday, September 7, 2015

Mysql tips and tricks

User records table: How to get all ids of peoples who have matching year and month only

First thing you have to achieve is to
"get all date and month of 'dob' column"
This can be achieved by grouping rows based on date_month extracted using the format construct.
DATE_FORMAT(dob, '%m-%d') AS date_month 
FROM bday 
GROUP BY DATE_FORMAT(dob, '%m-%d');
As per your question, Next is
"peoples who have matching year and month only"
ie, group the above results with condition having more than one row. This can be achieved by adding the condition "HAVING count(id) > 1"
Now the query becomes
DATE_FORMAT(dob, '%m-%d') AS date_month 
FROM bday 
GROUP BY DATE_FORMAT(dob, '%m-%d') 
HAVING count(id) >1);
This query returns all date_month where more than one person's dob falls.
Now your ultimate aim is to get
" id of those peoples who have matching year and month only "
This can be achieved by wrapping this results in a sub query. ie, you have to fetch all ids with date and month falls in the set of results extracted using the previous query
id, DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
DATE_FORMAT(dob, '%m-%d') IN 
    DATE_FORMAT(dob, '%m-%d') AS date_month 
    FROM bday 
    GROUP BY DATE_FORMAT(dob, '%m-%d') 
    HAVING count(id) >1) ;
My table structure:

Content of table:
Query and result:

MySql "CONCAT" usage example

$sql = "SELECT
        CONCAT('https://mysiteurl/profile/',user_id) as profile_url
        FROM `engine4_user`
        LIMIT 5000
        into outfile '$path' FIELDS TERMINATED BY ','  LINES TERMINATED BY '\n' ";

mysql update a column with an int based on order of another field
Reference: http://stackoverflow.com/a/10485817/345721
SET @rownumber = 0;
update mytable set Moneyorder = (@rownumber:=@rownumber+1)
order by MoneyOrder asc
or to do it in a single query you can try
update mytable cross join (select @rownumber := 0) r set Moneyorder = (@rownumber := @rownumber + 1) order by MoneyOrder asc

Click the following link to find a good article on how to get first n results from each category: http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
PHP - Mysql: Get last error
PHP - Mysql: determine which database is selected?
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);

Wednesday, September 2, 2015

How to replace Microsoft-encoded quotes in PHP

Scenario: I need to replace Microsoft Word version of single and double quotations marks (“ ” ‘ ’) with regular quotes (' and ") due to an encoding issue in my application.

$search = array(
$replace = array(
 return str_replace($search, $replace, $value);
Reference: http://stackoverflow.com/a/1262060/345721

Sunday, August 9, 2015

Tips and tricks of GIT

Removing Files you have added files to Git that you want it to track no longer.

Scenario: You added a file to Git accidentally or you may want to remove a file from current push
You cannot run git rm because you want to keep a copy of the file(git rm command will delete the file from file system)

 Solution: To tell Git to stop tracking a file, but still keep it on your local system, run the following command

git rm --cached [file_name]
GIT - Ignore changes in a file
--Assume file to be unchanged
git update-index --assume-unchanged path/to/file.txt
GIT - Add all files that are tracked and has change

Scenario: I have modified large set of files and added new files as well and I want to stage only the tracked files. In such situations, I can use this command
git add -u

Using Branches

1. git branch
Usage: List all of the branches in your repository.

2. git branch <new_branch>
Usage: Create a new branch called <new_branch>. This does not check out the new branch.

3. git branch -d <branch>
Usage: Delete the specified branch. This is a “safe” operation since Git prevents you from deleting the branch if it has unmerged changes.

4. git branch -D <branch>
Usage: Force delete the specified branch. Use this command only if you want to permanantly discard all unmerged changes

5. git branch -m <new_branch>
Usage: Rename the current branch to <new_branch>.

6. git clone git@yourrepositry.com:projectidentifier new-folder-name
Usage: Clone git repository to a folder with different name.

7. git reset --hard
Usage: Resets your index and reverts the tracked files back to state as they are in HEAD.

8. git clean -f -d
Usage: Cleans untracked files.

9. git clean -f -d -x
Usage: Remove your .gitignored files and get back to a pristine state

10. git log branch_name..origin/branch_name
Usage: Find difference between my local branch and remote branch
GIT - Stash

11. git stash
Usage: Stash files for future reference

12. git stash show
Usage: List stashed files

13. git stash show -p
Usage: Show changes in stashed files

14. git stash save -p "message"
Usage: Lets you choose changes to be stashed, you can stash part of changes in a file as well