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);
napalım şimdi kod yok örnek yok hiçbir şey yok tahmin mi edelim? falcıbacı mı burası anlamadım ki.
Örneğin siteadi.com/index.php?id=5 yerine siteadi.com/konu/5 yapmak istersen .htaccess dosyası oluşturup içine şunları yazman yeterli;
RewriteEngine On
RewriteRule ^konu/([0-9]+)$ index.php?id=$1 [QSA]
Hangi swipe tab? Uzantısı .html olan bir dosyada php oluşturmaya çalışıyor olabilirsin? Her şey mümkün yani bu anlatılanlara göre :D
Son tasarımından veri çekmek için bir class yazdım;
/**
* Class Tursab
* @author Tayfun Erbilen
*/
class Tursab
{
public $no;
public $output;
public $data;
public function __construct($no)
{
$this->no = $no;
$this->getSource();
}
public function getSource()
{
$this->curl('https://online.tursab.org.tr/publicpages/embedded/agencysearch/');
preg_match_all('@PublicKeyToken%3d(.*?)%@', $this->output, $publicKeyToken);
preg_match('@id="__VIEWSTATE" value="(.*?)"@', $this->output, $viewState);
preg_match('@id="__VIEWSTATEGENERATOR" value="(.*?)"@', $this->output, $viewStateGenerator);
preg_match('@id="__EVENTVALIDATION" value="(.*?)"@', $this->output, $eventValidation);
$postData = [];
$postData['ctl00$RadScriptManager'] = 'ctl00$ContentPlaceHolder1$UpdatePanel1|ctl00$ContentPlaceHolder1$SearchButton';
$postData['RadScriptManager_TSM'] = ';;System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=' . $publicKeyToken[1][0] . ':en-US:22727c22-244c-4537-8243-3c42cc5b20e2:ea597d4b:b25378d2;AjaxControlToolkit, Version=18.1.1.0, Culture=neutral, PublicKeyToken=' . $publicKeyToken[1][1] . ':en-US:b13aac2d-1c5e-49ed-8aa2-800cbed84558:cd9be5ef:f2800037:2761bb61:10439726:98f9cc63:dffb332:dda46be5:78181a00:f4e67d46;';
$postData['__EVENTTARGET'] = '';
$postData['__EVENTARGUMENT'] = '';
$postData['ctl00$ContentPlaceHolder1$TursabNo$AutoCompleteTextBox'] = '';
$postData['ctl00$ContentPlaceHolder1$TursabNo$AutoCompleteTextBoxHF'] = '';
$postData['ctl00$ContentPlaceHolder1$TursabNo$AutoCompleteTextBoxTF'] = '';
$postData['ctl00$ContentPlaceHolder1$TursabNoText'] = $this->no;
$postData['hiddenInputToUpdateATBuffer_CommonToolkitScripts'] = '1';
$postData['__VIEWSTATE'] = $viewState[1];
$postData['__VIEWSTATEGENERATOR'] = $viewStateGenerator[1];
$postData['__EVENTVALIDATION'] = $eventValidation[1];
$postData['__ASYNCPOST'] = true;
$postData['ctl00$ContentPlaceHolder1$SearchButton'] = 'ARA';
$this->curl('https://online.tursab.org.tr/publicpages/embedded/agencysearch/', $postData);
preg_match_all('@<div class="litc"><span style="color:red;">Acenta Adı : </span>(.*?)</div>@', $this->output, $agentName);
preg_match_all('@<div class="litc"><span style="color:red;">Telefon : </span>+(.*?)<br />@', $this->output, $agentPhone);
preg_match_all('@<div class="litc"><span style="color:red;">Email : </span>+(.*?)</div>@', $this->output, $agentMail);
preg_match_all('@<span class="red-label">Adres : </span>(.*?) <b>.*?</b> / <b>.*?</b>@', $this->output, $agentAddress);
if (isset($agentName[1]) && isset($agentPhone[1]) && isset($agentAddress[1])) {
$agents = [];
foreach ($agentName[1] as $key => $val) {
preg_match_all('@<b>(.*?)</b>@', $agentAddress[0][$key], $cityState);
$agents[] = [
'no' => $this->no,
'name' => $val,
'city' => $cityState[1][1],
'state' => $cityState[1][0],
'address' => $agentAddress[1][$key],
'phone' => $agentPhone[1][$key],
'mail' => $agentMail[1][$key]
];
}
$this->data = $agents;
}
}
public function curl($url, $post = false)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
}
$output = curl_exec($ch);
curl_close($ch);
$this->output = str_replace(["\n", "\r", "\t"], null, $output);
}
public function getData()
{
return $this->data;
}
}
$tursab = new Tursab(7089);
print_r($tursab->getData());
Kolonun için ya varsayılan bir değer tanımlamalısın ya da NULL olabilir demelisin. Yani şunu çalıştırırsan;
ALTER TABLE `tablo_adi` CHANGE `kolon_adi` `kolon_adi` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;
Burada VARCHAR(255) senin kolon tipin ne ise o olacak :) Aynı şekilde CHARACTER SET ve COLLATE de senin veritabanı yapına göre değişecek.
En kötü ihtimalle phpMyAdmin e girerek kolonu düzenle ve Null kısmını işaretleyip kaydet, aynı sonucu alacaksın ^^