MYSQL Ufak İpuçları – vol.2

İkinci seri olarak birkaç ip ucu ile devam edelim.
Birinci seri için BURADAN ulaşabilirsiniz.

  • Eski bir tabloda otomatik ID yok ise aşağıdaki komut ile ekleyebilirsiniz;
    • ALTER TABLE `TABLO_ADI` ADD `SUTUN_ADI` INT NOT NULL AUTO_INCREMENT AFTER `HANGI_SUTUNDAN_SONRA`, ADD PRIMARY KEY (`SUTUN_ADI`);
  • Var olan bir Mysql kullanıcısı şifre değiştirme;
    • UPDATE SET USER PASSWORD=PASSWORD(‘YENI_SIFRE‘) WHERE USER=’KULLANICI_ADI‘;
      FLUSH PRIVILEGES;
    • Yetki durumuna göre de şifre değiştirme işlemi yapabilirsiniz;
      • GRAN ALL PRIVILEGES ON DATABASEADI.* TO ‘KULLANICI_ADI‘@’SOURCE_IP‘ IDENTIFIED BY ‘YENI_SIFRE’ with GRANT OPTION;
      • Source IP / Kaynak IP olarak kullanıcı hangi IP den izinli olup olmadığını belirtebilirsiniz. Her yerden bağlanmasını isterseniz “%” ( Yüzde ) işareti koymanız gerekir.

Ek olarak Centos 7 üzerinde MYSQL portuna firewall tarafından izin vermeyi de ekliyorum. Belki lazım olur 🙂

Her yerden izin vermek istediğimizde;
# firewall-cmd –permanent –add-port=3306/tcp
Bu komutun aynısı farklı port açma işlemlerinde de kullanabilirsiniz. Örn : http : 80, https : 443,  ftp : 21, ssh : 22, telnet : 23, dns : 53, ntp : 123 vb.

Özel IP adreslerine izin vermek istediğimizde;
firewall-cmd –permanent –zone=public –add-rich-rule=’ rule family=”ipv4″ source address=”KAYNAK_IP” service name=”mysql” accept’

Bu komuttan sonra işe yaraması için firewall-cmd –reload yapmanız veya servisi tekrar başlatmanız önerilir. En kötü sunucuyu yeniden başlatın 🙂

Yukarıdaki örnekler basit örneklerdir. Fakat sunucu ve arka plan işlemleri ile uğraşanların hemen hemen her konfigürasyonunda kullanmış oldukları, ihtiyaç doğrultusunda keep.google.com gibi yerlerde hızlı ulaşabilmek için saklıyorlardır. En azından ben o şekilde saklıyorum 🙂

PHP ile E-Fatura Mükellefi Sorgulama

Son yıllarda E – Fatura / E – Arşiv muhabbetlerinin döndüğünü biliyorsunuzdur. E-Fatura tarafında yaptığımız bir çalışma üzerinde E-Fatura mükelleflerinin anlık sorgulanması gerektiğini gördük. Bunun için herhangi bir web servis bulamadık. Bundan dolayı kendi web servisimizi yazalım dedik.

Aşağıdaki kod excel çıktısının içerisinde tek seferlik bir text search yaparak cevabını vermekte.  in_string fonksiyonu daha önceden hazırdı. 🙂 ;

function in_string( $string, $val )
{ 
if ( !( strrpos( $string, $val ) === false ) )
return true;
return false;
}

function check_tax( $vkn )
{ 
if( !$vkn || !is_numeric( $vkn ) || !in_array( strlen( $vkn ), array( 10, 11 ) ) )
return false;
set_time_limit( 60 );
$get = file_get_contents("http://sorgu.efatura.gov.tr/kullanicilar/yliste.php?&xls" );
if( !$get )
return false;
$return = false;
if( in_string( $get, $vkn ) )
$return = true;
unset( $get ); // ufak bi temizlik
return $return; 
}
check_tax( 'VERGI_NO' );

Tabiki siz bu işlemi sürekli olarak sorgu.efatura.gov.tr üzerinden çekmek yerine veritabanınıza veya başka bir dosyanıza kaydedip sorgulamalarınızı yapabilirsiniz..

edit : Barış Demir
Bir yazılımcı arkadaşın yardımıyla aşağıdaki kadar olayı basitleştirmiş oldu. Teşekkürler..

function check_cari_tax( $vkn )
{
if( !$vkn )
return 0;
$url = 'http://sorgu.efatura.gov.tr/kullanicilar/yliste.php?ara='.$vkn;
$result = file_get_contents( $url );
if( preg_match( "/".$vkn."/i", $result ) )
return 1;
return 0;
}

 

 

MYSQL Ufak İpuçları – vol.1

Bu seri MYSQL ile ufak ipuçlarını paylaşacağım. Öyle anlar olur ki verilerinizi sakladığınız yerlerde problemler, analiz etmeniz gereken zıpçıktılar vs. olabilir.
Benimde özel notlarımın arasındakileri sizlerle paylaşıyor olacağım.

Aşağıdaki komut genellikle linux CLI tarafında kullanılmaktadır. Sunucudaki tüm veritabanlarını ve tabloları kontrol edip optimizasyon / uyarlama işlemlerini gerçekleştirir. Ek parametreleri ile birkaç kullanım örneğini aşağıdaki gibidir;
#   mysqlcheck –all-databases –optimize

Tek bir tablo için;
 mysqlcheck VERITABANIADI TABLOADI
Tek bir veritabanı fakat tüm tablolar için;
#   mysqlcheck VERITABANIADI
Tüm veritabanları ve tablolar için;
#   mysqlcheck –all-databases 

Bu komut ile veritabanınızın ufak da olsa bakımını sağlayabilirsiniz. Crush olmuş veritabanızı da kurtarma ihtimaliniz yüksektir.
Başlangıç olarak burada bırakıyorum. Çok daha farklı ve işe yarar komutlar var. Zaman buldukça onları da paylaşmaya çalışacağım.

Sublime Text 3 Üzerinde PHP İle PHP Build Etme

Bir önceki yazımda ( Sublime Text 3 Üzerinde Node İle Javascript Build Etme ) Javascript için ufak bir geliştirme yapmıştık. Şimdi ise PHP için yapalım.

Yine Javascript’te olduğu  gibi PHP’de de  CTRL+B komutu ile işlemler yürüyor. Tek fark olarak dosya bazlı Build işlemi gerçekleştiği için tüm script çalışmayabilir.  Framework kullanıyorsanız bahsettiğim gibi sadece o sayfa derlenir Syntax hatası olup olmadığını görebilir.

Fakat PHP öğrenmeye yeni başlayanlar veya ufak tefek kod parçalarını test etmek için gerçekten güzel bir uygulama. Denemenizi tavsiye ederim..

Okumaya devam et “Sublime Text 3 Üzerinde PHP İle PHP Build Etme”

Sublime Text 3 Üzerinde Node İle Javascript Build Etme

Javascript & Node.js ile yazılım hayatımıza heyecan katmaya devam ederken bunları yazmakta kullandığım malum editor Sublime Text 3

ST3 ( Sublime Text 3 ) ile uzaktan geliştirme yaptığım için ( FTP / WINSCP ) genelliklede canlı sistemler üzerinde çalıştığım için javascript tarafında dosyayı upload edene kadar Syntax ( kodlama ) hatalarını gözden kaçırıyoruz. Bunun için nette araştırmalarım sonucu aşağıdaki işlemleri yaptığımızda ST3 üzerinde CTRL + B ile build ederek hızlıca syntax hatalarınızı görüyorsunuz. Hatta development durumundayken yaptığınız console.log işlemlerinizi de hızlıca görmenizi sağlıyor. Tabi ki yeterli değil fakat bir çok olayın / hatanın önüne geçmenizi sağlıyor.. Okumaya devam et “Sublime Text 3 Üzerinde Node İle Javascript Build Etme”

Chrome Javascript ile Barkod / QR Okuyucu Problemi

Standart el terminalleri ve barkod okuyucular ile stok / depo takibi yaptığımız bir sistem üzerinde yeni nesil teknoloji olan QR ( kare kod ) okutma sırasında problemler yaşadık.
Problem el terminalinin QR KOD u okuması sonrasında Chrome üzerinde CTRL+J yapması. Chrome üzerinde indirilenler sayfası açılmakta ve aynı zamanda QR içerisinde New Line yani enter ( \n ) özelliğini pas geçiyordu.

Aşağıdaki Javascript Kod parçacığı ile birlikte bu problemin üstesinden geldik. Bizim canımız yandı sizinkiler yanmasın;


window.document.getElementById( 'collect_seri' ).addEventListener('keydown', function(event)
    {
    console.log( event );
    if( event.keyCode == 13 || event.keyCode == 17 ||  event.keyCode == 74 )
{
if( event.keyCode == 13 || event.keyCode == 17 )
$( '#collect_seri' ).val( $( '#collect_seri' ).val()+"\n" );
if( event.ctrlKey != false )
event.preventDefault();
return;
}
    });

“collect_seri” ID li nesne textarea nesnesidir. Siz problem yaşadığınız nesne veya nesnelere işlem yapabilirsiniz.

Jquery DataTable Dropdown Problemi

Projelerinizde Jquery DataTable kullanıyorsanız ve datatable içerisinde de dropdown menüler kullanıyorsanız problemler yaşayabilirsiniz.
Problem; mobil olarak web sayfanızı açtığınızda dropdown menülerin açık ve kapatılamaz olmasıdır.
Aşağıdaki kod satıları ile bu problemin üstesinden geldik fakat mantık hatasından dolayı çift tıklayıp ( iki kere ekrana bastıktan sonra ) etkileşime geçmektedir. Düzeltip kullanabilirsiniz .

<script type="text/javascript">
$( document ).ready( function()
{
if ( $(window).width() <= 768 )
{
var open_drop_menu = '<style id="wi_style_id">@media (max-width: 768px) { .dropdown-menu,.table.dataTable>tbody>tr.child ul.dropdown-menu{display: none !important;} }</style>';

$( 'head' ).append( open_drop_menu );

setTimeout( function()
{
$( document ).delegate( '.dropdown-toggle', 'click', function()
{
if( $( 'style#wi_style_id' ).length > 0 )
$( 'style#wi_style_id' ).remove();
else
$( 'head' ).append( open_drop_menu );
} );

}, 2557 );
}
});
</script>

PHP ile Firebase Realtime Database Veri Ekleme

Realtime ( gerçek zamanlı ) olarak uyarı sistemi kullandığımız bir projede yazılımcı bir arkadaşın yardımlarıyla Firebase Realtime Database üzerine PHP CURL ile verileri eklemeyi başardık. 🙂

Kod bloğu aşağıdaki gibidir.

&lt;?php
private function firebase_update( $data )
{
$data = json_encode( $data );

$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL =&gt; "https://UYGULAMAHAVUZU.firebaseio.com/TABLOADI.json",
CURLOPT_RETURNTRANSFER =&gt; true,
CURLOPT_ENCODING =&gt; "",
CURLOPT_MAXREDIRS =&gt; 10,
CURLOPT_TIMEOUT =&gt; 30,
CURLOPT_HTTP_VERSION =&gt; CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST =&gt; "PATCH",
CURLOPT_POSTFIELDS =&gt; $data,
CURLOPT_HTTPHEADER =&gt; array(
"Cache-Control: no-cache",
"Content-Type: application/json",
"Postman-Token: 99d8fc6b-d20e-43a0-93e6-5e04350ff449"
),
));
$response = curl_exec($curl);
curl_close($curl);
}
?&gt;

UYGULAMAHAVUZU -> Firebase tarafından size verilir.
TABLOADI -> Tablo adı değil fakat JSON verisi olarak KEY değeri diyebiliriz.

Farklı KEY ler oluşturup birden fazla tablo varmış gibi davranabilirsiniz.
Yukarıdaki işlemde RealTime database ayarlarında kurallar aşağıdaki gibi olmalıdır.

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */  "rules": {
    ".read": true,
    ".write": true
  }
}