Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
Insert file berekstensi .dat kedalam database
Saya sudah dapat menjalankan import file .dat kedalam tabel di database. Yang jadi masalah bagaimana cara membedakan pemisah (explode) menggunakan "spasi" dengan "tabulasi". File .dat saya menggunakan 2 macam pemisah tersebut. yang jadi permasalah adalah pemisah "tabulasi" tersebut, sehingga kalimat sebelum tabulasi dengan sesudahnya ter-record didalam 1 kolom.
berikut file .dat yang saya miliki,
1001 2021-01-05 11:36:13 1 0 1 0
1001 2021-01-05 11:37:44 1 0 1 0
1001 2021-01-05 11:45:43 1 0 1 0
1001 2021-01-05 11:46:19 1 0 16 0
1001 2021-01-05 11:46:51 1 0 2 0
sehingga apabila saya insert into tabel, maka yang masuk kedalam tabel seperti berikut,
1001 2021-01-05
perhatikan pada angka 1001 dengan 2021-01-05 dipisahkan dengan tabulasi pada file .dat nya sehingga setelah terecord di tabel ditempatkan didalam 1 kolom yang sama, tidak terpisah ke masing-masing kolom yang ditentukan.
Berikut adalah script php yang saya gunakan,
<?php
include "../../koneksi.php";
//Upload File
if (isset($_POST['submit'])) {
if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
}
$handle = fopen($_FILES['filename']['tmp_name'], "r");
if ($handle) {
$hostname1 = 'localhost';
$username1 = 'root';
$password1 = 'rootroot';
$database1 = 'simp';
$con = mysqli_connect($hostname1, $username1, $password1, $database1);
//$con = new mysqli($db_hostname, $db_username, $db_password, $db_databasename);
while (($line = fgets($handle)) !== false) {
// process the line read.
$line_exp = explode(" ", $line);
foreach($line_exp as $row){
$row = explode(' ',$row);
foreach($row as $cell){
echo $cell;
$userid = $line_exp[5];
$tanggal = $line_exp[1];
$jam = $line_exp[2];
$uid = $line_exp[3];
$role = $line_exp[4];
$jenis = $line_exp[5];
$pass = $line_exp[6];
$stmt = $con->prepare("INSERT into upload_tb(userid, tanggal, jam, uid, role, jenis, pass) values(?,?,?,?,?,?,?)");
$stmt->bind_param("sssssss", $userid, $tanggal, $jam, $uid, $role, $jenis, $pass);
$stmt->execute();
}
}
}
$stmt->close();
fclose($handle);
} else {
// error opening the file.
}
}
$aksi="module/upload/upload_aksi.php";
switch($_GET[aksi]){
default:
?>
pada codingan diatas, saya coba tambahkan foreach untuk spasi dan tabulasi tetapi tidak berguna/hasil masih seperti yang sebelumnya.
apakah ada saran selain penggunaan explode() ? sepertiĀ preg_split() atauĀ str_split() atauĀ str_word_count()Ā atau yang lainnya?
Tanggapan
saya kurang paham. Yang sekarang terjadi apa? dan yang dimau apa? boleh kasih contoh kondisi tabel sekarang
1 Jawaban:
<div>saya sudah ketemu dengan solusinya,<br>ganti script berikut,</div><pre>while (($line = fgets($handle)) !== false) { // process the line read. $line_exp = explode(" ", $line); foreach($line_exp as $row){ $row = explode(' ',$row); foreach($row as $cell){ echo $cell; $userid = $line_exp[5]; $tanggal = $line_exp[1]; $jam = $line_exp[2]; $uid = $line_exp[3]; $role = $line_exp[4]; $jenis = $line_exp[5]; $pass = $line_exp[6]; $stmt = $con->prepare("INSERT into upload_tb(userid, tanggal, jam, uid, role, jenis, pass) values(?,?,?,?,?,?,?)"); $stmt->bind_param("sssssss", $userid, $tanggal, $jam, $uid, $role, $jenis, $pass); $stmt->execute(); } } }</pre><div>sehingga menjadi berikut,</div><pre>while (($line = fgets($handle)) !== false) { // process the line read. $userid= substr($line, 5, 4); $tanggal = substr($line, 10, 10); $jam = substr($line, 21, 8); $uid = substr($line, 30, 1); $role = substr($line, 32, 1); $jenis = substr($line, 34, 2); $pass = substr($line, 37, 1); $stmt = $con->prepare("INSERT into upload_tb(userid, tanggal, jam, uid, role, jenis, pass) values(?,?,?,?,?,?,?)"); $stmt->bind_param("sssssss", $userid, $tanggal, $jam, $uid, $role, $jenis, $pass); $stmt->execute(); }</pre><div><br>Inti nya saya menggunakan substr() dikarenakan file .dat tidak menggunakan pemisah yang berkarakter didalam file tersebut, hanya menggunakan spasi atau tabulasi sehingga kita harus menghitung mulai karakter keberapa hingga berapa banyak karakter yang diinginkan, berbeda dengan file .csv yang didalam file memiliki pemisah yang berkarakter seperti koma(,) ataupun titik koma(;)</div>