[PHP] – Fungsi untuk generate form secara otomatis


Fungsi ini akan terasa sangat membantu dalam pengembangan aplikasi web, bisa kita bayangkan apabila kita memiliki banyak tabel dalam database aplikasi yang kita buat, kemudian kita harus membuat formnya, baik itu form input, maupun form update dari tabel-tabel tersebut satu persatu, tentunya menguras energi dan otak kita. Berikut adalah fungsi dapat menggenarate form secara dinamis. Cara penggunaannya sebagai berikut, contohnya dalam aplikasi yang kita buat terdapat tabel agenda, selanjutnya untuk menggenerate form secara otomatis kita tinggal mengetikkan perintah dibawah ini :

tampil_form(“select * from agenda”, “proses.php”);

Kini anda dapat membayangkan, betap simpelnya dan mudahnya, karena dengan hanya memanggil fungsi tampil_form diatas, maka form digenerate secara otomatis.

Berikut adalah fungsinya:

function tampil_form($query, $aksi)
{
global $error;
global $data;
global $act;
global $module;
global $tabel;

$qry = mysql_query($query) or die (mysql_error());
$jml_field = mysql_num_fields($qry);

if(strpos($query, ‘WHERE’) != ”)
{
$arr_data = mysql_fetch_array($qry);
}

echo “<form name=’form_$tabel’ method=’post’ action=’$aksi’ enctype=’multipart/form-data’>”;

for($field=0; $field < $jml_field; $field++)
{
// Mendapatkan meta data kolom
$meta_data = mysql_fetch_field($qry, $field);
// Mendapatkan nama kolom
$nama_field = mysql_field_name($qry, $field);
// Mendapatkan tipe kolom
$tipe_field = mysql_field_type($qry, $field);
// Mendapatkan panjang kolom
$panjang_field = mysql_field_len($qry, $field);
// Membuat nama untuk form error
$form_error = $meta_data->name;

// jika pada query terdapat kata WHERE
if(strpos($query, ‘WHERE’) != ”)
{
// Jika kolom tipenya date
if($tipe_field == ‘date’)
{
// explode data tanggal berdasarkan tanda –
$explode_data = explode(‘-‘, $arr_data[$nama_field]);
// simpan ke dalam variabel masing – masing
$data[‘tanggal’]= $explode_data[2];
$data[‘bulan’] = $explode_data[1];
$data[‘tahun’] = $explode_data[0];
}
else
{
// Membuat variabel data (array) dengan indeks nama kolom
// kemudian dilakukan inisialisasi nilai ke variabel yang terbentuk
$data[“$nama_field”] = $arr_data[$nama_field];
}
}

// Cek jika variabel data telah terbentuk
// jika ya buat variabel value dengan nilai dari variabel data
// jika tidak variabel value dikosongkan
isset($data[$nama_field]) ? $value = $data[$nama_field] : $value = ”;
$explode_name = explode(‘_’, $meta_data->name);
$jml_explode_name = count($explode_name);

if($jml_explode_name > 2)
{
$nama_label = ”;
$no_label = 1;

for($i=1; $i < $jml_explode_name; $i++)
{
if($no_label != $i)
{
// Membuat Nama Label
$nama_label .= $explode_name[$i].’ ‘;
}
else
{
// Membuat Nama Label
$nama_label .= $explode_name[$i];
}
}
$nama_label .= ucwords($nama_label);

$nama_tabel2 = ”;
for($j=1; $j < $jml_explode_name; $j++)
{
$jml_gabung += $no_tabel;
if($j > 1 && $j < $explode_name)
{
// Membuat Nama Tabel
$nama_tabel2 .= $explode_name[$i].’_’;
}
else
{
// Membuat Nama Tabel
$nama_tabel2 .= $explode_name[$i];
}
}
// Membuat Nama Tabel
$nama_tabel2 .= $nama_tabel2;
}
elseif($jml_explode_name == 2)
{
// Mebuat Nama Label
$nama_label = ucwords($explode_name[0]).’ ‘.ucwords($explode_name[1]);
// Membuat Nama Tabel
$nama_tabel2 = $explode_name[1];
}
else
{
// Membuat Nama Label
$nama_label = ucwords($explode_name[0]);
// Membuat Nama Tabel
$nama_tabel2= $explode_name[0];
}

// Jika nama kolom tabel itu gambar
if(strstr(mysql_field_name($qry, $field), ‘gambar’))
{
// Jika isi kolom gambar tidak kosong
if(isset($value) && !empty($value))
{
// jika gambar dalam kolom ada pada direktori
if(file_exists(“../img_$tabel/kecil_$value”))
{
// tampilkan gambar dan buat input hidden
echo “<p>
<label for=’gambar’>&nbsp;</label>&nbsp;
<img src=’../img_$tabel/kecil_$value’>
<input type=’hidden’ name=’gambar’ value=’$value’>
</p>”;
}
}
// Membuat input file untuk kolom dengan nama gambar
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’file’ name=’fupload’ id=’fupload’ size=’50’>
</p>”;
// Menampilkan error pada form
//echo isset($error[$form_error]) ? ‘<div class=error>’.$error[$form_error].'</div>’ : ”;
echo isset($error[‘gambar’]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[‘gambar’].'</div>’ : ”;
}

// Jika field nama hari
elseif(strstr(mysql_field_name($qry, $field), ‘hari’))
{
$hari = array(1=> ‘Senin’, ‘Selasa’, ‘Rabu’, ‘Kamis’, ‘Jumat’, ‘Sabtu’, ‘Minggu’);
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<select name=’$nama_field’ id=’$nama_field’ class=’form_input’>
<option value=”>[Pilih Hari]</option>”;
foreach($hari as $indeks_hari=>$value_hari)
{
if($indeks_hari == $value)
{
echo “<option value=’$indeks_hari’ selected>$value_hari</option>”;
}
else
{
echo “<option value=’$indeks_hari’>$value_hari</option>”;
}
}
echo “</select>
</p>”;
echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// input hidden jika multiple key(primary key) dan tipe string
elseif($meta_data->multiple_key == 1 && $meta_data->type == ‘string’)
{
// Membuat input hidden untuk kolom primary key dengan tipe string
echo “<input type=’hidden’ name=’$nama_field’ id=’$nama_field’ value='”.$_SESSION[‘username’].”‘>”;
}

// Input text jika bukan primary key dan bukan foreign key dan type int
elseif(!$meta_data->primary_key && $meta_data->multiple_key != 1 && $meta_data->type == ‘int’)
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’text’ name=’$nama_field’ id=’$nama_field’ value=’$value’ size=’$panjang_field’ maxlength=’$panjang_field’ class=’form_input’>
</p>”;
echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// Membuat select box jika multiple key(foreign key) dan tipe int
elseif($meta_data->multiple_key == 1 && $meta_data->type == ‘int’)
{
//$nama_tabel = strtolower($nama_label);
// ambil data dari tabel yang dirujuk oleh foreign key
$qry2 = mysql_query(“SELECT * FROM $nama_tabel2 ORDER BY id_$nama_tabel2 DESC”) or die (mysql_error());
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<select name=’$nama_field’ class=’form_input’>
<option value=”>[Pilih $nama_label]</option>”;

while($data2=mysql_fetch_array($qry2))
{
if($value == $data2[0])
{
echo “<option value=’$data2[0]’ selected>$data2[1]</option>”;
}
else
{
echo “<option value=’$data2[0]’>$data2[1]</option>”;
}
}
echo “</select>
</p>”;
// Menampilkan error pada form
echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// input hidden jika primary key
elseif($meta_data->numeric && $meta_data->primary_key)
{
echo “<input type=’hidden’ name=’$nama_field id=’$nama_field’ value=’$value’>”;
}

// textarea jika type blob
elseif(strstr(mysql_field_type($qry, $field), ‘blob’ ))
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<textarea name=’$nama_field’ id=’$nama_field’ cols=’50’ rows=’5′ class=’form_input’>$value</textarea>
</p>”;
echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// input text jika type string dan nama field bukan publish, status, level, blokir, dan aktif
// untuk primary key dengan type selain int (Contoh: username)
elseif(strstr(mysql_field_type($qry, $field), ‘string’ ) &&
$nama_field != ‘publish’ &&
$nama_field != ‘status’ &&
$nama_field != ‘level’ &&
$nama_field != ‘blokir’ &&
$nama_field != ‘aktif’ &&
$nama_field != ‘id_session’ &&
$nama_field != ‘sex’ &&
$nama_field != ‘password’)
{
if($panjang_field > 50)
{
$input_size = 50;
}
else
{
$input_size = $panjang_field;
}

echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’text’ name=’$nama_field’ id=’$nama_field’ size=’$input_size’ maxlength=’$panjang_field’ value=’$value’ class=’form_input’>
</p>”;
echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// input text jika type string dan nama field password
elseif(strstr(mysql_field_type($qry, $field), ‘string’ ) && $nama_field == ‘password’)
{
if($panjang_field > 50)
{
$input_size = 50;
}
else
{
$input_size = $panjang_field;
}

echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’password’ name=’$nama_field’ id=’$nama_field’ size=’$input_size’ maxlength=’$panjang_field’ value=” class=’form_input’>
</p>”;
echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// input text jika type string dan nama field
// publish, status, level, blokir, dan aktif
elseif(strstr(mysql_field_type($qry, $field), ‘string’) &&
$nama_field != ‘id_session’ &&
$nama_field != ‘password’ ||
$nama_field == ‘publish’ ||
$nama_field == ‘status’ ||
$nama_field == ‘level’ ||
$nama_field == ‘blokir’ ||
$nama_field == ‘aktif’ ||
$nama_field == ‘sex’ ||
$nama_field == ‘status_kelulusan’)
{

// jika nama field itu level
if($nama_field == ‘level’ ||
$nama_field == ‘status’ ||
$nama_field == ‘sex’)
{
// jika nama tabel(bukan nama field/kolom)
// jika nama tabel kelulusan
if(isset($tabel) && $tabel == ‘kelulusan’)
{
if($value == ‘LULUS’)
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’LULUS’ checked> Lulus
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’TIDAK’> Tidak
</p>”;
}
else
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’LULUS’> Lulus
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’TIDAK’ checked> Tidak
</p>”;
}
}

// jika nama tabel member
elseif(isset($tabel) && $tabel == ‘member’)
{
if($value == ‘P’)
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’P’ checked> P
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’W’> W
</p>”;
}
else
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’P’> P
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’W’ checked> W
</p>”;
}
}

elseif(isset($tabel) && $tabel == ‘status’)
{
if($value == ‘0’)
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’0′ checked> Kosong
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’1′> Terisi
</p>”;
}
else
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’0′> Kosong
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’1′ checked> Terisi
</p>”;
}
}

else
{
if($value == ‘admin’)
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’admin’ checked> Admin
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’user’> User
</p>”;
}
else
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’admin’> Admin
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’user’ checked> User
</p>”;
}
}
}

// selain nama field level
else
{
if($value == ‘Y’)
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’Y’ checked> Y
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’N’> N
</p>”;
}
else
{
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’Y’> Y
<input type=’radio’ name=’$nama_field’ id=’$nama_field’ value=’N’ checked> N
</p>”;
}
}

echo isset($error[$form_error]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[$form_error].'</div>’ : ”;
}

// select jika tipe time
elseif(strstr(mysql_field_type($qry, $field), ‘time’))
{
isset($value) ? $ex_value = explode(‘:’, $value) : ”;
//echo $ex_value[0];
//echo $ex_value[1];
//echo $ex_value[2];
echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<select name=’jam_$nama_field’ class=’form_input’>”;
for($i=1;$i<=24;$i++)
{
$lebar = strlen($i);
switch($lebar)
{
case 1:
{
$t=”0″.$i;
break;
}
case 2:
{
$t=$i;
break;
}
}

if(isset($ex_value[0]) && $ex_value[0] == $t)
{
echo “<option value=’$t’ selected>$t</option>”;
}
elseif(isset($ex_value[0]) && $ex_value[0] == date(‘H’))
{
echo “<option value=’$t’ selected>$t</option>”;
}
elseif(!isset($ex_value) && $t == date(‘H’))
{
echo “<option value=’$t’ selected>$t</option>”;
}
else
{
echo “<option value=’$t’>$t</option>”;
}

}
echo “</select> : <select name=’menit_$nama_field’ class=’form_input’>”;
for($j=0;$j<=59;$j++)
{
$lebar = strlen($j);
switch($lebar)
{
case 1:
{
$u=”0″.$j;
break;
}
case 2:
{
$u=$j;
break;
}
}

if(isset($ex_value[1]) && $ex_value[1] == $u)
{
echo “<option value=’$u’ selected>$u</option>”;
}
elseif(isset($ex_value[1]) && $ex_value[1] == date(‘i’))
{
echo “<option value=’$u’ selected>$u</option>”;
}
elseif(!isset($ex_value) && $j == date(‘i’))
{
echo “<option value=’$u’ selected>$u</option>”;
}
else
{
echo “<option value=’$u’>$u</option>”;
}

}

echo “</select> : <select name=’detik_$nama_field’ class=’form_input’>”;

for($k=0;$k<=59;$k++)
{
$lebar = strlen($k);
switch($lebar)
{
case 1:
{
$v=”0″.$k;
break;
}
case 2:
{
$v=$k;
break;
}
}

if(isset($ex_value[2]) && $ex_value[2] == $v)
{
echo “<option value=’$v’ selected>$v</option>”;
}
elseif(isset($ex_value[2]) && $ex_value[2] == date(‘s’))
{
echo “<option value=’$v’ selected>$v</option>”;
}
elseif(!isset($ex_value) && $v == date(‘s’))
{
echo “<option value=’$v’ selected>$v</option>”;
}
else
{
echo “<option value=’$v’>$v</option>”;
}

}
echo “</select>”;

}

// select jika tipe date
elseif(strstr(mysql_field_type($qry, $field), ‘date’))
{
$nama_bln=array(1=> “Januari”, “Februari”, “Maret”, “April”, “Mei”,
“Juni”, “Juli”, “Agustus”, “September”,
“Oktober”, “November”, “Desember”);

echo “<p>
<label for=’$nama_field’>$nama_label</label>:
<select name=’tanggal_$nama_field’ class=’form_input’>”;

for($tgl=1;$tgl<=31;$tgl++)
{
$lebar = strlen($tgl);
switch($lebar)
{
case 1:
{
$t=”0″.$tgl;
break;
}
case 2:
{
$t=$tgl;
break;
}
}

if(isset($value) && $value == $t)
{
echo “<option value=’$t’ selected>$t</option>”;
}
elseif(isset($value) && $value == date(‘d’))
{
echo “<option value=’$t’ selected>$t</option>”;
}
elseif($t == date(‘d’))
{
echo “<option value=’$t’ selected>$t</option>”;
}
else
{
echo “<option value=’$t’>$t</option>”;
}
}
echo “</select>”;

// Select Box Bulan
echo ” / <select name=’bulan_$nama_field’ class=’form_input’>”;

foreach($nama_bln as $indeks_bulan => $nama_bulan)
{
$lebar = strlen($indeks_bulan);
switch($lebar)
{
case 1:
{
$b=”0″.$indeks_bulan;
break;
}
case 2:
{
$b=$indeks_bulan;
break;
}
}

if(isset($value) && $value == $b || $b == date(‘m’))
{
echo “<option value=’$b’ selected>$nama_bulan</option>”;
}
else
{
echo “<option value=’$b’>$nama_bulan</option>”;
}
}
echo “</select>”;
// Select box tahun
echo ” / <select name=’tahun_$nama_field’ class=’form_input’>”;
for($thn=1980;$thn <= date(‘Y’); $thn++)
{
if(isset($value) && $value == $thn || $thn == date(‘Y’))
{
echo “<option value=’$thn’ selected>$thn</option>”;
}
else
{
echo “<option value=’$thn’>$thn</option>”;
}
}
echo “</select></p>”;
echo isset($error[‘tanggal’]) ? “<div style=’display:block; margin-left:105px; color:#F00′>”.$error[‘tanggal’].'</div>’ : ”;
}
}

// tampilkan tombol submit
echo “<p>
<label for=’submit’>&nbsp;</label>&nbsp;
<input type=’submit’ name=’submit’ value=’Proses’> | <a href=’javascript:history.go(-1)’>Kembali</a>
</p>”;
echo “</form>”;

}
}