Programalama > CGI


Ort. 0
Puan ver:
#!/usr/bin/perl
print "Content-type:text/plain\n\n";

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 "\n\n<BODY BGCOLOR=\"#FFFFFF\" LINK=\"#CC0000\">\n";
print "<p><br><center><H3>İşlem Tamam !!!</H3><p><br>";
print "<PALIGN=\"CENTER\">\n\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 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/html\n\n";

{

print "<HTML>\n<HEAD>\n<TITLE>KAYITLAR</TITLE>\n</HEAD>";

print "\n\n<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\">\n\n";

@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/html\n\n";

{
print "<HTML>\n<HEAD>\n<TITLE>KAYITLAR</TITLE>\n</HEAD>";
print "\n\n<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 "\n\n";
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>\n\n";
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/html\n\n";

$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 "\n\n<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>\n\n";

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/html\n\n";

$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 "\n\n<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>\n\n";
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$deger\b/) #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";



Yorumlar                 Yorum Yaz
Bu hazır kod'a ilk yorumu siz yapın!
KATEGORİLER
ASP - 240
ASP.NET - 24
C# - 75
C++ - 174
CGI - 8
DELPHI - 247
FLASH - 49
HTML - 536
PASCAL - 246
PERL - 11
PHP - 160
WML - 9
XML - 2
Copyright © 2002 - 2018 Hazır Kod - Tüm Hakları Saklıdır.
Siteden yararlanırken gizlilik ilkelerini okumanızı tavsiye ederiz.
hazirkod.com bir İSOBİL projesidir.