HTML Code:
#!/usr/bin/perl print "Content-type:text/plainnn"; read(STDIN, $gecici_alan, $ENV{'CONTENT_LENGTH'}); @alan_deger_ciftleri = split(/&/, $gecici_alan); foreach $alan_deger (@alan_deger_ciftleri) { ($alan, $deger) = split(/=/, $alan_deger); $deger =~ tr/+/ /;# + karakteri boşluk karakterine dönüştü $deger =~ s/%(..)/pack("C", hex($1))/eg; # $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1)) $FORM{$alan} = $deger; } { open (DOSYAM, ">>./dosyam.dat") || die ("HATALI iSLEM..!"); print DOSYAM "$FORM{'ad'}:$FORM{'email'}:$FORM{'not'}n"; # yukarda bulunan : karakteri her alanı bir diğerinden ayırır. # bu karakteri, alan ayıracı olarak kendimiz belirledik close(DOSYAM); } print "<HTML>n<HEAD>n<TITLE>Teşekkürler</TITLE>n</HEAD>"; print "nn<BODY BGCOLOR="#FFFFFF" LINK="#CC0000">n"; print "<p><br><center><H3>İşlem Tamam !!!</H3><p><br>"; print "<PALIGN="CENTER">nn"; print "<FORM>n"; print "<INPUT onclick=history.go(-1) type=button value=Geri>n"; print "</FONT></FORM></center><p><br>n"; print "</center></BODY>n</HTML>n"; Şimdi aşağıdaki formu dolduralım ve yollayalım. Form tanımındaki form adı ile ilgili satırın tanımı şöyle olacak: <form action="http://sirius.gazi.edu.tr/cgi-bin/ornek3.pl" method="POST"> Sonuçta bilgilerin sistemde bulunan dosyam.dat ' a yazıldığını ve her bir veri alanının da birbirinden : karakteri ile ayrıldığını göreceksiniz. Adınız : E-mail : Notunuz: Dosyalardan Okuma Dosyalara yazma işlemini sanırım anladık.Şimdi sıra sistemdeki dosyadan bilgileri almak(okutmak) ve bu bilgileri değerlendirmekte... Bir önceki konuda formdan yolladığımız bilgiler dosyam.dat adlı dosyaya yazmıştı.Şimdi bu dosyadan okutma yaparak hem okuma işlemini hem de bir önceki yazdırma işleminin doğruluğunu test etmiş olacağız. Aşağıdaki örnekte dosyam.dat dan okunan satırlar(kayıtlar) sırayla bir browser'ın sayfasına yazdırılmaktadır. İnceleyelim. Programın adı ornek4.pl olsun. #!/usr/bin/perl print "Content-type:text/htmlnn"; { print "<HTML>n<HEAD>n<TITLE>KAYITLAR</TITLE>n</HEAD>"; print "nn<BODY BGCOLOR="#FFdd00" LINK="#CC0000">n"; open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!"); print "<p><br><center><H4>Dosyaya girilen kayıtlar aşağıdadır !</H4><p><br>"; print "<PALIGN="CENTER">nn"; @tumkayitlar = <DOSYAM>; close(DOSYAM); foreach $herbirkayit (@tumkayitlar){ chomp($herbirkayit); print "$herbirkayit<br>n"; } } print "<FORM>n"; print "<INPUT onclick=history.go(-1) type=button value=Geri>n"; print "</FONT></FORM></center><p><br>n"; print "</center></BODY>n</HTML>n"; Şimdi bu programı çalıştıralım Bir de daha farklı bir çıktısı olan bu programı deneyiniz ve farkı inceleyip anlayınız. Program kodu aşağıdadır.(ornek5.pl) #!/usr/bin/perl print "Content-type:text/htmlnn"; { print "<HTML>n<HEAD>n<TITLE>KAYITLAR</TITLE>n</HEAD>"; print "nn<BODY BGCOLOR="#FFdd00" LINK="#CC0000">n"; open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!"); print "<p><br><center><H4>Dosyaya girilen kayıtlar aşağıdadır !</H4><p><br>"; print "nn"; print "<table bgcolor=ffffff border=1 bordercolor=dc6000><tr>"; # Çıktının düzenli olması #için table tanımları yapılıyor @adlar = ("AD VE SOYAD","E-MAIL ADRESI","BIRAKILAN NOT"); #çıktı #başlıkları oluşturuluyor foreach $ad (@adlar) { print "<td bgcolor=ff3300>"; print "$ad"; # başlıklar bastırılıyor print "</td>"; } print "<br>nn"; print "</tr>"; @tumkayitlar = <DOSYAM>; close(DOSYAM); foreach $kayit (@tumkayitlar){ chomp($kayit); @degerler = split(/:/, $kayit); print "<tr>"; # alan içerikleri bastırılıyor print "<td>$degerler[0]</td>"; print "<td>$degerler[1]</td>"; print "<td>$degerler[2]</td>"; print "</tr>"; } print "</tr></table>n"; print "<FORM>n"; print "<INPUT onclick=history.go(-1) type=button value=Geri>n"; print "</FONT></FORM></center><p><br>n"; print "</center></BODY>n</HTML>n"; } Dosyada String Arama String bildiğiniz gibi içinde her türlü karakterleri barındırabilen karakterler dizisidir(boşluk v.b dahil). Dosyalara yazma,okuma örneklerimizden sonra şimdi de bir dosyanın içerisinde belli bir string aratma konusunu inceleyelim.Yine konuyu daha iyi kavramak için daha önceki örneklerimize sadık kalacağız.Onceki örneklerde hatırlarsanız dosyam.dat isimli dosya üzerinde çalışmıştık yine aynı dosyada bu sefer string (metin) taraması yapacağız. Dosyada arama yaptırmak için daha önce gördüğümüz konulardan faydalanarak (özellikle patternler)her bir kayıtta örnek stringi tarayacağız. Bu arada sadece metin aratacağımız için GET metodunu kullanacağız. Şimdi web sayfasında görünümü aşağıdaki gibi olan bir form tanımlayalım. Arayacağınız kelimeyi giriniz : KODU: <table width=60% border=1 bordercolor=#000055 bgcolor=#ff7700> <tr><td> <form action="http://sirius.gazi.edu.tr/cgi-bin/ornek6.pl" method="GET"> Aradığınız kelimeyi giriniz : <input type="Text" name="kelime"> <input type="submit" value="Ara !"> <input type="reset" value="Sil"> </form> </td></tr> </table> Yukardaki forma aratacağımız kelimeyi girip Ara ! tuşuna basınca, formun action alanında tanımlandığı üzere ornek6.pl programı çalıştırılacak ve yine o programda adı verilen dosyam.dat dosyasında kelime taranacak ve sonuclar listelenecektir. Programın kodu ise aşağıdadır.Formu doldurarak çalışmasını görünüz ve aşağıdaki kodu inceleyiniz. Bu arada taramada kolaylık olsun diye dosyam.dat daki bazı kelimeleri vereyim. Sevgi kaya(boşluk dahil),Atilla,Sevgi,sev,ali ... Bu kelimeleri sorgulayabilirsiniz. #!/usr/bin/perl print "Content-type:text/htmlnn"; $veriler = $ENV{'QUERY_STRING'}; #formdan alan-adı ve içeriği geldi ve aktarıldı #standart dışı karakterler düşünülerek aşağıdaki 2 satır eklendi $veriler =~ tr/+/ /; $veriler =~ s/%(..)/pack("C",hex($1))/eig; # string normale dönüştü ($alan, $deger) = split(/=/, $veriler); #alan-adı ve içeriği ayrıştırıldı $deger =~ tr/a-z/A-Z/; #buyuk harfe cevrildi..Amac:formdan nasıl girilirse girilsin farketmesin $deger =~ s/+/ /g; # + işareti boşluğa dönüştü print "<HTML>n<HEAD>n<TITLE>TARAMA SONUCLARI</TITLE>n</HEAD>"; print "nn<BODY BGCOLOR="#FFdd00" LINK="#CC0000">n"; print "Sorgulanan Kelime:$deger<hr nosize>"; print "<center>"; print "<table width=100% bgcolor=33ff00 border=1 bordercolor=ff0000>"; # düzemli çıktı amacıyla web sayfası tanımlandı open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!"); @tumkayitlar = <DOSYAM>; close(DOSYAM); @adlar = ("AD VE SOYAD","E-MAIL ADRESI","BIRAKILAN NOT"); #sistemdeki dosya açıldı kayıtlar diziye alındı Başlıklar ise bastırılmak uzere bir baska diziye alındı foreach $ad (@adlar) { print "<td bgcolor=ff3300>"; print "$ad"; # başlıklar bastırıldı print "</td>"; } print "<br>nn"; print "</tr>"; foreach $kayit (@tumkayitlar){ chomp($kayit); $kayit=~ s/s*##.*$//; $kayit =~ tr/a-z/A-Z/; # dosyam.dat kayıtları normal olmayan karakterlerden #arındırılıp buyuk harfe cevrildi if ($kayit =~/$deger/){ #formdan gelen taranacak kelime kayıttamı? Evet ise aşağıya geç @degerler = split(/:/, $kayit); #kaydı alanlarına böl(ad,email,not) print "<tr>"; print "<td>$degerler[0]"; print "<td>$degerler[1]"; print "<td>$degerler[2]"; # kelimenin bulunduğu kayıt (Alanlar ayrı ayrı olmak üzere) bastırıldı print "</tr>"; } } print "</table>"; print "</center></body></html>n"; #web sayfası sonu Dosyada tam kelime sorgulama Bir önceki örnekte string taraması yapan programı inceledik.Biliyorsunuz şunların her biri string örnekleridir;"ali",ali ak","0lp96?" v.b. Bunlar anlamlı yada anlamsız olabilir.Bu defa herhangi bir stringi değil bir kelimeyi, taranan dosyada tam örneği varsa bulan bir program kodlayalım. Formumuz önceki form ile aynı olsun.Sadece program adını ornek6.pl değil ornek7.pl olarak düzelteceğiz.Aşağıdaki formda bu düzenlemeyi yaptım.Kodu ise formun altındadır. Aradığınız kelimeyi giriniz : KODU: <table width=60% border=1 bordercolor=#000055 bgcolor=#ff7700> <tr><td> <form action="http://sirius.gazi.edu.tr/cgi-bin/ornek7.pl" method="GET"> Aradığınız kelimeyi giriniz : <input type="Text" name="kelime"> <input type="submit" value="Ara !"> <input type="reset" value="Sil"> </form> </td></tr> </table> Yukardaki forma aratacağımız kelimeyi girip Ara ! tuşuna basınca,ornek7.pl programı, dosyam.dat dosyasında(bir önceki programda da kullanmıştık) aranan tam kelime örneğini tarar ve sonucu listeler.Formu doldurarak çalışmasını görünüz ve aşağıdaki kodu inceleyiniz. Bu arada aranacak kelime tam kelime olmalıdır.Kelimeden sonta yanlışlıkla boşluk dahi girseniz Kelimeyi bozmuş olacağınızdan sorgulama başarısız olur.Örneğin atilla yazıp boşluk tuşuna da dokunursanız kelimeniz atilla+ olacaktır ve dosyam.dat dosyasındaki atilla kelimesine uymayacağından sorgulama başarısız olacaktır.Amacımız tam kelime sorgulaması olduğundan bu derece katı önlem aldık. Örnek7.pl #!/usr/bin/perl print "Content-type:text/htmlnn"; $veriler = $ENV{'QUERY_STRING'}; #formdan girilen alan-adı ve içeriği #standart dışı karakterler düşünülerek aşağıdaki satırlar eklendi $veriler =~ tr/+/ /; $veriler =~ s/%(..)/pack("C",hex($1))/eig; ($alan, $deger) = split(/=/, $veriler); $deger =~ tr/a-z/A-Z/; $deger =~ s/+/ /g; print "<HTML>n<HEAD>n<TITLE>TARAMA SONUCLARI</TITLE>n</HEAD>"; print "nn<BODY BGCOLOR="#FFdd00" LINK="#CC0000">n"; print "Sorgulanan Kelime:$deger<hr nosize>"; if ($deger eq "" or $deger =~ /^s+/){ #Boş geçilmesin print "<h1>Sorgulanacak Kelime Girilmedi ..!<h1>"; exit; } print "<center>"; print "<table width=100% bgcolor=33ff00 border=1 bordercolor=ff0000>"; open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!"); @tumkayitlar = <DOSYAM>; close(DOSYAM); @adlar = ("AD VE SOYAD","E-MAIL ADRESI","BIRAKILAN NOT"); foreach $ad (@adlar) { print "<td bgcolor=ff3300>"; print "$ad"; print "</td>"; } print "<br>nn"; print "</tr>"; $test=0; $kontrol=0; foreach $kayit (@tumkayitlar) { chomp($kayit); @degerler = split(/:/, $kayit); #Dosyadan diziye aktarılıyor sonradan bu diziden bastırılacak $kayit=~ s/s*##.*$//; #kayıt lüzumsuz karakterlerden ayıklandı $kayit =~ tr/a-z/A-Z/; #kayıt büyük harfe çevrildi @kelimeler = split(/[t ]+/, $kayit); #tab ve boşluklar varsa kayıt oradan bölündü ve diziye #kondu ve tam kelimeye erişim tedbirleri tamamlandı foreach $tam (0..$#kelimeler) { if (@kelimeler[$tam] =~ /b$degerb/) #formdan gelen kelimenin tam örneği varmı? { $test=1; $kontrol=1; last; #gerekli kontrol değişkenleri ayarlandı ve bu döngüden çıkıldı } } if ($kontrol == 1){ # kelime bulundu ve tüm kayıt bastırılıyor print "<tr>"; print "<td>$degerler[0]</td>"; print "<td>$degerler[1]</td>"; print "<td>$degerler[2]</td>"; print "</tr>"; $kontrol=0; } } if ($test == 0){ print "<tr>"; print "<td>Aranan KelimeBulunamadi..</td>"; print "</tr>";} print "</table>"; print "</center></body></html>n";