Thursday, May 22, 2008

Permission denied to call method XMLHttpRequest.open

Problem: XMLHttpRequest ile herhangi bir domain üzerinden ya da local çalışırken başka bir alan adına sahip bir makineden veri çekmeye kakıştığımda şu hatayı aldım:


Error: uncaught exception:
Permission denied to call method XMLHttpRequest.open

Türkçesi:
XMLHttpRequest.open methodunun çağrılması için gerekli izniniz yok


Çözüm:

önbilgi: bu işlemin adı cross scripting. Ararsanız bir çok kaynak bulacaksınız.

Öğrendim ki bu bir sistem hatası değil (olamaz da zaten). bu kullandığım tarayıcının bir uyarısı ve önlemi. firefox 3.0 kullanmaktaydım. i.e. 6 denemek istedim (yani en güvensiz olanı). çözüm olarak güvensiz bir tarayıcı kullanın.

kullandığım javascript

function post_eyle()
{
xmlHttp=ajax();
if (xmlHttp==null)
{
alert ('Tarayıcınız Ajax Desteklemiyor!');
return;
}

var url='https://......com/index.php';
var sc ='test=test';
xmlHttp.open('POST', url, true);
xmlHttp.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlHttp.setRequestHeader('Content-length', sc.length);
xmlHttp.setRequestHeader('Connection', 'close');
xmlHttp.onreadystatechange=SonucGetir;
xmlHttp.send(sc);
}
function SonucGetir()
{
if (xmlHttp.readyState==4 && xmlHttp.status == 200)
{
document.getElementById('sonuc').innerHTML=xmlHttp.responseText;
//alert(xmlHttp.responseText);
}
}
function ajax()/* Bu fonksiyonu c/p ile alın ve olduğu gibi kullanın bir zarar yaratmaz.. */
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
}
}
return xmlHttp;
}

Friday, May 9, 2008

[php] auto barcode

problem: bir .mdb dosyadan hazırlanmış olan kişisel bilgi listesindeki kişilere herhangi bir algoritma ile bir şekilde barcode oluştur ve mail ile bu kişilere barcode larını pdf olarak gönder.Tabi bu barcode lar gerçek hayatta kullanılabilir olmalı ve test edilmeli. barcode lara göre kişileri ayıracağız . kişilerin barcodelarını okutmak için ve ayırmak için bir windows programı yap.

çözüm: farklı kütüphaneler ile yaptım. bir kaç gün sonra kodları sunarım. ancak evvela finaller bitmeli.
ancak kullandığım kütüphane http://chir.ag/tech/download/pdfb adresinde ikamet etmekte ve son derece başarılı bir kütüphane. üstelik ücretsiz. ayrıca barcode metini yazarken ve pdf üzerine döşerken kullandığım harika ve ücretsiz başka bir kütüphane FPDF ( http://www.fpdf.org ) kütüphanesi ki bu da gerçekten harika ve pratik bir çözüm.
mdb dosyaına ile bağlanıp verilerimi çektim ve listedim. şu şekilde:
yukarda bahsettiğim iki paketi yada sadece fdpf pakeiti indirip bir yere açtım. ardından php ile mdb dosyalarına bağlanma işlemini kolaylaştıran kütüphane olan class_mdb.php kütüphanesini indirdim. ancak nerden indirdimhatırlamıyorum. kütüphanenni üst kredi bilgisini şurda. aranarak hemen bulunur.
/*
* Filename.....: class_mdb.php
* Class........: mdb
* Aufgabe......: open *.mdb MSAccess files
* Erstellt am..: Donnerstag, 17. Juni 2004, 23:32:07
*
* Wirtschaftsinformatiker IHK
* www.ingoknito.de
*
* Peter Klauer
*/


Sonra şablon pdf dosyamı oluturudum ve yazıların gelceği alanları ekranımda pixel cetvel ile ölçerek not aldım. ve pdf dosyamı şu kodlardakine benzer bi şekilde oluşturdum:
bu dosya fpdf içinde. ayrıca pdfb kütüphane dizini de aynı yerde olmalı.

require("pdfb/pdfb.php"); // bu önemli

class PDF extends PDFB
{
function Header()
{
// şu an için gereksiz. ama uzun pdf dosyalarda gerekli
}

function Footer()
{
// şu an için gereksiz. ama uzun pdf dosyalarda gerekli
}
}


$pdf = new PDF("p", "pt", "letter");


$pdf->setSourceFile("demo.pdf");
$tplidx = $pdf->ImportPage(1);


$pdf->AddPage();
$pdf->useTemplate($tplidx);

// pdfb/pdfb.php içindeki BarCode() fonksiyonuna
//bakarak daha başka parametrelerini öğrenmek gerek..
// şu an için yerleşim (x,y) genişlik (w,h) ve link parametreleri olduğunu öğrendim.
// Code 128-B barcode
$pdf->BarCode("HasanTayyar", "C128B", 298, 180, 288, 88, 1, 1, 2, 5, "http://hasantayyar.blogspot.com", "PNG");

// UPC-A Barcode // bu da bi barkod çeşidi ama ben en genel olan code-128 i kullandım.
$pdf->BarCode("73725735882", "UPCA", 300, 300);

$pdf->Output();
$pdf->closeParsers();


sonuçta dinamik olaraktan oluşan pdf dosyasını ayrı ayrı kaydetmek yerine talep zamanında oluşturmak en iyisi oldu.

amaç

bu blog da amaçlarım:
(teknik konularda imla kurallarına öndem göstermeden -büyük harf kuraına dahi uymadan- yazarım :) )
1. yeni öğrendiğim ve paylaşmak istediklerimi ve deneyimlerimi paylaşmak
2. karşılaştığım sorunlara bulduğum çözümleri paylaş, çeşitli teknik konulara değinmek