Using MySQL multi query and creating a counter variable in PHP

cntI had this problem where I need to change the order of the products we have and  update them from the most popular to least popular. So what I did, I declared a variable that will act as a counter and set the column order_num to the current value of the counter. Here’s what I did:

$db = new mysqli("server", "user", "pass", "db_name");

$query = "set @cnt := 0;";

$query .= "update tbl set order_num = (@cnt := @cnt + 1);";

$db->multi_query($query);

You can also order specific record by adding an IN clause like:

$query .= "update tbl set order_num = (@cnt := @cnt + 1) where id IN (23, 76, 9, 45) order by field(id, 23, 76, 9, 45);";

Adding PHP Mobile Detect in CakePHP1.3 as a component

cake-logoIt seems that the library is not available for old version of CakePHP specifically in 1.3 only in 2.x. So what I did I converted the library as a component, there’s is nothing special about the conversion actually only if you are new to the Framework. Just download the file and unzip it, put it in your /app/controller/components directory.

Download >> Mobile Detect

How to use it:

In one of your controllers, append it in your $components variable like:

Class MyPageController extends AppController
{
  public $components = array('MobileDetect'); // adding the libraby in to your components

  public function beforeFilter() {
    parent::beforeFilter();
  }

  public function beforeRender() {
    // check the user's device and render the proper layout
    if($this->MobileDetect->isTablet()) {
      $this->layout = 'tablets';
    } elseif($this->MobileDetect->isMobile()) {
      $this->layout = 'mobiles';
    } else {
      $this->layout = 'default';
    }
  }
}

To download the original file go here.

Setup LAMP in Ubuntu / Linux Mint using Tasksel with PHPMyAdmin installed and mod_rewrite loaded

As a new Linux user, sometimes it is difficult to setup stuffs in a Linux box. Back in the days where internet connection is scarce in my area, using Ubuntu that time is kinda useless without it. Some software will require or lead you to another dependencies and may require another one and it sucks to do it in a Terminal. The most common installation is building your LAMP stack for development purposes.

So the easiest way to install LAMP is to install Tasksel first, it will still be on Terminal but a single line of command need:

sudo apt-get install tasksel

What it does is you use the command apt-get to install tasksel. After entering that command the Terminal will ask for your root password since we run the command as root. Tasksel will be downloaded and after that it will prompt what build are you going to install. This time select Lamp Server, then proceed. Wait for it until will ask for your MySQL root password and you are done!

To test if our web server is working, open your web browser and enter this URL:

localhost

Then you will see a page saying you installed Apache properly!

Now, we need to install PHPMyAdmin for us to easily manage our MySQL database. To do that you need to run Terminal again and enter this command:

sudo apt-get install phpmyadmin

Again, it will ask for your root password.

OK. It looks like we are great to go, we can do some magic stuffs there. So let’s try to create a PHP file to see if it is working. To do that run this command:

sudo gedit

It will open a text editor and take note we used it as root. I’ll explain that later, for now add this code and save it as phpinfo.php in /var/www.

<?php phpinfo(); ?>

If you’ve already messed with some PHP codes or created some PHP websites then this is no brainer to you but for those aren’t then this code will display your PHP’s information such as version, OS, modules, etc.

Additionally, to load the module rewrite run this command:

sudo a2enmod rewrite

Then open the file 000-default in /etc/apache2/sites-enabled with this command:

sudo gedit /etc/apache2/sites-enabled/000-default

Change all AllowOverride None to AllowOverride All and you must restart Apache to apply the changes using this command:

sudo /etc/init.d/apache2 restart

Lastly, to create new files in our www folder what we did is we need to use the account. It’s a little time consuming right? Why not just create in the folder directly? Well, that’s because the www folder is only set for root account, and other accounts doesn’t have a privileges to open it. To allow any user (if you want to) then we need to set the permission of our www folder. To do that open your terminal and run this command:

sudo chmod 777 /var/www -R

Chmod is a command that will change permission of a folder, 777 is parameter that will allow everyone to access it and -R to recursive all the permission settings to its sub directories.