I would like to see a sample application created using AMFPHP + Flex 4.
Below is a sample application created using AMFPHP and Flex 4 to search and create employee details. Server : Wamp 2.0i
1. Download http://sourceforge.net/projects/amfphp/ and Copy AMFPHP folder to your webroot. In this case Wamp2.0i/www/amfphp
2. You may get warnings or errors in PHP inside amfphp. Replace all occurences of eregi_replace() function with preg_replace(). This is only for PHP > 5.3.
3.I have a PHP class with methods to create, search and get employee details from a DB.
<?php
include('Employee.php');
class EmployeesService {
var $username = "root";
var $password = "";
var $server = "localhost";
var $port = "3306";
var $databasename = "fb_tutorial_db";
var $tablename = "employees";
var $connection;
public function __construct() {
$this->connection = mysqli_connect(
$this->server,
$this->username,
$this->password,
$this->databasename,
$this->port
);
}
public function getAllEmployees() {
$stmt = mysqli_prepare($this->connection, "SELECT * FROM
$this->tablename");
mysqli_stmt_execute($stmt);
$rows = array();
mysqli_stmt_bind_result($stmt, $row->emp_no,
$row->birth_date, $row->first_name, $row->last_name,
$row->gender, $row->hire_date);
while (mysqli_stmt_fetch($stmt)) {
$row = new Employee();
$rows[] = $row;
//$row = new stdClass();
mysqli_stmt_bind_result($stmt, $row->emp_no,
$row->birth_date, $row->first_name, $row->last_name,
$row->gender, $row->hire_date);
}
mysqli_stmt_free_result($stmt);
mysqli_close($this->connection);
return $rows;
}
public function getEmployeesByID($itemID) {
$stmt = mysqli_prepare($this->connection, "SELECT * FROM
$this->tablename where emp_no=?");
mysqli_bind_param($stmt, 'i', $itemID);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $row->emp_no,
$row->birth_date, $row->first_name, $row->last_name,
$row->gender, $row->hire_date);
if(mysqli_stmt_fetch($stmt)) {
return $row;
} else {
return null;
}
}
public function createEmployees($item) {
$stmt = mysqli_prepare($this->connection, "INSERT INTO
$this->tablename (birth_date, first_name, last_name, gender,
hire_date) VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssss', $item["birth_date"],
$item["first_name"], $item["last_name"], $item["gender"],
$item["hire_date"]);
mysqli_stmt_execute($stmt);
$autoid = mysqli_stmt_insert_id($stmt);
mysqli_stmt_free_result($stmt);
mysqli_close($this->connection);
return $autoid;
//return $item;
}
}
?>
4. Copy this code to EmployeesService.php and place it inside amfphp/services folder.
5. Write a Flex application to communicate with this PHP class.
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import flash.events.MouseEvent;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
protected function
getAllEmployees_resultHandler(event:ResultEvent):void
{
dataGrid.dataProvider=event.result;
}
protected function
getAllEmployeesByID_resultHandler(event:ResultEvent):void
{
dataGrid.dataProvider=event.result;
}
protected function
createEmployees_resultHandler(event:ResultEvent):void
{
Alert.show("inserted with ID="+event.result);
EmpService.getAllEmployees();
}
protected function EmpService_faultHandler(event:FaultEvent):void
{
trace(event.fault.faultDetail);
}
protected function
datagrid1_creationCompleteHandler(event:FlexEvent):void
{
EmpService.getAllEmployees();
}
protected function Insert_clickHandler(event:MouseEvent):void
{
var e:Employee = new Employee();
e.first_name = fname.text;
e.last_name = lname.text;
e.hire_date = hdate.text;
e.birth_date = bdate.text;
e.gender = gender.text;
e.emp_no = parseInt(empno.text);
EmpService.createEmployees(e);
}
protected function search_clickHandler(event:MouseEvent):void
{
EmpService.getEmployeesByID(parseInt(stext.text));
}
protected function button1_clickHandler(event:MouseEvent):void
{
EmpService.getAllEmployees();
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects)
here -->
<s:RemoteObject endpoint="http://localhost/amfphp/gateway.php"
source="EmployeesService" destination="EmployeesService"
id="EmpService" fault="EmpService_faultHandler(event)"
showBusyCursor="true">
<s:method name="getEmployeesByID"
result="getAllEmployeesByID_resultHandler(event)"/>
<s:method name="getAllEmployees"
result="getAllEmployees_resultHandler(event)"/>
<s:method name="createEmployees"
result="createEmployees_resultHandler(event)"/>
</s:RemoteObject>
</fx:Declarations>
<mx:DataGrid x="98" y="54"
creationComplete="datagrid1_creationCompleteHandler(event)"
id="dataGrid">
<mx:columns>
<mx:DataGridColumn headerText="Emp No." dataField="emp_no"/>
<mx:DataGridColumn headerText="First Name"
dataField="first_name"/>
<mx:DataGridColumn headerText="Last Name"
dataField="last_name"/>
<mx:DataGridColumn dataField="birth_date" headerText="Birth
Date"/>
<mx:DataGridColumn dataField="hire_date" headerText="Hire
Date"/>
<mx:DataGridColumn dataField="gender" headerText="Gender"/>
</mx:columns>
</mx:DataGrid>
<s:TextInput x="98" y="25" id="stext"/>
<s:Button x="234" y="25" label="Search" id="search"
click="search_clickHandler(event)"/>
<mx:Form x="98" y="221" width="362" height="252">
<mx:FormHeading label="Insert new Employee"/>
<mx:FormItem label="First Name">
<s:TextInput id="fname"/>
</mx:FormItem>
<mx:FormItem label="Last Name">
<s:TextInput id="lname"/>
</mx:FormItem>
<mx:FormItem label="Hire Date(YYYY-MM-DD)">
<s:TextInput id="hdate"/>
</mx:FormItem>
<mx:FormItem label="Birth Date(YYYY-MM-DD) ">
<s:TextInput id="bdate"/>
</mx:FormItem>
<mx:FormItem label="Gender(M/F)">
<s:TextInput id="gender"/>
</mx:FormItem>
<mx:FormItem label="Emp No.">
<s:TextInput id="empno"/>
</mx:FormItem>
<s:Button id="insertButton" click="Insert_clickHandler(event)"
label="Insert"/>
</mx:Form>
<s:Button x="630" y="25" label="Refresh"
click="button1_clickHandler(event)"/>
</s:WindowedApplication>
+