Php explode

Merhaba ,

İstenilen değerden öncesini alma

Örneğin ;

Sadece illeri almak istediğimizde;

Ankara/Turkiye

İstanbul/Türkiye

İzmir/Türkiye

 

<?php

$iller=array(‘Ankara/Turkiye’,’istanbul/Turkiye’,’izmir/Turkiye’);

foreach($iller as &$r){
$r = explode(“/”, $r);
echo $r[0];
echo “<br>”;
}

 

mysql id sıralama ve hata code 1175

Mysql ‘ deki amacım test yaptığım veri tabanındaki tablo ‘ nun id ‘sini tekrar sıralamak. Tablonuzun içinde hiç veri yoksa işlem kolay

ALTER TABLE DenemeDb.TestTb AUTO_INCREMENT = 1;

İçinde veri varsa burada hata alıyoruz.

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec

SET SQL_SAFE_UPDATES=0;

SET @count = 0;

UPDATE DenemeDb.TestTb SET TestTb.id = @count:= @count + 1;

SET SQL_SAFE_UPDATES=1;

Bu şekilde istediğimiz tablonun id ‘sini tekrardan 1 den başlayarak sıralıyoruz.

app.config ve web.config şifreleme ve şifre çözümü

İyi Günler

Karşılaştığım sıkıntı,  yazdığım bir uygulamanın içinde bulunan app.config dosyasının içeriklerinin şifrelenmesi ve kullanımıdır.

Kısaca app.config ve web.config , uygulamanın yapılandırma dosyasıdır ve  Xml dosya türündedir . Asıl amacı, projenin dışarıdan değişmesi istenilen değişkenlerini rahatlıkla, tekrar derlemeden değiştirmektir.

Örnek olarak ;

Uygulamamızın kullandığı bir pdf derleyici var. Her seferinde, programın adını ve yolunu kullandığımız her yerde değiştirmekle uğraşacağımıza app.config üzerinde belirterek tekrardan kurtuluruz.


   Kod tarafında,  yolun değişmesi ya da pdf derleyicisinin markası fark etmeden istediğimiz zaman çağırabiliriz.

using System.Configuration

System.Configuration (referansta yoksa ekleyin)

Örnek 2;

Veritabanı’na bağlandığımız connection içeriğini değiştirmek istiyorsak (Veri tabanı adı, ip, port… vb);

Kod tarafında, veritabanına bağlantı yaptığımız her yerde connection ‘ı  değiştirmemiz ve tekrar derlememiz gerekir. Bunun yerine  app.config üzerinde bir kez tanımlayıp kod tarafında belirttiğimiz her yerde kullanabiliriz. Önerilen bu yöntemin faydası, gereksiz kod tekrarından ve tekrar derlemeye ihtiyaç duymadan uygulamamızın çalışmasını sağlamaktır.

app.config :

Kod tarafında erişmek için;

 

 

Asıl sorunumuz ise, App.config içerisinde istediğimiz alanları şifrelemektir (ben connectionString alanın şifrelemek istiyorum).

Şifreleme;

1-Projemizin içindeki app.config dosyanın adını web.config olarak değiştiriyoruz (Değiştirmeden önce bir yedek alınız.İşlem sonunda eski adını geri vereceğiz).

2-  Windows + R (Çalıştır) alanına cmd yazıp çalıştırıyoruz.

3- cmd ekranına   cd C:\Windows\Microsoft.NET\Framework\v2.0.50727   yazarak çalıştırıyoruz.

4- Açılan dosyanın içine,

aspnet_regiis.exe -pef  “xml şifrelemek istenen tag” “projenin web.config yolu”

aspnet_regiis.exe -pef “connectionStrings” “C:\Users\Tosun\Desktop\ConnectToAccountancy\ConnectToAccountancy”  işlemi çalıştıralım.

connectionStrings = şifrelemek istediğimiz tag (Ben veritabanı şifreliyorum);

Sonuç;

5- Adını değiştirdiğimiz app.config eski haline getiriyoruz.

app.config  yada web.config dosyasının içine bakıyoruz. Kod tarafında bir şey yapmamıza gerek kalmadan net framework çözümlüyor

Kod tarafında connectionString bu şekilde erişiyoruz. ConnectionString de “name” verdiğimiz adı unutmayın!!!

string connection=ConfigurationManager.ConnectionStrings["HeroData"].ToString();

 

Şifreyi kaldırma;

 

1- app.config adını web.config olarak değiştiriyoruz.

2- windows + R (Çalıştır) alanına cmd yaz ve çalıştır.

3-  cd C:\Windows\Microsoft.NET\Framework\v2.0.50727   çalıştır.

4- aspnet_regiis.exe -pdf “connectionStrings” “C:\Users\Tosun\Desktop\ConnectToAccountancy\ConnectToAccountancy”

5 -web.config adını app.config tekrar eski halina getirelim. Bu şekilde connectionString tekrar görmemize sağlar.

sql tekrar kayıt bulma

İyi günler

Sql ‘de  tekrar eden kayıtları(mükerrer kayıt) bulma

Örnek bir tablo oluşturalım.

1-Kullanıcı adından bir tablo oluşturup(Şekil – 1) ve içini dolduralım.(Şekil – 2)

Şekil – 1

Şekil – 2

2- Oluşturduğumuz kayıtta tekrar eden kayıtları  ve  adlarını da görmek için alttaki kodu yazalım.

SELECT kullanici.adi, COUNT(kullanici.adi) AS TekrarEdenSayi FROM kullanici

GROUP BY adi

HAVING ( COUNT(adi) > 1 );

 

Sonuç olarak yandaki şekilde dönecektir.

 

 

 

3-Karışık bir tablomuzda tekrar etmeyen kayıtları almak istediğimizde

SELECT * FROM kullanici
GROUP BY adi
HAVING ( COUNT(adi) = 1 );

Mysql (uzak ve yerel ağ) bağlantı sorunu

İyi günler

Mysql’e yerel ağdan ve uzaktan bağlanma sorununu  gidermek için yapılması gerekenler:

1- Mysql’e kurulu olduğu makine sabit ip verilmeli.

2-Mysql’in kurulu olduğu makinada port açıkmı kontrol edilmeli.Bunun için;

Başlat —> çalıştır —> cmd —> netstat –  a  yaparak pcdeki portlar dinlenilir.

connection_1Bende ,3306 portu açık “0.0.0.0:3306” bu şekilde olursa haberleşme gerçekleşiyor demektir.

 

3-  Sql sorgu sayfasında aşağıdaki komutları çalıştıralım. 
(Güvenlik için root dışında başka bir kullanıcı tanımlamak gerekli)

a) GRANT ALL PRIVILEGES ON *.* TO 'kullanıcıadı'@'%' IDENTIFIED BY 'şifre'; 
('%' yazan dış ve ya yerel ip yazılabilir. )

b) FLUSH PRIVILEGES;

4- Bağlantı düzgün çalışabilmesi için root ‘a verilen şifre dışında başka bir şifre verilmeli.

c# Wpf’de Hata Ayıklama


İyi günler

Karşılaştığım sıkıntı Wpf  projemde  hata raporlarını görememek ve istediğim alana kaydedememek.

Çözüm için yapılması gerekenler:

1- Wpf Projemizin App.xaml dosyası açılır.

Hata ayıklamak için DispatcherUnhandledException= “UnhandledException”  Application ‘ın  içine eklenir (Resim 1).

wpfde

                                                 Resim -1

2- Wpf Projemizin App.config dosyasına alttaki satırları ekleyerek  değişkenlerimizi kod dışından da rahat değiştirmemizi sağlıyoruz. (Resim 2)

wpfde3

            
                                                                                  Resim - 2
<appSettings>
<add key="error_file" value="errors.txt" />
<add key="stack_file" value="stack.txt" />
</appSettings>

3- Ardından  App.xaml.cs  açılır ve içerisine alttaki kod eklenir.

using System.Windows.Threading;
using System.IO;
using System.Configuration;// ekli değilse

“ConfigurationManager.AppSettings” çalışmaması  durumunda projenin içindeki References –> Sağ Tuş –> Add reference(Reference ekleme) –> Sağ üstte bulunan arama alanına system.configuration yazılır ve ortaya çıkan sonuç tıklanılarak  OK basılır

wpfde4
Resim – 3

                                                         

private void UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
var time = DateTime.Now;
var path=ConfigurationManager.AppSettings["error_file"]; // kaydedilmek istenilen yer (Bende projenin içine içinde olacak şekilde ayarlı)
File.AppendAllText(path, "\r\n" + string.Format("{0},{1},{2}", time, e.Exception.InnerException.Message, e.Exception.Message) + "\r\n"); //(Kaydedilecek yer  , istenilecek hatalar)
File.AppendAllText(ConfigurationManager.AppSettings["stack_file"], time + ":\n" + e.Exception.StackTrace + "\n");
e.Handled = false;
}

4-Error.txt dosyasını  açalım (Resim 4).

wpfde5

                    Resim – 4

c# wpf textbox içerikleri

İyi günler

Karşılaştığım sıkıntı , WPF Projemde oluşturduğum Textbox ‘ ın istediğim kısıtlamaların ayarlanması.

Bir örnekle açıklayalım.

1- TESTPROJE diye yeni bir proje oluşturalım.

wpf_1i

 

2- Oluşturduğumuz projenin içine TextBox öğesi ekleyelim.

wpf_2

 

3-Oluşturduğumuz Texbox ‘ın  PreviewTextInput(Metin girişini dinlememizi sağlar. PreviewTextInput; konuşma, el yazısı ve diğer giriş aygıtlarını da  dinleyebilir .) event sınıfı ile ilişkilendirelim.

wpf_3

 

4- Textbox ‘ın sadece numara yazmasını istiyorsak oluşturduğumuz ctlOrnekTxt_PreviewTextInput event(Olay) ‘in içine yazıyoruz

Namespace:   System.Text.RegularExpressions
Assembly:  System (in System.dll)

using System.Text.RegularExpressions;

a .  Rakam

private void ctlOrnekTxt_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex(“[^0-9]+”); // Girilebilecek rakam aralığı
e.Handled = regex.IsMatch(e.Text); // Girilen karakterin okunması ve eşleşip ekrana basılmasını sağlar.

/// Doğru yazımı

e.Handled = new Regex(@”[^0-9]+”).IsMatch(e.Text);
}

b. Ondalıklı(Decimal) Sayı  (“.” , “,”) kullanıma göre ayarlanmıştır

private void ctlOrnekTxt_PreviewTextInput(object sender, TextCompositionEventArgs e)

{

Regex regex = new Regex(@”(\+|-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)?”);
e.Handled = !regex.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));

}

c. Sadece harf

private void ctlOrnekTxt_PreviewTextInput(object sender, TextCompositionEventArgs e)

{

e.Handled = new Regex(@”^[0-9\\s]+”).IsMatch(e.Text);

}

d.Sadece harf ve istenilen karaktere izin verilmesi. (alternetif çözüm olarak)

 private void ctlOrnekTxt_PreviewTextInput(object sender, KeyEventArgs e)
 {
 e.Handled = new Regex(@"^[0-9,!\\s]+").IsMatch(e.Text);
 }

  Alternatif çözüm
 private void ctlOrnekTxt_PreviewTextInput(object sender, KeyEventArgs e)
 { 
 e.Handled = !isCharKey(e.Key) && !isPermisionKey(e.Key);
 }

 private bool isCharKey(Key inKey)
 {
 if (inKey < Key.A || inKey > Key.Oem8 )
 {
 
 if (inKey < Key.NumPad0 || inKey > Key.NumPad9)
 {
 return false;
 }
 }
 return true;
 }
 private bool isPermisionKey(Key inKey)
 {
 return inKey == Key.Delete || inKey == Key.Back 
     || inKey == Key.Tab || inKey ==Key.Space;
 }


wpf_4