Thursday, March 31, 2016

MySQL Trigger

CREATE TRIGGER `posttrigger` AFTER INSERT ON `posts`
 FOR EACH ROW INSERT INTO posts2(postTitle, postBody)  VALUES( NEW.postTitle,New.postBody)

Trigger is created on table posts. If data is inserted in posts, some other data (as defined in the trigger) is inserted in 'posts2' table;

Tuesday, March 29, 2016

error 1

ErrorException [ Warning ]: Creating default object from empty value


Probably you are not using Controller_Template 

Form Validation

Controller file:project/test.php
======================
url: localhost/project/test/login

public function action_login(){
   if($this->request->method()=='POST'){
    $validatedData=Validation::factory($_POST)
      ->rule('password','not_empty')
      ->rule('password','min_length', array(':value',6));
    if($validatedData->check()){
      $logged_in=$this->password=$this->request->post('password');    
      $this->response->body(View::factory('afterlogin'));
    }else {
      $err= $validatedData->errors('post');  //Capture errors
      $user_input=$_POST; //capture user input because we are going to return to the login page retaining the user input
    }
  }
  $this->response->body(View::factory('login')->bind('error',$err)->bind('user_input',$user_input));
  }


view file: login.php
==============
<?= Arr::get($error,'Success')?>
<?= Form::open('test/login',array('method'=>'post')); ?>
<hr>
<p>
<?= Form::label('password','Type Password: ',array('class'=>'test')); ?>
<?= Form::input('password',$user_input['password'],array('class'=>'test','type'=>'password')); ?>
<?= Arr::get($error,'password'); ?>
<?= Form::input('submit',NULL,array('type'=>'submit')); ?>
<?= Form::close(); ?>


Miscellaneous

echo URL::base();

Echo in ternary operator

echo isset($logged_in) ? "You have successfully logged in with password <h1>$logged_in</h1>." : "Try Again" ;

Redirect

HTTP::redirect('test');

Here 'test' is the name of the controller.


Validation - min_length


->rule('password','min_length', array(':value',6));

Sunday, March 27, 2016

Kohana Join Query

public function action_joinquery()
{
$data=DB::select('posts.postTitle','posts.postBody','authors.author_name')
->from('posts')
->join('authors')->on('posts.authorId','=','authors.author_id')
->execute();
// echo Debug::dump( $q);
echo View::factory('database')>bind('data',$data);  
}

Kohana Query

public function action_query2()
{ $q=DB::select()->from('posts')->execute(); echo Debug::dump( $q);     
}

Saturday, March 26, 2016

Kohana config

create a file named whatever you like in Application/config folder with following code:

<?php defined('SYSPATH') or die('No direct script access.');
return array(
'name' => 'William',
'Quote' => "To be or not to be."
);



Create an action method (function) in the controller (test.php) like so:

public function action_configtest()
{
echo Kohana::$config->load('myconfig.name');
}

Hit the url:  http://localhost/project/test/configtest. You should see 'William' on the screen.

Like get, you can set a config variable:
 public function action_configtest()
 {

  Kohana::$config->load('myconfig')->set('einstein','e=mc^2');
 echo Kohana::$config->load('myconfig')->get('einstein');
 }

Hit the url:  http://localhost/project/test/configtest. You should see 'e=mc^2' on the screen.


Friday, March 25, 2016

Connecting to database, run a query and view the result

Create a controller file named test.php in the application/classes/controller folder and type the following code:

<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Test extends Controller_Template {

public function action_database()
{
$p = DB::select()->from('posts')->execute();
echo View::factory('database')->bind('data',$p);
}

}

Now we need to create a view file named database.php in the views folder. So, create the database.php file and paste the following code:

<!DOCTYPE html>
<html>
<head>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha256-7s5uDGW3AHqw6xtJmNNtr+OBRJUlgkNJEo78P4b0yRw= sha512-nNo+yCHEyn0smMxSswnf/OnX6/KwJuZTlNZBjauKhTK0c+zT+q5JOCx0UFhXQ6rJR9jg6Es8gPuD2uZcYDLqSw==" crossorigin="anonymous">
<!-- <link href='https://fonts.googleapis.com/css?family=Roboto|Oswald' rel='stylesheet' type='text/css'> -->
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript" src="//cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
<title><?php echo 'title' ;?></title>
<style type="text/css">
body{
background-color: #eee;
}
</style>
</head>
<body>

<div class="container">
<h2> Table Explorer </h2>
<h4>Pass me all data from a table and I shall show you all fields and its value.</h4>
<code>for example, following code was used in a Controller and then data passed to me:
<br>
$allUsers = DB::select()->from('users')->execute();
<br>
$this->response->body(View::factory('users')->bind('data',$allUsers));
</code>


<table id="mt" class="table table-responsive table-striped">
<?php
$i = 0;
$firstRow=$data[0];
?>
<thead>
<?php
foreach($firstRow as $key => $value):
echo "<th>". $key . "</th>";
endforeach;
?>
</thead>


<?php
foreach($data as $point):
echo "<tr>";
foreach($point as $key => $value):
echo "<td>". $value . "</td>";
endforeach ;
echo "</tr>";
endforeach ; ?>
</table>


 </div>
</body>
<style type="text/css">

table{
margin-top: 5%;
background-color: #ddd;
border-radius:2px;
}

</style>

<script>
$(document).ready(function(){
    $('#mt').DataTable();
    // alert('Google');
});

</script>
</html>


Thursday, March 24, 2016

Creating a Kohana Module


Creating a Kohana module is simple. In this post we shall create a very basic Kohana 3 module, activate it and use it.


Let's say the name of our module is "Olive". 


1. Create a folder named 'olive' in the modules folder.

2. Create a folder named 'classes' in 'olive' folder.
3. Create a file named olive.php in the classes folder.

Type the following code in 'olive.php' file:

<?php defined('SYSPATH') or die('No direct script access.');

 class Olive {
   function index()
        {
              echo "Hello from Olive Module";
        }

   static function pickle()
        {
        return "We have been making and serving Olive Pickles for the world since 1867";

        }
   static function oil()
        {
        return "We have been making and serving Olive Oil for the world since 1867";   
        }
}
?>

Kohana will look for olive.php file in modules/olive/classes folder. 

Enable the Olive module in bootsrap.php file:




Now let's use the module in a controller. Create a file named OliveTest.php in application/classes/controller folder and type the following code in that file:

<?php defined('SYSPATH') or die('No direct script access.');
class Controller_OliveTest extends Controller_Template {

public function action_index()
{
echo "<h1>Welcome to Olive Module</h1>";
}

public function action_oil()
{
echo Olive::oil();
}

}

Point your browser to this url: http://localhost/project/olivetest/

You should see: 

Welcome to Olive Module

Point your browser to this url: http://localhost/project/olivetest/oil


You should see: 
We have been making and serving Olive Oil for the world since 1867


Further Experiment
------------------------
Now create a folder named 'controller' in the classes folder and copy the olive.php file in the controller folder. Add 'Controller_' before 'olive; in the class declaration file so that it looks like this: class Controller_Olive { 

Point to url: http://localhost/project/olivetest/oil

You should get a Fatal error: 

ErrorException [ Fatal Error ]: Class 'Olive' not found

That is because name of the class is now Controller_Olive. But, in the controller file named test.php, you are calling the controller as 'Olive'. We need to correct this. Go to test.php and edit the action_oil function like so:

public function action_oil()
{
echo Controller_Olive::oil();
}

Point to url: http://localhost/project/olivetest/oil. Everything should be okay. 

Tuesday, March 22, 2016

Run MYSQL and import Large Data.



Windows 7
==========
Go to DOS prompt by typing cmd on Windows Start menu
 
cd C:\xampp\mysql\bin>
mysql

show databases
you are not logged in a administrator. to do so type \q

mysql -u root
show databases


use babycard
source E:\Babytika\windmill_babycard-app.sql

Monday, March 21, 2016

Kohana : PHP to PDF

public function action_PdfDownload()
{
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();

}

Kohana - Change Header

$this->response->headers('Content-Type', 'application/pdf');

PHPMailer

public function action_email()
    {
                //Download this PHPMailer module from https://github.com/PHPMailer/PHPMailer
              
                // mail send process start
             
                require DOCROOT."modules/PHPMailer/PHPMailerAutoload.php";

                $mail = new PHPMailer;
                $mail->isSMTP();                                   // Set mailer to use SMTP
                $mail->Host = 'dilir.me';  // Specify main and backup SMTP servers
                $mail->SMTPAuth = true;                            // Enable SMTP authentication
                $mail->Username = 'info@dilir.me';                 // SMTP username
                $mail->Password = '***';                  // SMTP password
                $mail->SMTPSecure = '';                            // Enable TLS encryption, `ssl` also accepted
                $mail->Port = 25;                                  // TCP port to connect to

                $mail->setFrom('info@dilir.me', 'Mailer');
                $mail->addAddress('dilir.khan@gmail.com', 'Dilir');     // Add a recipient
                $mail->addReplyTo(dilir.khan@gmail.com', 'Dilir');
                $mail->addCC('cc@example.com');
                //$mail->addBCC('bcc@example.com');

                $mail->addAttachment(DOCROOT . 'documents/title.pdf'); // Add attachments
                $mail->isHTML(true);                                  // Set email format to HTML

                $mail->Subject = 'PHP Mailer Implementation';
                $mail->Body    = 'Yes, I was able to send email using PHPMailer again.  Check attachment.';
                $mail->AltBody = 'Yes, I was able to send email using PHPMailer again.  Check attachment.';

                if(!$mail->send()) {
                    echo 'Message could not be sent.';
                    echo 'Mailer Error: ' . $mail->ErrorInfo;
                } else {
                    echo 'Message has been sent. Check attachment.';
                }
              

                // mail sent process end

    }

Add to trusted hosts

 
// application/config/url.php
return array(
    'trusted_hosts' => array(
        'dilir\.me',
    ),
);

URL troubleshoot

I was not being able to correctly refer to the PHPMailerAutoload.php file. I needed to do this for sending email from my site.

Here is the ultimate solution:
require DOCROOT."modules/PHPMailer/PHPMailerAutoload.php";




Complete Site URL

public function action_site()
    {   
        echo URL::base(true);
    }



Output: http://localhost/test/

Sunday, March 20, 2016

Validation Factory - Easy validation

public function action_validate()
{
$name= "Venus";
$id=2;
$validate=Validation::factory(array(
'name'=> "Venus",
'id'=>2
))
->rule('name','not_empty')
->rule('name','in_array',array(':value',array('Sun','Venus','Jupiter')))
->rule('id','not_empty')
->rule('id','is_numeric');

if($validate->check()){
echo "'$name',$id From Dilir Module(Dilir/Dilir/dance)";
}
            
}


Eliminate the extra index.php from Kohana url

By default you need to add index.php to call a Controller and action method. This becomes painful. The solution is to:

Create .htaccess file with the following content and place it in the root folder of Kohana project

RewriteEngine On

RewriteRule ^(application|modules|system) - [F,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* /gppprocess/index.php/$0 [PT,L]

Create an Excel file from PHP

<?php

function toExcel()
{
//Download PZHPExcel from https://phpexcel.codeplex.com/# and make sure you include the PHPExcel.php
include_once "classes/PHPExcel.php" ;
$sheet = new PHPExcel();
$activeSheet= $sheet->getActiveSheet();
$activeSheet->setCellValue("A1","SL#");
$activeSheet->setCellValue("B1","Name");
$activeSheet->setCellValue("C1","Mobile Number");
$activeSheet->setCellValue("D1","Image");

header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-disposition: attachment; filename='report.xlsx'");
$xlWriter = PHPExcel_IOFactory::createWriter($sheet, 'Excel2007');
$xlWriter->save('php://output');
exit;
}

//Call the function
toExcel();
?>

Printing base64 encoded image

The image get printed because of the HTML code followed by the image. Embedded Image <img width="100" alt="Embedded Image" src="data:image/png;base64, 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 " />