FireStats error : FireStats database needs to be upgraded

Archive for the ‘PHP’ Category

Captcha Plugin in CodeIgniter

Friday, May 23rd, 2008

CAPTCHA - Completely Automated Public Turing test to tell Computers and Humans Apart. It is used in webpages to protect your page from automatic posting from outside of the site. CodeIgniter framework has a plugin named “captcha_pi.php” in plugins folder. Here I’ve demonstrated an example how to use this captcha plugin in your website built in CodeIgniter framework.

Make a controller named “captcha.php” and place in “controllers” folder. This controller is as follows:

<?php
class Captcha extends Controller
{
  public function __construct()
  {
    parent::Controller();

    $this->load->model('captcha_model');

    session_start();
  }

  public function index()
  {
    if(empty($_POST))
    {
      $captcha = $this->captcha_model->generateCaptcha();

      $_SESSION['captchaWord'] = $captcha['word'];

      $data['captcha'] = $captcha;

      $this->load->view('show_view', $data);
    }
    else
    {
      //check captcha matches
      if(strcasecmp($_SESSION['captchaWord'],
                   $_POST['confirmCaptcha']) == 0)
      {
        $this->load->view('success_view');
      }
      else
      {
        $this->load->view('failure_view');
      }
    }
  }
}
?>

Here I’ve made a model named “captcha_model” that has a method generateCaptcha(), which generates the captcha using CodeIgniter captcha plugin and returns the array. Captcha word is saved in session and after submitting the form this session word is compared with the posted word for matching.

If matches which is in (strcasecmp($_SESSION['captchaWord'], $_POST['confirmCaptcha']) == 0), then success is shown. Otherwise failure is shown. Here I’ve used strcasecmp() function of php to compare the word as case-insensitively. If u want user to enter the captcha words as they are shown (i.e. capital letter in capital and small letter in small), then you can use strcmp() function.

The captcha_model.php is as follows:

<?php
class Captcha_model extends Model
{
  private $vals = array();

  private $baseUrl  = 'http://localhost/captchademo/';
  private $basePath = 'D:/apache2triad/htdocs/captchademo/';

  private $captchaImagePath = 'tmp/captcha/';
  private $captchaImageUrl  = 'tmp/captcha/';
  private $captchaFontPath  = 'c:/windows/fonts/verdana.ttf';

  public function __construct($configVal = array())
  {
    parent::Model();

    $this->load->plugin('captcha');

    if(!empty($config))
      $this->initialize($configVal);
    else
      $this->vals = array(
                 'word'             => '',
                 'word_length'   => 6,
                 'img_path'       => $this->basePath
                                 .  $this->captchaImagePath,
                 'img_url'        => $this->baseUrl
                                 . $this->captchaImageUrl,
                 'font_path'      => $this->captchaFontPath,
                 'img_width'      => '150',
                 'img_height'     => 50,
                 'expiration'      => 3600
               );
  }

  /**
   * initializes the variables
   *
   * @author     Mohammad Jahedur Rahman
   * @access     public
   * @param     array     config
   */
  public function initialize ($configVal = array())
  {
    $this->vals = $configVal;
  } //end function initialize

  //---------------------------------------------------------------

  /**
   * generate the captcha
   *
   * @author     Mohammad Jahedur Rahman
   * @access     public
   * @return     array
   */
  public function generateCaptcha ()
  {
    $cap = create_captcha($this->vals);

    return $cap;
  } //end function generateCaptcha
}
?>

You have to change the $baseUrl, $basePath, $captchaImagePath, $captchaImageUrl and $captchaFontPath etc. To store the captcha images at first I’ve created a folder “tmp” and sub-folder “captcha” in the main directory where index.php exists. If u run on server be sure this two folder are given write permission.

By default, Captcha plugin generates 8 words in length. But I desire to very this length. So, I’ve made a little change in this plugin. In line 156 of “captcha_pi.php” there was

$defaults = array('word' => '', 'img_path' => '',
                 'img_url' => '', 'img_width' => '150',
                 'img_height' => '30', 'font_path' => '',
                 'expiration' => 7200);

which I made

$defaults = array('word' => '', 'word_length' => 8,
                 'img_path' => '', 'img_url' => '',
                 'img_width' => '150', 'img_height' => '30',
                 'font_path' => '', 'expiration' => 7200);

Next, in line 226, there was

for ($i = 0; $i <  8; $i++)

which I made

for ($i = 0; $i <  $word_length; $i++)

Now if u pass word_length as parameter then it will generate captcha image of word length as you specify.

Captcha

You can download the whole package from here.

captchademo

CakePHP - How to Run “Hello World” Program

Thursday, May 15th, 2008

I found that, novice programmers always face problem while trying to run CakePHP for the first time. So, here I’m describing a “Hello World” program in CakePHP.

1. First download the CakePHP from http://www.cakephp.org. You can download Stable: 1.1.19.6305 package or Beta: 1.2.0.6311 package.

2. Make a folder in your htdocs folder named “hello” and unzip the CakePHP package in that folder. Your files and folders will be like:

htdocs/hello
           /app
           /cake
           /docs
           /vendors
           /index.php
           .htaccess

3. Now copy app_controller.php file from .\cake\libs\controller\app_controller.php to .\app folder (.\app\app_controller.php).

4. Copy .\cake\libs\model\app_model.php to .\app folder (.\app\app_model.php).

5. Make a controller hello_controller.php in .\app\controllers\. Content of this controller.

<?php

class HelloController extends AppController {
  function index () {}
  function show () {
    $this->set('test', 'Hello World');
  }
}
?>

5. Make a model hello.php in .\app\models\. Content of this model.

<?php

class Hello extends AppModel {

  function index () { }
}
?>

6. Create a folder “hello” in .\app\views\. Then make a view file “show.ctp”. Content of this file.

<html>
<head><title>Hello World Program</title>
<head>
<body>
<h1><?php echo $test; ?></h1>
</body>
</html>


7. Open database.php in .\app\config\ folder and provide login, password, database etc. as your settings. Be sure that you have a table named “hello” in your provided database.

8. Enable mod_rewrite in your httpd.conf file. Uncomment (remove #).

LoadModule rewrite_module modules/mod_rewrite.so

Then restart your apache service.

Now you are ready to run this program. http://localhost/hello/hello/show

It will show “Hello World” in your browser.