[Yii 2]Menampilkan dan Input tanggal ke Mysql

Oktober 11, 2016

OK langsung aja yaa, naa biasanya klo mau menginputkan tanggal di mysql format standar mysql adalah yyyy-mm-dd , sedangkan inputan kita tanggal di halaman web formatnya dd-mm-yyyy , dan juga biasanya kalau menampilkan tanggal dari database yang muncul formatnya yyyy-mm-dd bukan dd-mm-yyyy, maka dari itu kita harus mengubahnya di model , berikut sintaxnya


public function afterFind ()
{
// Tampil dengan format DMY
$this->tanggal = strtotime ($this->tanggal);
$this->tanggal = date ('d-m-Y', $this->tanggal);

parent::afterFind ();
}

public function beforeValidate ()
{
// simpan dengan format YMD
$this->tanggal = strtotime ($this->tanggal);
$this->tanggal = date ('Y-m-d', $this->tanggal);

return parent::beforeValidate ();
}

Ok tarus sintak itu di model yang ada field tanggalnya 🙂 ok mg sukses selalu buat kalian 🙂


Membuat paging sederhana di Yii2 dengan DAO

Oktober 2, 2016

OK , yaa dengan DAO , hanya untuk mengingat pribadi aja sih, beberapa kali lupa, beberapa kali juga buka documentasi 😀 , semuanya ada di doc nya sih, langsung aja, hanya untuk nubi seperti saya aja 🙂 kasusnya saya ada bebearpa query yang menggunakan DAO untuk menampilkan data didalam gridview, naa di dalam controller, tepatnya (default) ada di actionIndex, saya gunakan sederhannya


$sql = {disini query sql};

$sqlcount = "select count(*) from .... ";

$count = Yii::$app->db->createCommand($sqlcount)->queryScalar();

$pagination = new \yii\data\Pagination(['totalCount' => $count]); //Buat Jumlah paging

$dataProvider = new \yii\data\SqlDataProvider([
'sql' => $sql,
'params' => [':thnbln' => $thnbln], //jika menggunakan parameter
'totalCount' => $count,
'pagination' => [
'pageSize' => 10, ], //jumlah record yang ditampilkan perpage
]);

return $this->render('index', [
'dataProvider' => $dataProvider,
'pagination'=>$pagination

]);

 

naa dalam view index.php


use yii\widgets\LinkPager;

...

...

<div id="custom-pagination">
<?=
LinkPager::widget([ 'pagination' => $pagination,]);
?>
</div>

udah selesai begitu aja master :D, mohon maaf jika ada salah 🙂 tolong perbaiki dan kasih saya saran yang terbaik 😀


[Gammu dan VFP] Mengirim dan menerima Pesan lebih dari 160 karakter

September 4, 2016

OK langsung aja yaa, cara menerima dan mengirim sms dengan gammu yang karakternya lebih dari 160, bagaimana implemntasinya di foxpro, gampang aja

Capture

pertama, untuk kirim sms


lcNope=ALLTRIM(Thisform.text1.Value)
lnSms=Len(Thisform.edit1.Value)

i=0
If lnSms >160
lcPesan =Alltrim(Thisform.edit1.Value)
*total Sms
lnByk = CEILING(lnSms/153)

=SQLExec(Thisform.konek,"SHOW TABLE STATUS LIKE 'outbox'","mOutbox")
Select mOutBox
lcId=VAL(mOutBox.Auto_increment)

For i=1 To lnByk
If i=1
lcPesanSplit = Substr(lcPesan,1,153)
lcPesan=SUBSTR(lcPesan,154)
lcudh= "050003A7"+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

TEXT TO lcsql NOSHOW TEXTMERGE PRETEXT 7
INSERT INTO outbox (DestinationNumber, UDH, TextDecoded,ID, MultiPart,CreatorID)
VALUES ('<<lcnope>>', '<<lcudh>>', '<<lcPesanSplit>>','<<lcID>>', 'true','Gammu')
ENDTEXT

lnh=SQLexec(Thisform.konek,lcsql)
IF lnh <0
AERROR(laerror)
MESSAGEBOX(laerror[1,2])
endi
Else
lcPesanSplit=Substr(lcPesan,1,153)
lcPesan=SUBSTR(lcPesanSplit,154)
lcudh= "050003A7"+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

TEXT TO lcsql NOSHOW TEXTMERGE PRETEXT 7
INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition)
VALUES ('<<lcUdh>>', '<<lcPesanSplit>>','<<lcId>>' ,' <<i>>')
ENDTEXT
lnh=SQLexec(Thisform.konek,lcsql)
IF lnh <0
AERROR(laerror)
MESSAGEBOX(laerror[1,2])
ENDIF
Endif
Endf

ENDIF

kedua, menerima/membaca inbox yang lebih dari 160 karakter


SELECT inbox
ZAP

=SQLEXEC(thisform.konek,"select * from inbox","mInbox")
SELECT * FROM mInbox INTO CURSOR TempInbox READWRITE
SELECT mInbox
SCAN
lcNope = SenderNumber
lcUDH = UDH

IF !EMPTY(lcUDH)

*Header UDH
lcHeader = SUBSTR(lcUdh,1,8)

*Total SMS
lcSplit=SUBSTR(lcUDH,9,2)
m=0
i=0
FOR i=1 TO INT(val(lcSplit))
lcUdhx = lcHeader+lcSplit+PADL(ALLTRIM(STR(i)),2,"0")
SELECT * FROM TempInbox WHERE senderNumber=lcNope AND UDH=lcUDHx INTO CURSOR InboxUDH

IF RECCOUNT("InboxUDH")>0
m=m+1
ENDIF
endf
lctext=""
IF m=INT(val(lcSplit))
FOR j=1 TO m
lcUdhx = lcHeader+lcSplit+PADL(ALLTRIM(STR(j)),2,"0")
SELECT * FROM TempInbox WHERE senderNumber=lcNope AND UDH=lcUDHx INTO CURSOR InboxUDH

SELECT inBoxUDH
lcNope = inboxUDH.senderNumber
lcText= lctext+inBoxUDH.Textdecoded
ldTgl=inboxUDH.ReceivingDateTime
lcId=inboxUDH.id
DELETE from TempInbox where id=lcId
* =SQLEXEC(thisform.konek,"DELETE from inbox where id=?lcId")
endf
INSERT INTO Inbox values(lcnope,lctext,ldTgl)

ENDIF
ENDIF
ends
SELECT inbox
GO top
thisform.grid1.Refresh

OK berikut saya sertakan formnya https://www.dropbox.com/s/gmweh2nxg01hayy/SmsGammu.rar?dl=0

 

[Tambahan]

sesuai penjelasan di blog om http://blog.rosihanari.net/teknik-mengirim-long-text-sms-gammu-dengan-query-sql/
yaitu tentang format UDH adalah “AAAAAAAA XX YY”, yang mana “AAAAAAA”  adalah format random hexadecimal, pertanyaannya bagaimana membuat format random hexadecimal?

ok berikut copasnya, bikin function

FUNCTION DecToHex
PARAMETERS liDecNumber
lsHexNumber = ""
IF liDecNumber > 0 && It's not negative, so do a straight TRANSFORM.
lsHexNumber = TRANSFORM(liDecNumber, "@0")
ELSE

*-- The number is negative, so we'll have to do a little more work,
*-- since it's not as straight forward as converting and adding a
*-- minus sign.

*-- Find the length of the resulting hex string.
lsHexNumber = TRANSFORM(ABS(liDecNumber), "@0")
IF SUBSTR(lsHexNumber, 3, 1) = "0" && The number has filled the
&& eight places of DWORD.
liLength = LEN(SUBSTR(lsHexNumber, NotAt("0", lsHexNumber, 2)))
ELSE
*-- Subtract to account for "0x".
liLength = LEN(TRANSFORM(ABS(liDecNumber), "@0")) - 2
ENDIF

lsTempHex = 0xFFFFFFFF
lsHexNumber = TRANSFORM(lsTempHex-ABS(liDecNumber) + 1, "@0")
ENDIF
RETURN lsHexNumber

selanjutnya edit tombol kirim,yang mana sebelumnya cuma statis yaitu “050003A7” , jadi dinamis dengan merubah jadi begini


lcHex =RIGHT(Dectohex(RAND()*100),2)
lcUDH1="050003"+lcHex

...

...

..

for i=1 to lnByk

...

if  i=1

....

lcudh= lcUDH1+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

else

.....

lcudh= lcUDH1+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

....

endif

endfor

Ok, silahkan dicopas aja, mg sukses selalu kawan


Upload File (Image) menggunakan Foxpro+PHP ke Hosting

September 3, 2016

Ok langsung aja, biasanya kita menggunakan FTP untuk melakuakn transfer file terutama image lah, tp bagaimana jika dilakukan tanpa FTP tapi kita menggunakan Php sebagai jalan alternatifnya, yaa kita bisa menggunakan webservice salah satunya, tp saya tidak melakukan itu (saya gagal maaf nubi), tp saya muncul ide melakukan dengan cara berbeda, yaitu memanfaatkan olebrowser :), ok sukses deh, berikut kodingnya sederhananya

pertama, pastinya bikin dulu formnya beserta ole browsernya

1

kedua, isi sintax di command button

with thisform.obrowser
.navigate("http://bumiantaludin.co.nf/sdmk/index.php")
do while .busy or .readystate#4
enddo
inkey(1)
with .document
.getElementbyId("upload").click
thisform.text1.Value=.getElementbyId("upload").value
.getElementbyId("uploadimg").click
endwith

ENDWITH

ketiga, bikin file uploadnya kasih namanya index.php,


<?php
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['upload']['name']);
if(move_uploaded_file($_FILES['upload']['tmp_name'], $target_path)) {
echo "Nama File ". basename( $_FILES['upload']['name']).
" Sukses Di Upload";
} else{
echo "Upload Error, Coba sekali lagi Brow!";
}
?>
<html>
<body>
<form enctype="multipart/form-data" action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post">

<p>File: <input type="file" id="upload" name="upload" /></p>
<p><input type="submit" name="uploadimg" id="uploadimg" value="Post" /></p>
</form>
<body>
</html>

pastikan anda sudah membuat folder upload

ok coba kita running deh

coba klik bottonnya, pilih file imagenya

Capture

dan sukses terupload sempurna

Silahkan dkreasi sendiri,OK sukses 🙂


Tips 1 Line di Detail Report Foxpro

Agustus 24, 2016

Bingung mau kasih judul apa 😀 pokonya liat aja deh maksud dan tujuannya hihi, berikut penjelasan singkatnya, Ok rencana mau bikin report dengan tampilan begini

x

dan pengennya itu didetail biar dinamis perihalnya bisa aja lebih 1 dan pasalnya juga bisa lebih 1, Ok ,kita desain aja reportnya, ups sebelumnya kita bikin contoh cursor dulu


CREATE CURSOR cData (cKet C(15),cPerihal C(15))

INSERT INTO cData values("Perihal","1. Alamat Saya")
INSERT INTO cData values("Perihal","2. Alamat Temana")
INSERT INTO cData values("Perihal","3. Alamat Siapa Saja")

INSERT INTO cData values("Pasal","1. Pasal 45 Ayat 1")
INSERT INTO cData values("Pasal","2. Pasal 30 Ayat 2")

SELECT cData
REPORT FORM 'report\report1' PREVIEW

naa desain reportnya begini

1

dan klik kanan pada field cKet pilih propertis, pilih print when

2

udah selesai dan hasilnya

2

naa bisa kan 😀