pathinfo()
fonksiyonunu deneyebilirsin. Yada en basit olarak;
$dosya = end(explode('.', $_FILES['dosya']['name']));
echo $dosya;
Eğer fiyat verme konusunda bilgin yoksa o iş hakkında da çok tecrüben yok demektir :) Dolayısı ile piyasanın üstünde bir fiyat vermen çok mümkün değil.
Gel gelelim, biz neye göre tavsiye vereceğiz sana? Ne iş tanımı belli, ne ne yapacağın belli. İş dövizle olmuş ya da olmamış çok önemli değil, müşteri seni Türkiye'de daha uyguna çalıştıkları için mi tercih etti, işini iyi yaptığın için mi?
Eğer Türkiye'de daha ucuza yaptırmak istiyorsa ve zaten işin fiyatı belliyse ya kabul edersin ya da etmezsin :) Ücretlendirme konusu tamamen açık bir konu, seni 1 aylık projede 5.000 TL almak mutlu ediyordur ve kurtarıyordur bir başkasını 10.000 TL almak.
Yani bir iş birden fazla kritere göre farklı fiyatlarda yapılabilir. Senin kriterlerin nelerdir önemli olan bu :)
Eğer hepsi birbirinin aynı sayfalarsa o zaman canonical
belirtmen gerek. Yani şöyle düşün;
http://siteadi.com/138-satilik-urun
http://siteadi.com/138-satilik-urun?id=5
http://siteadi.com/138-satilik-urun?id=5&tag=2
http://siteadi.com/138-satilik-urun?ge=view&id=5&tag=6
bu linklerin hepsi aslında http://siteadi.com/138-satilik-urun
bununla aynı olduğu için canonical
linkimizde bu olacak. Böylece google biliyor ki, bu 4 linkte tek bir linki temsil ediyor.
<link rel="canonical" href="http://siteadi.com/138-satilik-urun">
Çok basit olarak required
olan ve required
olup aynı zamanda :valid
olanların sayısını kontrol ederek dinamik bir kontrol işlemi yapabilirsin. Örnek vermek gerekirse;
<form action="" method="post" onsubmit="return false" id="form1">
<input type="text" name="username" placeholder="Kullanıcı adın" required> <br>
<input type="text" name="email" placeholder="E-posta"> <br>
<input type="text" name="password" placeholder="Şifren" required> <br>
<button type="button" onclick="kontrolAjax('#form1')">Gönder</button>
</form>
function kontrolAjax(form){
var requiredFields = $(form + ' [required]').length,
validRequiredFields = $(form + ' [required]:valid').length;
if (requiredFields == validRequiredFields){
// zorunlu alanlar doldurulmuştur, ajax işlemini yap
} else {
alert('Lütfen tüm zorunlu alanları doldurun.');
}
}
Şu şekilde açabilirsin;
open -a "Google Chrome" index.html
Eğer projeni atıyorum http://localhost/projeadi
şeklinde otomatik açmak istersen ise şunu deneyebilirsin;
alias local='open -a "Google Chrome" "http://localhost/${PWD##*/}/"'
# alias tanımladıktan sonra artık ilgili klasöre gidip "local" demen yeterli
cd test
local
yani burada böyle yaparsan sırası çok önemli olacak, dilersen tek tek elle alıp url birleştirip gönderebilirsin. Örneğin;
<form action="islem.php" onsubmit="return false" method="GET">
<select name="isim">
<option value="riza">Rıza</option>
<option value="kemalettin">Kemalettin</option>
<option value="asli">Aslı</option>
<option value="irem">İrem</option>
</select>
<select name="sehir">
<option value="kastamonu">Kastamonu</option>
<option value="adana">Adana</option>
<option value="mugla">Muğla</option>
</select>
<select name="meslek">
<option value="tekstil">Tekstil</option>
<option value="otomotiv">Otomotiv</option>
<option value="mobilya">Mobilya</option>
</select>
<input type="submit" id="submit-btn" value="Gönder">
</form>
<script>
$('#submit-btn').on('click', function(e){
var isim = $('select[name="isim"]').val(),
sehir = $('select[name="sehir"]').val(),
meslek = $('select[name="meslek"]').val();
window.location.href = `http://siteadi.com/islem.php/${isim}/${sehir}/${meslek}`;
e.preventDefault();
});
</script>
ya da formdaki tüm elemanları alıp dinamik olarak yapmak istersen şöyle yapabilirsin;
$('#submit-btn').on('click', function(e){
var data = $('form').serialize();
data = data.split('&').map((val, key) => {
return val.split('=')[1];
});
window.location.href = 'http://siteadi.com/islem.php/' + data.join('/');
e.preventDefault();
});
Senin tam json formatını bilemiyorum ancak şu formatta olduğunda düzgün alıyorum, kodu direk çalıştırıp test edebilirsin;
<?php
$json = '{
"Status": true,
"Data": [
{
"uniqueid": "1573421921.95355",
"values": [
{
"date": "11.11.2019 00:38:41",
"destination": "123456789",
"source": "123456789",
"duration": "00:00:00",
"direction": 3,
"recording": "",
"line": "123456789",
"directory": "\"123456789\" <123456789>"
}
]
}
]
}';
$data = json_decode($json);
echo $data->Data{0}->values{0}->destination;
?>
Bir kanaldaki abone listesine doğrudan erişemezsin. Ancak Google Auth kullanarak kullanıcıdan izin alacaksın ancak o zaman listeleme yaparsın. Onun içinde aşağıdaki linke bakabilirsin, zaten API kullanımını bir kere anlarsan gerisinin sadece endpoint'i değiştirmek olduğunu anlarsın ^^
https://developers.google.com/youtube/v3/docs/subscriptions/list
json_decode()
fonksiyonu iki parametre alır ancak sadece ilki zorunludur. İlki zaten json değeri, ikinci parametre true verilir ise array olarak, verilmez ise obje olarak değerleri alırsın. Örnek vermek gerekirse;
<?php
$json = '{"name": "Tayfun", "surname": "Erbilen"}';
$data = json_decode($json);
echo $data->name . ' ' . $data->surname;
$dataArray = json_decode($json, true);
echo $dataArray['name'] . ' ' . $dataArray['surname'];
Senin örneğinde ise obje olduğu için destination
değerini şöyle alabilirsin;
$Object = json_decode($Response->Data);
echo $Object->Data{0}->values{0}->destination;
Storage
nesnesine erişim için localStorage
ve sessionStorage
kullanılıyor. Aralarındaki fark ise şöyle;
localStorage
Sona erme süresi yoktur. Kullanıcı kendisi silmediği ya da cacheleri temizlemediği sürece oluşan değer kalır.
// değer atama
localStorage.setItem('name', 'Tayfun');
// değer alma
console.log(localStorage.getItem('name'));
// değer alma / 2. yöntem
console.log(localStorage.name);
// değer silme
delete localStorage.name;
// tüm depolanan değerleri görmek için
console.log(localStorage);
sessionStorage
Oturum sonlandığında (tarayıcı kapatıldığında) değerler temizlenir. Yani anlık oturum için değer üretilir ve kullanılır.
// değer atama
sessionStorage.setItem('name', 'Tayfun');
// değer alma
console.log(sessionStorage.getItem('name'));
// değer alma / 2. yöntem
console.log(sessionStorage.name);
// değer silme
delete sessionStorage.name;
// tüm depolanan değerleri görmek için
console.log(sessionStorage);