Ç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);
Genelde cache sistemini dinamik yapılarda giriş yapan için serbest bırakırlar, ya da cache sistemini ikiye bölüm login öncesi ve sonrası kaydedeceksin ama ne gerek var? O kadarını sistem kaldıramıyorsa zaten başka bir problem vardır :)
PDO ile güvenli olarak veri çekip listeleyebilirsin, eğer sorgunda kriter yoksa çekip listelemekte sorun yok, dışarıdan bir değer alarak ona göre veri çekeceksende prepare() ve execute() metodlarını kullanabilirsin.
PDO ile veritabanı bağlantısı için;
<?php
try {
$db = new PDO("mysql:host=localhost;dbname=dbadı", "kadi", "şifre");
} catch ( PDOException $e ){
print $e->getMessage();
}
Güvenli sorguya bir örnek ise şöyle olabilir;
<?php
$query = $db->prepare('SELECT * FROM uyeler WHERE uye_adi LIKE "%:uye_adi%"');
$rows = $query->execute([
'uye_adi' => 'Tayfun'
]);
print_r($rows->fetchAll(PDO::FETCH_ASSOC);