Back Up Phone Book NOKIA 5300 Express Dalam Format MySQL

Posted on Updated on

Hmm..akhirnya ada waktu untuk menulis artikel tentang programming juga. Setelah beberapa minggu terakhir ini dijemukkan dengan tugas-tugas kuliah yang lumayan berat (sebenarnya saat ini ada beberapa tugas yang belum selesai juga sih..hehe). Kali ini saya ingin membagi beberapa eksperimen yang saya lakukan, di sini saya berkonsentrasi ke pemrograman berbasis web. Bahasa yang digunakan adalah PHP. Seperti yang diketahui, PHP adalah salah satu bahasa yang digunakan dalam pemrograman web yang bersifat server side. Artinya script-script PHP di-compile dan dijalankan dari sisi server yang akan diterjemahkan ke dalam HTML sebelum kemudian ditampilkan pada sisi client side melalui browser.

Saya ingin mencoba memaksimalkan kemampuan PHP untuk dikombinasikan dengan Teknologi Mobile. Walaupun ini cukup sederhana, tapi lumayan asik kok buat ngisi waktu luang. Sekedar info, Handphone yang saya gunakan adalah NOKIA 5300 Express. Saya ingin memindahkan (back up) contact-contact yang ada di handphone saya dan membuat databasenya dalam bentuk MySQL. Jadi, dengan bentuk yang lebih terstruktur di dalam database, data contact yang ada akan bisa lebih ter-manage lebih rapi.

Nokia 5300
Nokia 5300
Nokia
Nokia
PHP MySQL
PHP MySQL


Teman-teman tentu tahu software NOKIA PC Suite atau lebih dikenal PC Suite saja. PC Suite adalah software yang digunakan untuk sinkronisasi handphone-handphone NOKIA dengan PC (Personal Computer). Dengan adanya PC Suite, back up dari handphone ke komputer bisa dilakukan lebih mudah. Salah satu fasilitas yang dimiliki oleh PC Suite adalah kemampuan untuk mem-backup contact yang ada di HP ke berbagai format, salah satunya adalah format CSV. CSV (Comma Separated Value) adalah salah satu format pertukaran data. Ciri khas CSV ini terlihat dari strukturnya, di mana value yang satu dengan yang lain dipisahkan oleh karakter “;” atau “,” (tanpa tanda petik).

Nokia PC Suite
Nokia PC Suite

Rumus  :              value_1 ; value_2 ; value_3 ; … ; value_n

Contohnya gini nih..

Fadlika_Dita_Nurjanto;Institut_Teknologi_Sepuluh_Nopember;Teknik_Informatika

(Di contoh value mempunyai karakter “_” untuk memisahkan kata, tapi itu tidak baku kok..boleh2 aja memakai karakter “  “ (spasi))

Setelah kita mengetahui bagaimana formatnya, tentu kita bisa mencari algoritma untuk memecah string-string yang ada berdasarkan karakter “;” atau “,”. Di PHP sendiri, sudah tersedia berbagai fungsi yang bisa digunakan untuk proses-proses tersebut. Fungsi memecah string, memasukkan masing-masing pecahan ke dalam array, dan fungsi untuk memasukkan masing-masing elemen array ke dalam database MySQL. Basicnya sih gitu.. sekarang tinggal bagaimana kreatifitas kita untuk mengkombinasikan itu semua.

Oke..sekarang masuk ke source code aja deh.. ini langsung saya tunjukkan source code lengkapnya..

<?php
include('config.php');
$format_csv = "csv";

function csv_to_mysql($file,$host,$user,$pass)
{
	$row = 1;
	if (($handle = fopen($file,"r")) !== FALSE)
	{
		mysql_connect("$host","$user","$pass") or die(mysql_error);
		mysql_select_db($GLOBALS['pc_suite_db']);
		$SQL = "SELECT * FROM ".$GLOBALS['nokia_5300_table'];
		$num = mysql_num_rows(mysql_query($SQL));
		if($num == 0)
		{
			while(($data = fgetcsv($handle, 10000, ";")) !== FALSE)
			{
				$num = count($data);
				if($row==1)
				{
					echo "<p> $num fields di baris ke $row: <br/></p>\n";
					for($c=0; $c<$num; $c++)
					{
						echo (trim($data[$c]).",");
					}
					echo "<br/>";
				}
				elseif($row!=1)
				{
					echo "<p> $num fields di baris ke $row: <br/></p>\n";
					$SQL = "INSERT INTO ".$GLOBALS['nokia_5300_table']." values(";
					for($c=0; $c<$num; $c++)
					{
						//echo (trim($data[$c])."<br/>\n");
						$SQL .= trim($data[$c]);
						if($c != $num-1)
						{
							$SQL .= ",";
						}
					}
					$SQL .= ")";
					echo $SQL."<br/>";
					$query = mysql_query($SQL) or die(mysql_error());
					if($query)
					{
						echo "Sukses<br>\n";
					}
					elseif (!$query)
					{
						echo "Gagal<br>\n";
					}
				}
				$row++;
			}
			fclose($handle);
		}
		elseif ($num)
		{
			echo "Sudah ada data, hapus data yang ada pada tabel terlebih dahulu<br/>";
		}
	}
}

if($upload)
{
	if($_FILES['csv_doc']['type'] != "application/vnd.ms-excel")
	{
		echo "Format tidak dikenal";
	}
	else
	{
		$csv = $_FILES['csv_doc']['name'];
		$path = pathinfo($csv);
		$extension = $path['extension'];
		if($extension != $format_csv)
		{
			echo "Format file kurang benar<br/>";
			echo "ekstensi : ".$extension."<br>";
			echo "nama file : ".$csv."<br/>";
		}
		elseif($extension == $format_csv)
		{
			if(is_file(basename($_FILES['csv_doc']['name'])))
			{
				csv_to_mysql($_FILES['csv_doc']['name'],$GLOBALS['host'],$GLOBALS['user'],$GLOBALS['pass']);
			}
			else
			{
				$temp_directory = "temp/";
				$temp_upload = $temp_directory.basename($_FILES['csv_doc']['name']);
				echo $temp_upload."<br/>";
				move_uploaded_file($_FILES['csv_doc']['tmp_name'], $temp_upload);
				csv_to_mysql($temp_upload,$GLOBALS['host'],$GLOBALS['user'],$GLOBALS['pass']);
				unlink($temp_upload);
			}

		}
	}
//	csv_to_mysql($_FILES['csv_doc']['name'],'localhost','root','');
}
?>

Keterangan fungsi:

Basename                           : Returns filename component of path

Count                                    : count all elements in an array, or properties in an object

Die                                         : Print String in die function

Fclose                                   : Closes an open file pointer

Fgetcsv                                 : Gets line from file pointer and parse for CSV fields

Fopen                                   : Opens file or URL

Include                                 : Includes and evaluates the specified file

is_file                                   : Tells whether the filename is a regular file

move_uploaded_file     : Moves an uploaded file to a new location

mysql_connect                 : Open a connection to a MySQL Server

mysql_num_rows           : Get number of rows in result

mysql_query                     : Send a MySQL query

mysql_select_db             : Select a MySQL database

pathinfo                              : Returns information about a file path

Trim                                       : Strip whitespace (or other characters) from the beginning and end of a string

Unlink                                  : Deletes a file

Reference :  PHP Manual (www.php.net)

<?php
$GLOBALS['host'] = "localhost";
$GLOBALS['user'] = "root";
$GLOBALS['pass'] = "";
$GLOBALS['pc_suite_db'] = "pc_suite";
$GLOBALS['nokia_5300_table'] = "nokia_5300";
//fungsi untuk koneksi server
function KoneksiServer($a_host,$a_user,$a_pass)
{
	$SQL = mysql_connect($a_host,$a_user,$a_pass);
	if($SQL)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function PilihDB($status,$database)
{
	if($status)
	{
		mysql_select_db($database);
	}
	elseif(!$status)
	{
		echo "Konfigurasi salah<br/>";
	}
}
?>

Untuk interface sebelum kita melakukan proses back-up, digunakan HTML untuk membangun form.

Contoh sederhana :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>NOKIA PhoneBook to MySQL</title>
</head>

<body>
<h1>Ekspor NOKIA PHONEBOOK CSV Format to MySQL Format
</h1>
<form action="exe_choose.php" method="post" enctype="multipart/form-data" name="choose" id="choose">
  <label for="csv_doc">Pilih File : </label>
  <input type="file" name="csv_doc" id="csv_doc" />
  <br />
  <input type="submit" name="upload" id="upload" value="Upload" />
</form>
</body>
</html>

Interface dan proses back-up sudah. Sekarang membuat source code untuk menampilkan data data hasil back-up di MySQL

<?php
include('config.php');
mysql_connect($GLOBALS['host'],$GLOBALS['user'],$GLOBALS['pass']) or die(mysql_error());
mysql_select_db($GLOBALS['pc_suite_db']);
$SQL="SELECT * FROM ".$GLOBALS['nokia_5300_table'];
$query=mysql_query($SQL) or die(mysql_error());

$num = mysql_num_rows($query);
echo $num ." Contacts :<br/>";

echo "<table align='center' border=1>";
//menampilkan field pada tabel
$num_fields = mysql_num_fields($query);
$first = "<tr>";
for($a = 0; $a<$num_fields; $a++)
{
	$fields = mysql_fetch_field($query);
	$first .= "<td>".$fields->name."</td>";
}
$first .= "</tr>";
echo $first."<br/>";

//menampilkan data pada tabel
while($result=mysql_fetch_array($query))
{
	echo "<tr>";
	for($i=0;$i<56;$i++)
	{
		if($result[$i]=='')
		{
			echo "<td>&nbsp;</td>";
		}
		else
		{
			echo "<td>".$result[$i]."</td>";
		}
	}
	echo "</tr>";
}
echo "</table>";
?>

Atau dengan berbentuk format XML (untuk melihat struktur dari XML pada browser, disarankan menggunakan browser Opera).

<?php
include('config.php');
header('Content-type: text/xml');
echo "<?xml version='1.0' encoding='UTF-8'?>";
$conn = KoneksiServer($GLOBALS['host'],$GLOBALS['user'],$GLOBALS['pass']);
PilihDB($conn,$GLOBALS['pc_suite_db']);
$SQL = "SELECT * FROM ".$GLOBALS['nokia_5300_table'];
$query = mysql_query($SQL) or die(mysql_error());
echo "<rows>";
$count = 1;
$jur_data = mysql_num_rows($query);
$jum_field = mysql_num_fields($query);
while($result = mysql_fetch_array($query))
{
	echo "<row id='".$count."'>";
	$count++;
	for($a=0;$a<$jum_field;$a++)
	{
		if($result[$a]=='')
		{
			echo "<cell></cell>";
		}
		else
		{
			echo "<cell>".$result[$a]."</cell>";
		}
	}
	echo "</row>";
}
echo "</rows>";
?>

Juga saya lampirkan file lengkap dari source yang ada beserta file sql hasil back-up database MySQL (masih kosongan lho), bisa di-download di sini… Cara download, setelah berhasil didownload, renama ekstensinya menjadi .rar. Ini saya lakukan karena wordpress tidak mengijinkan meng-upload file .rar secara langsung. Setelah itu, ekstract di sembarang directory di server anda. Di sini saya memakai localhost biar mudah,hehe.

Perlu diketahui, masih ada beberapa bug yang perlu diperbaiki. Antara lain :

–          Proses konversi dari CSV ke dalam format MySQL. Ada beberapa bug setelah proses memecah string dengan fungsi fgetcsv dan saat dimasukkan dalam database MySQL. Ada beberapa data yang gagal dimasukkan.

–          Proses saat menampilkan data dari MySQL. Coba teman-teman lihat dengan beberapa browser, ada perbedaan saat penampilan data antara 1 browser dengan browser yang lain.

Setelah mengetahui bug yang ada, mungkin teman-teman bisa membantu bagaimana solusi pemecahan yang bisa dilakukan. Bisa diganti dengan fungsi yang baru (contoh : menggunakan explode untuk memecah string) atau dengan cara yang lain. Jangan lupa comment di bawah yak..yang udah nemu solusinya, di-share dong.. okelah kalo begitu, selamat bereksperimen.. 🙂

File : NOKIA 5300 CSV MySQL

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s