Bir web site oluştururken kayıt esnasında ülke bilgisi istememiz gerekebiliyor. Bu iş için tasarlanmış bir liste göremediğim için böyle bir liste oluşturmaya karar verdim. Bu makale altında bir ülke listesi, bu ülkelerin bayrakları ve aynı zamanda bu ülke listesini PDO ile veritabanına aktarma işlemlerine göz atacağız.
Var olan ülke listemizi uzun olarak vermek gerekirse;
Ülke Listesi
AD@andorra@Andorra
--AE@united arab emirates@Birleşik Arap Emirlikleri
--AF@afghanistan@Afganistan
--AG@antigua and barbuda@Antigua ve Barbuda
--AI@anguilla@Anguilla
--AL@albania@Arnavutluk
--AM@armenia@Ermenistan
--AO@angola@Angola
--AQ@antarktika@Antarktika
--AR@argentina@Arjantin
--AS@american samoa@Amerikan Samoası
--AT@austria@Avusturya
--AU@australia@Avustralya
--AW@aruba@Aruba
--AZ@azerbaijan@Azerbaycan
--BA@bosnia and herzegovina@Bosna-Hersek
--BB@barbados@Barbados
--BD@bangladesh@Bangladeş
--BE@belgium@Belçika
--BF@burkina faso@Burkina Faso
--BG@bulgaria@Bulgaristan
--BH@bahrain@Bahreyn
--BI@burundi@Burundi
--BJ@benin@Benin
--BL@st barts@Saint Barthelemy
--BM@bermuda@Bermuda
--BN@brunei@Brunei
--BO@bolivia@Bolivya
--BR@brazil@Brezilya
--BS@bahamas@Bahamalar
--BT@bhutan@Bhutan
--BV@bouvet island@Bouvet Adası
--BW@botswana@Botsvana
--BY@belarus@Beyaz Rusya
--BZ@belize@Belize
--CA@canada@Kanada
--CC@cocos island@Cocos (Keyling) Adaları
--CD@democratic republic of congo@Demokratik Kongo Cumhuriyeti
--CF@central african republic@Orta Afrika Cumhuriyeti
--CG@republic of the congo@Kongo Cumhuriyeti
--CH@switzerland@İsviçre
--CI@ivory coast@Fildişi Sahili
--CK@cook islands@Cook Adaları
--CL@chile@Şili
--CM@cameroon@Kamerun
--CN@china@Çin
--CO@colombia@Kolombiya
--CR@costa rica@Kosta Rika
--CU@cuba@Küba
--CV@cape verde@Yeşil Burun Adaları
--CW@curacao@Curaçao
--CY@Cyprus@Kıbrıs
--CZ@czech republic@Çek Cumhuriyeti
--DE@germany@Almanya
--DJ@djibouti@Cibuti
--DK@denmark@Danimarka
--DM@dominica@Dominika
--DO@dominican republic@Dominik Cumhuriyeti
--DZ@algeria@Cezayir
--EC@ecuador@Ekvador
--EE@estonia@Estonya
--EG@egypt@Mısır
--EH@sahrawi arab democratic republic@Batı Sahra
--ER@eritrea@Eritre
--ES@spain@İspanya
--ET@ethiopia@Etiyopya
--FI@finland@Finlandiya
--FJ@fiji@Fiji
--FK@falkland islands@Falkland Adaları (Islas Malvinas)
--FM@micronesia@Mikronezya Federal Devletleri
--FO@faroe islands@Faroe Adaları
--FR@france@Fransa
--GA@gabon@Gabon
--GB@united kingdom@Birleşik Krallık
--GD@grenada@Grenada
--GE@georgia@Gürcistan
--GG@guernsey@Guernsey
--GH@ghana@Gana
--GI@gibraltar@Cebelitarık
--GL@greenland@Grönland
--GM@gambia@Gambiya
--GN@guinea@Gine
--GQ@equatorial guinea@Ekvator Ginesi
--GR@greece@Yunanistan
--GT@guatemala@Guatemala
--GU@guam@Guam
--GW@guinea bissau@Gine-Bissau
--GY@guyana@Guyana
--HK@hong kong@Hong Kong
--HN@honduras@Honduras
--HR@croatia@Hırvatistan
--HT@haiti@Haiti
--HU@hungary@Macaristan
--ID@indonesia@Endonezya
--IE@ireland@İrlanda
--IL@israel@İsrail
--IM@isle of man@Man Adası
--IN@india@Hindistan
--IO@british indian ocean territory@Britanya Hint Okyanusu Toprakları
--IQ@iraq@Irak
--IR@iran@İran
--IS@iceland@İzlanda
--IT@italy@İtalya
--JE@jersey@Jersey
--JM@jamaica@Jamaika
--JO@jordan@Ürdün
--JP@japan@Japonya
--KE@kenya@Kenya
--KG@kyrgyzstan@Kırgızistan
--KH@cambodia@Kamboçya
--KI@kiribati@Kiribati
--KM@comoros@Komorlar
--KN@saint kitts and nevis@Saint Kitts ve Nevis
--KP@north korea@Kuzey Kore
--KR@south korea@Güney Kore
--KW@kwait@Kuveyt
--KY@cayman islands@Cayman Adaları
--KZ@kazakhstan@Kazakistan
--LA@laos@Laos
--LB@lebanon@Lübnan
--LC@st lucia@Saint Lucia
--LI@liechtenstein@Lihtenştayn
--LK@sri lanka@Sri Lanka
--LR@liberia@Liberya
--LS@lesotho@Lesotho
--LT@lithuania@Litvanya
--LU@luxembourg@Lüksemburg
--LV@latvia@Letonya
--LY@libya@Libya
--MA@morocco@Fas
--MC@monaco@Monako
--MD@moldova@Moldova
--ME@montenegro@Karadağ
--MG@madagascar@Madagaskar
--MH@marshall island@Marshall Adaları
--MK@republic of macedonia@Makedonya
--ML@mali@Mali
--MM@myanmar@Burma
--MN@mongolia@Moğolistan
--MO@macao@Makao
--MP@northern marianas islands@Kuzey Mariana Adaları
--MQ@martinique@Martinique
--MR@mauritania@Moritanya
--MS@montserrat@Montserrat
--MT@malta@Malta
--MU@Mauritius@Mauritius
--MV@maldives@Maldivler
--MW@malawi@Malavi
--MX@mexico@Meksika
--MY@malasya@Malezya
--MZ@mozambique@Mozambik
--NA@namibia@Namibya
--NC@new caledonia@Yeni Kaledonya
--NE@niger@Nijer
--NF@norfolk island@Norfolk Adası
--NG@nigeria@Nijerya
--NI@nicaragua@Nikaragua
--NL@netherlands@Hollanda
--NO@norway@Norveç
--NP@nepal@Nepal
--NR@nauru@Nauru
--NU@niue@Niue
--NZ@new zealand@Yeni Zelanda
--OM@oman@Umman
--PA@panama@Panama
--PE@peru@Peru
--PF@french polynesia@Fransız Polinezyası
--PG@papua new guinea@Papua Yeni Gine
--PH@philippines@Filipinler
--PK@pakistan@Pakistan
--PL@poland@Polonya
--PN@pitcairn islands@Pitcairn Adaları
--PR@puerto rico@Porto Riko
--PS@palestine@Filistin
--PT@portugal@Portekiz
--PW@palau@Palau
--PY@paraguay@Paraguay
--QA@qatar@Katar
--RO@romania@Romanya
--RS@serbia@Sırbistan
--RU@russia@Rusya
--RW@rwanda@Ruanda
--SA@saudi arabia@Suudi Arabistan
--SB@solomon islands@Solomon Adaları
--SC@seychelles@Seyşeller
--SD@sudan@Sudan
--SE@sweden@İsveç
--SG@singapore@Singapur
--SI@slovenia@Slovenya
--SK@slovakia@Slovakya
--SL@sierra leone@Sierra Leone
--SM@san marino@San Marino
--SN@senegal@Senegal
--SO@somalia@Somali
--SR@suriname@Surinam
--SS@south sudan@Güney Sudan
--ST@sao tome and prince@Sao Tome ve Principe
--SV@el salvador@El Salvador
--SX@sint maarten@Saint Martin
--SY@syria@Suriye
--SZ@swaziland@Svaziland
--TC@turks and caicos@Turks ve Caicos Adaları
--TD@chad@Çad
--TG@togo@Togo
--TH@thailand@Tayland
--TJ@tajikistan@Tacikistan
--TK@tokelau@Tokelau
--TL@east timor@Doğu Timor
--TM@turkmenistan@Türkmenistan
--TN@tunisia@Tunus
--TO@tonga@Tonga
--TR@turkey@Türkiye
--TT@trinidad and tobago@Trinidad ve Tobago
--TV@tuvalu@Tuvalu
--TW@taiwan@Tayvan
--TZ@tanzania@Tanzanya
--UA@ukraine@Ukrayna
--UG@uganda@Uganda
--UN@united nations@Birleşmiş Milletler
--US@united states of america@Amerika Birleşik Devletleri
--UY@uruguay@Uruguay
--UZ@uzbekistn@Özbekistan
--VA@vatican city@Vatikan
--VC@st vincent and the grenadines@Saint Vincent ve Grenadinler
--VE@venezuela@Venezuela
--VG@british virgin islands@Britanya Virjin Adaları
--VI@virgin islands@Virjin Adaları
--VN@vietnam@Vietnam
--VU@vanuatu@Vanuatu
--WS@samoa@Samoa
--XK@kosovo@Kosova
--YE@yemen@Yemen
--ZA@south africa@Güney Afrika
--ZM@zambia@Zambiya
--ZW@zimbabwe@Zimbabve
A. Dizi Üzerinden Listeleme
Bu ülke listesi üzerinden işlemler yapacağız. Listemizde hem Türkçe ülke adları hem İngilizce ülke adları hem de ülke kısaltmaları yer almaktadır. İlk olarak bu ülkelerin bayraklarına şu linkten ulaştım. Buradaki tüm bayrak simgelerini bilgisayarınıza indirin. Üye girişi yaparak sağ üst kısımda yer alan Download Pack butonuna tıklamanız yeterli olacaktır. İndirdiğimiz dosya şöyle görünecektir;
Burda bizim kullanacağımız dosyamız png dosyası. Fakat içerisinde eksik bir kaç bayrak yer alıyor. Buraya tıklayarak indirdiğiniz bayrakları png klasörüne aktarınız. Bu dosyayı localhost içerisinde oluşturduğumuz ulkelistesi dosyasının içerisine flags ismiyle kaydediyoruz. Ardından ülkeler dizininde bir tane boş bayraklar klasörü açıyoruz. Son hali;
Bu dosyaları tek tek açıklayalım;
- bayraklar: flags klasörünüzü bayrakisimduzenleme.php dosyamızda yazdığımız minik kod parçası ile isim düzenlemelerini yapıp bayraklar klasörüne taşıyoruz.
- flags: Orijinal ülke bayraklarını bu klasöre atıyoruz.
- bayrakisimduzenleme.php: İçerisindeki kod parçası sayesinde dosyayı bir kez tarayıcıda açarsak flags klasöründe yer alan bayrak isimlerini düzenleyip bayraklar klasörüne aktaracaktır.
- index.php: Ülke isimlerinin listelenmesini sağlayan yerdir.
1. Adım: bayrakisimduzenleme.php
Dizin yapısını oluşturduktan sonra bayrakisimduzenleme.php dosyamıza aşağıdaki kod parçamızı ekliyoruz.
<?php
$dizin = opendir('flags');
while($dosya = readdir($dizin)) {
if ($dosya !== "." && $dosya !== "..") {
$yeni = substr($dosya, 4);
rename('flags/'.$dosya, 'bayraklar/'.$yeni);
}
}
?>
Burada flags klasöründe yer alan dosya isimlerini değiştirip bayraklar klasörüne taşıyoruz. Neden? Çünkü flags içerisindeki orijinal isimler örneğin 218-turkey.png bu şekilde. Yani ilk 4 karakterin silinmesi gerekiyor. Bu sebeple bu dosyayı oluşturup ilk 4 karakteri siliyoruz.
Dosyamızı kaydedip tarayıcıda açtıktan sonra flags klasörü boş, bayraklar klasörü dolu olacaktır. Boş olan flags klasörümüz ile bayrakisimduzenleme.php dosyamızla işimiz bittiği için silebiliriz. bayraklar klasörümüzün son hali şu şekilde olacaktır;
2. Adım: index.php
index.php'de bir tane $tumUlkeler adında değişken oluşturuyoruz ve bu değişkenimize yukarıda listesini verdiğim değerleri aktarıyoruz. Sayfamızın uzamaması için tüm listeyi aşağıya dahil etmedim;
$tumUlkeler = "AD@andorra@Andorra
--AE@united arab emirates@Birleşik Arap Emirlikleri
--AF@afghanistan@Afganistan
--AG@antigua and barbuda@Antigua ve Barbuda
--AI@anguilla@Anguilla
...
...
...
--XK@kosovo@Kosova
--YE@yemen@Yemen
--ZA@south africa@Güney Afrika
--ZM@zambia@Zambiya
--ZW@zimbabwe@Zimbabve";
Bu şekilde bir değişken oluşturuyoruz. Ardından bu değişkene neler yapacağız?
2.1 Ülke Bilgilerini Bir Dizi İçerisine Toplamak
$ulkeler = explode("--", $tumUlkeler);
$ulkeler değişkenine $tumUlkeler değişkenini -- ifadesinden ayırarak atıyoruz. Bu sayede artık $ulkeler bir dizi ve içerisinde her ülke bulunmaktadır.
2.2 Ülkeleri; Kısaltma, Türkçe ve İngilizce adlarına göre ayırma
$ulke = array();
for ($i=0; $i < count($ulkeler); $i++) {
$ulke[$i] = explode("@", $ulkeler[$i]);
}
Bu alanda biraz da iç içe dizi yapısına girmektedir. Burada yaptığımız @ ifadesinden dizi içerisindeki tüm verileri bölmek ve farklı bir diziye aktarmak. Bu işlem sonucunda elde edilen dizi hakkında şöyle bir yorum yapılabilir;
0 indis değerine sahip ülke: AD@andorra@Andorra
O halde;
- $ulke[0][0] = Ülke Kısaltması
- $ulke[0][1] = Ülke İngilizce Adı
- $ulke[0][2] = Ülke Türkçe Adı
olarak bir dizi oluşturmuş oluyoruz. O halde tüm ülkeleri bir sonraki adımda listeleyebiliriz.
2.3 Ülkeleri Liste Olarak Ekrana Yazdırmak
for ($j=0; $j < count($ulke); $j++) {
$ulkeKisaltmasi = $ulke[$j][0];
$ing_ulkeAdi = ucwords($ulke[$j][1]);
$tr_ulkeAdi = ucwords($ulke[$j][2]);
$bayrak = str_replace(" ", "-", $ing_ulkeAdi);
echo '<div class="ulke">';
echo '<img src="bayraklar/'.$bayrak.'.png">';
echo '<b><span class="ulkeKisaltmasi">'.$ulkeKisaltmasi."</span>".$tr_ulkeAdi."</b>";
echo '</div>';
}
- ucwords() ile ülkelerin baş harflerini büyüttük
- $bayrak ibaresinde str_replace kullanılarak $ing_ulkeAdi'nı boşluklardan ayıralım ve boşluklar yerine - ifadesi koyalım. Çünkü bayraklar klasöründe boşluk ibaresi bulunmuyor. Yani dosya isimleri şöyle oluyor: bosnia-and-herzegovina. Ülkelerin ingilizce adları ise - yerine boşluk içeriyor. Sonuç olarak;
- Klasörde Bosna Hersek: bosnia-and-herzegovina
- Ülke İngilizce Adı: bosnia and herzegovina
Yani boşluklar sorun oluşturmasın diye - ile yer değiştiriyoruz.
Bunlar dışında stil dosyamızda şunlardan oluşuyor;
.ulke {width: calc(50% - 20px); float: left; height: 48px; background: #efefef; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; margin: 10px 10px 0 10px; position: relative;}
.ulke img {height: 36px; position: absolute; margin: 6px 20px;}
.ulke b {margin-left: 64px; font: bold 16px/48px Arial}
.ulkeKisaltmasi {display: block; float: left; background: #dbdbdb; width: 100px; text-align: center; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px;}
3. Sonuç
Ülkeler aşağıdaki gibi bir liste halinde karşımızda oluyor;
Bu şekilde bir liste oluşturabiliriz.
B. Veritabanı Üzerinden Listeleme
Aslında A adımında yaptığımız aynı işlemleri yine gerçekleştireceğiz. Sadece ekrana çıktı vermek yerine veritabanına kaydedeceğiz. Bunu da;
1. Adım Veritabanı Oluşturma
PHPMyAdmin'e giriş yaptıktan sonra eğer aktif projenizde kullandığınız bir veritabanınız yoksa yeni bir veritabanı oluşturuyoruz. Eğer var ise 2. adıma atlayın. Yoksa bir veritabanı oluşturun.
Oluştur butonuna tıkladıktan sonra bir tablo oluşturuyoruz.
2. Adım Ülkeler Tablosu
Tablomuzun adını giriyoruz.
Ardından sütunları oluşturuyoruz.
Dikkat edilmesi gereken alanları kırmızı ile işaretledim.
3. Adım Veritabanına Ekleme
Öncelikle veritabanı bağlantımızı gerçekleştirelim;
try {
$db = new PDO("mysql:host=localhost;dbname=ulkeler;charset=utf8", "root", "");
} catch ( PDOException $e ){
print $e->getMessage();
}
Veritabanına eklemek için A bölümünün 2. adımında yer alan FOR döngüsünü aşağıdaki gibi değiştirmeliyiz;
for ($j=0; $j < count($ulke); $j++) {
$ulkeKisaltmasi = $ulke[$j][0];
$ing_ulkeAdi = ucwords($ulke[$j][1]);
$tr_ulkeAdi = ucwords($ulke[$j][2]);
$bayrak = str_replace(" ", "-", $ing_ulkeAdi);
$sorgu = $db->prepare("INSERT INTO ulkeler SET kisaltma = ?, tr = ?, en = ?");
$ekle = $sorgu->execute(array($ulkeKisaltmasi, $tr_ulkeAdi, $ing_ulkeAdi));
if ($ekle){$last_id = $db->lastInsertId();}
}
Bu yapıyı index.php'ye ekledikten sonra eğer index.php dosyamızı tarayıcımızda çalıştırıp beklersek veritabanına eklemeler yapılacaktır.
Veritabanı Görüntüsü
İyi çalışmalar