Posts Tagged ‘mysql’

PHP insert/update/view file BLOB di MySQL

This item was filled under [ Code Snippet, MySQL, PHP ]

Cara untuk insert/update/view (menyimpan/mengubah/menampilkan) file biner pada MySQL adalah sebagai berikut.

Struktur database MySQL contoh nya kita beri nama tabel “file_attachment”, sebagai berikut:
Copy paste pada tools MySQL Administrasi Anda, seperti phpmyadmin.

CREATE TABLE IF NOT EXISTS `file_attachment` (
  `id` bigint(20) NOT NULL auto_increment,
  `file_content` mediumblob NOT NULL,
  `file_name` varchar(255) NOT NULL,
  `file_type` varchar(255) NOT NULL,
  `file_size` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Untuk Insert Script nya adalah sbb.:
Beri nama file insert_blob.php (hanya contoh).

<?php
// CONECT DATABASE
@mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE");
@mysql_select_db("nama_database") OR die ("CONNECTED, BUT NO DATABASE");
 
if($_POST[submit]){
    $file_name = $_FILES['file']['name'];
    $tmp_name  = $_FILES['file']['tmp_name'];
    $file_size = $_FILES['file']['size'];
    $file_type = $_FILES['file']['type'];
    $fp = fopen($tmp_name, 'r');
    $file_content = fread($fp, $file_size) or die("Error: cannot read file");
    $file_content = mysql_real_escape_string($file_content) or die("Error: cannot read file");
    fclose($fp);
 
 
    // INSERT
    $qu = "INSERT INTO `file_attachment`
                (`file_content`,`file_name`,`file_type`,`file_size`)
                VALUES
                ('".$content."','".$file_name."','".$file_type."','".$file_size."')";
	$re = mysql_query($qu) or die ("Sorry Cant insert db!");
	echo $file_name." inserted succesfully to database";
}
echo '<form method="post" enctype="multipart/form-data">';
echo '	<input name="file" type="file">';
echo '	<input name="submit" type="submit" value="Upload">';
echo '</form>';
?>

Untuk menampilkan File dari BLOB, menggunakan 2 file, file pertama adalah sebagai berikut:
Beri nama file view_blob.php (hanya contoh).

<?php
// CONECT DATABASE
@mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE");
@mysql_select_db("nama_database") OR die ("CONNECTED, BUT NO DATABASE");
 
$id = $_REQUEST['id'];
$query = "SELECT * FROM `file_attachment` WHERE `id`='".$id."' LIMIT 1";
$qu = mysql_query($query);
$num = mysql_numrows($qu);
if($num > 0) {
	$result=mysql_fetch_object($qu);
	header("Content-Disposition: attachment; filename=".jin_gfile($result->file_name.""));
	header("Content-length: ".$result->file_size."");
	header("Content-type: ".$result->file_type."");
	echo $result->file_content;
} else {
	echo "File tidak valid!";
}
?>

berikut tambahan fungsi jin_gfile, supaya nama file tidak ada karakter aneh (boleh disatukan dalam file view_blob.php).

<?php
// CLEAN FILENAME
function jin_gfile($txt) {
	$txt = preg_replace("/[^a-zA-Z0-9s.]/", "_", trim($txt));
	return $txt;
}
?>

Berikutnya file kedua untuk view, adalah sbb bergantung kebutuhan:
- Untuk File Download (file umum), kita asumsikan pada data di MySQL sudah ada id 9 yang isinya adalah file document laporan ber ekstensi .doc atau .xls

<a href="http://namadomain/view_blob.php?id=9">File Laporan Bulan Maret 2010 (klik untuk download)</a>

- Untuk menampilkan gambar, kita asumsikan pada data di MySQL sudah ada id 3 yang isinya adalah file gambar ber ekstensi .jpg, .gif atau .png

<img src="http://namadomain/view_blob.php?id=3" alt="Gambar Alumni 1996">

Catatan PENTING: jika memungkinkan disarankan untuk tidak memilih menyimpan file biner kedalam struktur storage tabel database MySQL, melainkan lebih baik menyimpan file system.

Continue reading...

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...
Popularity: 23 views
Tagged with: [ , , , ]

Belajar PHP dan MySQL dari NOL - Part I (pengertian, sejarah dan kelebihan)

This item was filled under [ General, MySQL, PHP ]

Pengertian PHP

PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini. PHP banyak dipakai untuk memrogram situs web dinamis, walaupun tidak tertutup kemungkinan digunakan untuk pemakaian lain.

Contoh terkenal dari aplikasi PHP adalah forum (phpBB) dan MediaWiki (software di belakang Wikipedia). PHP juga dapat dilihat sebagai pilihan lain dari ASP.NET/C#/VB.NET Microsoft, ColdFusion Macromedia, JSP/Java Sun Microsystems, dan CGI/Perl. Contoh aplikasi lain yang lebih kompleks berupa CMS yang dibangun menggunakan PHP adalah Mambo, Joomla!, Postnuke, Xaraya, dan lain-lain.

Sejarah PHP

Pada awalnya PHP merupakan kependekan dari Personal Home Page (Situs Personal). PHP pertama kali dibuat oleh Rasmus Lerdorf pada tahun 1995. Pada waktu itu PHP masih bernama FI (Form Interpreted), yang wujudnya berupa sekumpulan script yang digunakan untuk mengolah data form dari web.
Continue reading…

Continue reading...

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...
Popularity: 2,326 views

Pemilik MySQL mengundurkan diri dari Sun

This item was filled under [ MySQL ]

Michael “Monty” Widenius telah mengumumkan bahwa dia telah mengundurkan diri (resign) dari Sun dan sekaligus memulai perusahaan baru sendiri yaitu “Monty Program Ab“.

Ada banyak rumors mengenai resign pada bulan Agustus / September tahun lalu, tetapi dia masih mencoba untuk bekerja dengan Sun. Akhirnya sekarang dia dapat menjelaskan sedikit tentang apa yang terjadi.

Alasan utamanya adalah untuk meninggalkan bahwa Monty tidak puas dengan cara MySQL server yang telah dikembangkan. Secara khusus Monty akan tunjukkan server development yang akan dipindahkan ke open development environment lingkungan yang akan mendorong partisipasi di luar dan tanpa memerlukan perbedaan pada kode sumber. Sun telah mempertimbangkan membuka server pembangunan, namun langkah sudah terlalu lambat.

Monty Program Ab benar akan menjadi open source perusahaan, dengan tujuan tambahan menjadi berorientasi pada perusahaan kecil keluarga (karyawan 10/30) di mana setiap orang dapat menjadi pemilik perusahaan, peduli kepada karyawan dan berusaha untuk bersenang-senang bersama-sama dan membagi keuntungan. Lebih lengkapnya seperti ini: http://zak.greant.com/hacking-business-models.

Monty Program Ab akan mulai aktif bekerja dengan MySQL masyarakat agar stabil patch ke MySQL-Maria 5,1 struktur dan membuat aktif masyarakat di sekitar struktur ini. Dan juga akan melakukan restrukturisasi di MySQL kode untuk membuatnya lebih mudah, cepat dan dengan lebih sedikit bug.

Info lanjut mengenai pengerjaan Monty:
http://dev.mysql.com/downloads/maria/index.html (Maria Project)
http://askmonty.org
http://www.openoceancapital.com/
http://monty-says.blogspot.com

Artikel terkait lainnya:
http://www.heise-online.co.uk/open/MySQL-founder-leaves-Sun–/news/112565

Opini pribadi dari saya:
Jadi bagaimanakah nasib MySQL di versi2 berikutnya ya??
Apakah menunggu MariaDB release?
Atau tetap menggunakan MySQL?
Kita lihat saja nanti… yg jelas MySQL masih open source :)

OK sekian dulu, hidup open source!!! :mrgreen:
NB: thanks to “irfani YangBaikHati” dari milis phpug for the info . cheers…
NB2: ribet juga translate nya neh… (google translate masih agak aneh, jadi mesti edit2 deh)

Continue reading...

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5 out of 5)
Loading ... Loading ...
Popularity: 793 views

PHP Class Pagination alias Pengaturan Data per Halaman

This item was filled under [ Code Snippet, MySQL, PHP ]

Screenshot sebagai berikut:

Berikut php class pagination, pada script disertakan juga keterangan komentar pada file script.

<?php
class JinPagination {
	// fungsi pengaturan/option $this->blabla = "value nya blabla"
	function setOption($field, $value) {
		$this->$field = $value;
	}
	// fungsi paginasi generate array berupa total jumlah halaman, pagination, data dan posisi start 
	// berguna untuk diatur secara fleksible terutama untuk berbasis menggunakan template
	function build() {
		// SETUP
		$tabel = $this->tabel;
		$where = $this->where;
		$limit = $this->limit;
		$order = $this->order;
		$page = $this->page;
 
		// SETUP OPTIONAL
		if(!isset($this->web_url_page)) { $web_url_page = "?page="; } else { $web_url_page = $this->web_url_page; }
		if(!isset($this->adjacents)) { $adjacents = "3"; } else { $adjacents = $this->adjacents; }
		if(!isset($this->txt_prev)) { $txt_prev = "&laquo; prev"; } else { $txt_prev = $this->txt_prev; }
		if(!isset($this->txt_next)) { $txt_next = "next &raquo;"; } else { $txt_next = $this->txt_next; }
		if(!isset($this->txt_titik)) { $txt_titik = "..."; } else { $txt_titik = $this->txt_titik; }
 
		$query = mysql_query("SELECT * FROM ".$tabel." ".$where."");
		//$total_pages = mysql_fetch_array(mysql_query($query));
		//$total_pages = $total_pages['num'];
		$total_pages = mysql_num_rows($query);
 
		if($page) {
			$start = ($page - 1) * $limit; 			//first item to display on this page
		} else {
			$start = 0;								//if no page var is given, set start to 0
		}
		// Get data.
		$query = "SELECT * FROM ".$tabel." ".$where." ".$order." LIMIT ".$start.", ".$limit."";
		$hasil = mysql_query($query);
 
		/* Setup page vars for display. */
		if ($page == 0) $page = 1;					//if no page var is given, default to 1.
		$prev = $page - 1;							//previous page is page - 1
		$next = $page + 1;							//next page is page + 1
		$lastpage = ceil($total_pages/$limit);		//lastpage is = total pages / items per page, rounded up.
		$lpm1 = $lastpage - 1;						//last page minus 1
 
		/* 
			Now we apply our rules and draw the pagination object. 
			We're actually saving the code to a variable in case we want to draw it more than once.
		*/
		$pagination = "";
		if($lastpage > 1) {
			$pagination .= "<div class=\"pagination\">";
			//previous button
			if ($page > 1) {
				$pagination .= "<a href=\"".$web_url_page.$prev."".$extra_href."\">" . $txt_prev . "</a>";
			} else {
				$pagination .= "<span class=\"disabled\">" . $txt_prev . "</span>";	
			}
			//pages
			if ($lastpage < 7 + ($adjacents * 2)) {
				//not enough pages to bother breaking it up
				for ($counter = 1; $counter <= $lastpage; $counter++) {
					if ($counter == $page) {
						$pagination .= "<span class=\"current\">".$counter."</span>";
					} else {
						$pagination .= "<a href=\"".$web_url_page.$counter."".$extra_href."\">".$counter."</a>";
					}
				}
			}
			elseif($lastpage > 5 + ($adjacents * 2)) {
				//enough pages to hide some
				if($page < 1 + ($adjacents * 2)) {
					//close to beginning; only hide later pages
					for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) {
						if ($counter == $page) {
							$pagination .= "<span class=\"current\">".$counter."</span>";
						} else {
							$pagination .= "<a href=\"".$web_url_page.$counter."".$extra_href."\">$counter</a>";
						}
					}
					$pagination .= $txt_titik;
					$pagination .= "<a href=\"".$web_url_page.$lpm1."".$extra_href."\">".$lpm1."</a>";
					$pagination .= "<a href=\"".$web_url_page.$lastpage."".$extra_href."\">".$lastpage."</a>";		
				}
				elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
					//in middle; hide some front and some back
					$pagination .= "<a href=\"".$web_url_page."1".$extra_href."\">1</a>";
					$pagination .= "<a href=\"".$web_url_page."2".$extra_href."\">2</a>";
					$pagination .= $txt_titik;
					for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) {
						if ($counter == $page) {
							$pagination .= "<span class=\"current\">".$counter."</span>";
						} else {
							$pagination .= "<a href=\"".$web_url_page.$counter."".$extra_href."\">".$counter."</a>";
						}
					}
					$pagination .= $txt_titik;
					$pagination .= "<a href=\"".$web_url_page.$lpm1."".$extra_href."\">".$lpm1."</a>";
					$pagination .= "<a href=\"".$web_url_page.$lastpage."".$extra_href."\">".$lastpage."</a>";
				} else {
					//close to end; only hide early pages
					$pagination .= "<a href=\"".$web_url_page."1".$extra_href."\">1</a>";
					$pagination .= "<a href=\"".$web_url_page."2".$extra_href."\">2</a>";
					$pagination .= $txt_titik;
					for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) {
						if ($counter == $page) {
							$pagination .= "<span class=\"current\">".$counter."</span>";
						} else {
							$pagination .= "<a href=\"".$web_url_page.$counter."".$extra_href."\">".$counter."</a>";
						}
					}
				}
			}
 
			//next button
			if ($page < $counter - 1) {
				$pagination .= "<a href=\"".$web_url_page.$next."".$extra_href."\">" . $txt_next . "</a>";
			} else {
				$pagination .= "<span class=\"disabled\">" . $txt_next . "</span>";
				$pagination .= "</div>\n";
			}
		}
		// hasil dari fungsi build()
		return array(	"pagination" 	=> $pagination, 
						"total" 		=> number_format($total_pages),
						"hasil"			=> $hasil,
						"start"			=> $start
					);
	}
}
 
 
// Penggunaan Class
// koneksi DB
// asumsikan kita sudah terkoneksi dengan database MySQL
 
// Setting CSS
$isi = "";
$isi .= "
<style>
/* optional */
body {
	background-color:#fff;
	font-size:11px;
	font-family:Verdana;
	margin:0;
	padding:0;
	color:#555555;
}
/* END - optional */
 
/* PAGINATION */
div.pagination {
	padding: 3px 0 3px 0;
	margin: 0;
}
 
div.pagination a {
	padding: 2px 5px 2px 5px;
	margin: 2px;
	border: 1px solid #AAAADD;
 
	text-decoration: none; /* no underline */
	color: #000099;
}
div.pagination a:hover, div.pagination a:active {
	border: 1px solid #000099;
 
	color: #000;
}
div.pagination span.current {
	padding: 2px 5px 2px 5px;
	margin: 2px;
		border: 1px solid #000099;
 
		font-weight: bold;
		background-color: #000099;
		color: #FFF;
	}
	div.pagination span.disabled {
		padding: 2px 5px 2px 5px;
		margin: 2px;
		border: 1px solid #EEE;
 
		color: #DDD;
	}
/* END - PAGINATION */
</style>
";
// optional CSS display
echo $isi;
// bikin object
$hal = new JinPagination;
// setup paginasi
$hal->setOption("tabel", "jaw_airport"); // nama tabel database
$hal->setOption("where", "WHERE `cek_aktif`='1'"); // where kondisi, kosongkan jika tidak memakai WHERE
$hal->setOption("limit", "10"); // LIMIT tampilan per halaman
$hal->setOption("order", "ORDER BY `code` DESC"); // urutan, kosongkan jika tidak memakai urutan
$hal->setOption("page", $_REQUEST["page"]); // setup untuk ambil variable angka halaman (berguna jika menggunakan SEO url, ubah sesuai dgn kebutuhan)
$hal->setOption("web_url_page", "?page="); // setup alamat url (berguna jika menggunakan SEO url, ubah sesuai dgn kebutuhan)
// optional setup
$hal->setOption("adjacents", "5"); // tampil berapa angka ke kanan dan ke kiri nya, jika kita diposisi tengah halaman
$hal->setOption("txt_prev", "&laquo; sebelumnya"); // mengubah text "prev" menjadi "sebelumnya"
$hal->setOption("txt_next", "berikutnya &raquo;"); // mengubah text "next" menjadi "berikutnya"
// generate hasil pagination
$hal_array = $hal->build();
// setup penomoran
$no = $hal_array["start"] + 1;
// tampilkan
echo "<h1>Demo Data Pagination</h1>";
echo $hal_array["pagination"]; // tampilkan pagination diatas
echo "<br /><br />";
// data
while($data = mysql_fetch_array($hal_array["hasil"])){
	echo $no . ". " . $data['code'] . " - ".$data['nama']." <br>";
	$no++;
}
echo "<br />";
echo "total: " . $hal_array["total"]; // tampilkan total data
echo $hal_array["pagination"]; // tampilkan pagination dibawah
?>

Demo lainnya: klik disini
Download file contoh script komplit nya:

  class.pagination.rar (2.5 KiB, 893 hits)

semoga bermanfaat… :mrgreen:

Tambahan:

untuk pagination Style, dapat Anda pilih disini: some-styles-for-your-pagination

Continue reading...

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 4.5 out of 5)
Loading ... Loading ...
Popularity: 2,355 views
Tagged with: [ , , ]

How to Protect from double posting insert MySQL

This item was filled under [ Code Snippet, MySQL, PHP ]

Cara untuk supaya proteksi dari double posting suatu form ke dalam database menggunakan tehnik SESSION.
1. Set a session in the form page

session_start();
$_SESSION[post_only_once] = 1;
echo '
 < form method="post">
  Name < input type="text" name="name">
  < input type="submit" value="submit" name="submit">
 < /form>
';

2. Check the session before doing INSERT into MySQL.

if($_SESSION[post_only_once] == 1) {
  // here doing insert to mysql
}
unset($_SESSION[post_only_once]); // remove the session after insert

Continue reading...

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 4.75 out of 5)
Loading ... Loading ...
Popularity: 1,001 views
Tagged with: [ , , ]
Page 1 of 212next »

Halaman ini di eksekusi dalam waktu 1.032 detik! (koneksi mayan bagus nih...)