CGI (Common Gateway Interface) Sayfa 2 için tıklayın
CGI, web sayfalarının daha etkin ve etkileşimli kullanımına yönelik olarak tasarlanmış bir standarttır.
Perl programları cgi olarak da çalışabilirler. Bu sayede browser(netscape,explorer gibi) sayfasıyla web
server arasındaki data iletişimi gerektiğinde karşılıklı olmak üzere gerçekleşir.
Perl cgi programlarına erişmek ve çalıştırmak için web browser sayfasından formlar veya link yoluyla
(a
href="sirius.gazi.edu.tr/cgi-bin/ornek1.pl...) veya URL adres
satırından tam path(dosya yolu)
(sirius.gazi.edu.tr/cgi-bin/ornek1.pl) verilerek
perl programınızı çalıştırabilirsiniz.
Daha sonra işleyeceğimiz Web sayfası formları haricinde cgi kullanımını bir örnekle görelim isterseniz.
Programımız browser'ımızın sayfasına ;
Merhaba ben ilk cgi programınızın çıktısıyım !):
yazsın. Zemin rengi beyaz yazı büyük (h1) ve rengi de mavi olsun. Ayrıca bir önceki sayfaya dönmeyi
sağlayan Geri butonu bulunsun.
Program adına da ornek1.pl diyelim. Program yazıldıktan sonra bir web browser -sorgulayıcı-
programdan (Netscape, i.explorer, v.b) çalıştırabilmek için web server'ın bulunduğu sistemin cgi-bin
dizinine konulmalı ve icra hakkı verilmelidir(chmod 755 ornek1.pl).
Şimdi programımızı kodlayalım.
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";
print "<html><head>\n";
print "<title>Örnek1</title>\n";
print "</head>\n";
print "<body bgcolor=\"white\" text=\"blue\">\n";
print "<center><h1>Merhaba ben ilk cgi programınızın çıktısıyım !)):</h1>\n";
print "<FORM>\n";
print "<FONT color=#ff9900 size=1>\n";
print "<INPUT onclick=history.go(-1) type=button value=\"Geri\">\n";
print "</FONT></FORM>\n";
print "</body></html>\n";
Programımızın satırlarını incelediğinizde 2. satır çok önemli bir özelliğe sahiptir. Bu satır da
print "Content-type:text/html\n\n"; kodunu görmektesiniz. Cgi programlarda bu satır programın
çıktısının web(html) sayfasına olacağını bildirmektedir. Bu satırın kodlanmasında dikkat edilecek bir
nokta da genel kabul gören bir uygulama olarak bir üst satırının boş olmasıdır.
Programımızı yazdık ve cgi-bin dizinine koyduk(icra hakkı da verdik tabii). O halde şimdi çalıştırabiliriz.
Burayı kliklermisiniz?
Web browser'ınızın sayfasında
Merhaba ben ilk cgi programınızın çıktısıyım !):
yazdığını gördünüz değil mi?. O halde ilk cgi programımızı çalıştırmış olduk. Devam edelim...Şu ana
kadar sadece sistemdeki programı çalıştırdık ve çıktısını aldık. Pekala etkileşimli olarak data kullanımını
nasıl gerçekleştiririz? Genelde bu işlev için web sayfasında formlar kullanılır. Formlar yoluyla data girer
onu sisteme yollar dosyaya kaydeder veya işleyip çıktısını alırız ya da bir sorgulama datası gönderip
sistemden onu değerlendirip bize uygun çıktıları göndermesini sağlayabiliriz.
Formlar
Form tanımı için ilk ifade <form> dur formun sonunu ise </form> gösterimi belirler.
Bu iki gösterim arasında ise kullanacağımız form'a ait özellikler kodlanır.
Formlarda formun adını tutan bir NAME alanı,çalıştırılacak .cgi (.pl) programının tam URL 'nı tutan bir
ACTION alanı ve data iletişim metodunu (get , post) tutan bir METOD alanı tanımlanmalıdır.
Formlarda amaca göre değişen daha bir çok tanım şekli sözkonusudur.
Örneğin,
CHECKED : radyo butonu veya checkbox larda seçilmiş olma durumu,
MAXLENGTH : form elemanına girilecek en fazla karakter sayısı,
SIZE : giriş yapılan alanın ölçüsü,(eğer MAXLENGTH, SIZE dan genişse scroll bar oluşur
bu sayede normalde gözükmeyen alan gözükür).
TYPE : giriş alanının tipi(checkbox, hidden, password, radio, reset, submit, ve text).
VALUE : Alan için varsayılan değer.
mesela bir form da bir text alanı tanımlayalım.
KODU:
<form>
<INPUT TYPE=text NAME=Soyadı VALUE=Turkmen SIZE=25 MAXLENGTH=50>
</form>
Web sayfasında görünümü:
Bu kod ile bir giriş alanı tanımlanır. Bu alanın html sayfasında default değeri Turkmen olarak gözükür
ve alan genişliği 25 karakterdir(Web sayfasındaki görüntü olarak).Biz bu alana,yapılan tanım gereği 50
karaktere kadar değer girebiliriz.
Bazı form kullanım örnekleri:
KODU:
<form>
<INPUT TYPE=checkbox NAME=beyaz CHECKED>Beyaz severmisiniz?
<INPUT TYPE=checkbox NAME=mavi>Mavi severmisiniz?
<INPUT TYPE=submit VALUE="Renk">
</form>
Web sayfasında görünümü:
KODU :
<form>
Işletim Sistemi:<BR>
<INPUT TYPE=radio NAME=os VALUE=Win95>Windows 95
<INPUT TYPE=radio NAME=os VALUE=WinNT>Windows NT
<INPUT TYPE=radio NAME=os VALUE=UNIX CHECKED>UNIX
<INPUT TYPE=radio NAME=os VALUE=OS2>OS/2
CPU Tipi:<BR>
<INPUT TYPE=radio NAME=cpu VALUE=Pentium>Intel Pentium
<INPUT TYPE=radio NAME=cpu VALUE=Alpha CHECKED>DEC Alpha
<INPUT TYPE=radio NAME=cpu VALUE=Bilinmiyor>Bilinmiyor
</form>
Web sayfasında görünümü:
Kodu:
<SELECT NAME="Mesai" Günleri>
<OPTION SELECTED>Pazartesi
<OPTION>Salı
<OPTION>Çarşamba
<OPTION>Perşembe
<OPTION>Cuma
</SELECT>
Web sayfasında görünümü:
Bu tanımdaki alanda default(seçili) değer Pazartesi'dir.
Formlarda birden fazla satırı içeren bir text alanı tanımlanacaksa bu <textarea> ile belirtilir.
Örnek:
KODU:
<form>
<TEXTAREA NAME=Notlar ROWS=3 COLS=60></TEXTAREA>
</form>
Web sayfasındaki görünümü:
Bu kodlama ile web sayfasında 3 satır ve 60 karakter genişliğinde bir alan tanımlanır.
CGI için FORM Kullanımı
Formlara bu şekilde kabaca bir bakmış olduk. Şimdi şu kodu inceleyelim.
KODU :
<form
method=POST action="http://sirius.gazi.edu.tr/cgi-bin/konuk.pl">
<table><tr><td align=right>
<p>
E-mail addresi.? </td><td>
<input type="text" name="email">
</td></tr><tr><td align=right>
Adınız? </td><td>
<input type="text" name="ad"></td></tr><tr>
<td valign=top align=right>
Notunuz. </td><td>
<textarea name="izah" rows=3 cols=50></textarea><br>
<input type=submit value="yaz">
<input type=reset value="sil"></td></tr>
</table>
</form>
Web sayfasında görünümü:
Yukarda ki kodlama da <table><tr><td align=right><p><br> gibi kodlamalar tamamen sayfanın
daha iyi görünmesi için kullanılan html kodlarıdır.Bunları bir yana koyacak olursak cgi ve form
komutlarını içeren kodlar şu biçimdedir;
<form method=POST
action="http://sirius.gazi.edu.tr/cgi-bin/konuk.pl">
E-mail addresi.? <input type="text" name="email">
Adınız? <input type="text" name="ad">
Notunuz. <textarea name="izah" rows=3 cols=50></textarea>
<input type=submit value="yaz"> <input type=reset value="sil">
</form>
İlk satırda form tanımı başlatılıyor ve aynı satırda cgi programına geçirilecek bilgilerin metodu ve tam
URL adresi veriliyor. Daha açıkça ifade edecek olursak formda bulunan submit buton özelliğine
kliklememiz
halinde http://sirius.gazi.edu.tr/cgi-bin/ adresindeki konuk.pl isimli
perl cgi programı
çalıştırılır ve datalar POST metoduyla gönderilir. Peki gönderilecek datalar hangileridir? Bu datalar;
email, ad ve izah değişkenleri(alan-adları) ve içerikleridir(değerler).
email isimli değişkenin(alan-adının) içeriği o alana girdiğiniz değer yani e-mail adresi bilgisi,
ad isimli değişkenin içeriği Ad ve Soyad bilgisi,
izah isimli değişkenin içeriği ise yazdığınız notlardan oluşan değerdir.
Değişken ve içerdikleri değerler server'a cgi programına gönderilir ve program tarafından gerektiği gibi
değerlendirilir.
Şimdi konuyu biraz daha açalım. Formlarda data iletişimi için GET ve POST metotlarından yararlanılır.
Eğer GET metodu kullanılırsa, web sayfasındaki data (komut olarak eklenen veya form alanlarına
girilen değerler) browser'a alınır. ? isaretiyle URL'ye eklenir.
Örneğin"/cgi-bin/konuk.pl?ad=Ertan%20Turkmen&mail=ertan@gazi.edu.tr&izah=basarilar"biçiminde).
Bu değer QUERY_STRING değişkeni içinde tutulur ve cgi programa geçirilir. Data 256 karakterden
uzun olamaz. GET metodu ile server'a gönderilen bilgi güvenlikten yoksundur. Üçüncü şahıslar
tarafından tespit edilebilir.
POST metodu kullanılmışsa forma girilen değerler ve alan-adlarından oluşan datalar standart
girişi(STDIN) kullanarak serverdaki cgi programına gönderilir. Server ne kadar data okuması gerektiğini
belirlemek için CONTENT_LENGTH çevre değişkenini kullanır, STDIN yoluyla girilen bu değerler toplu
olarak tek bir string şeklinde buffer alanına alınır.
Ör: read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'})).
bu stringin uzunluğu CONTENT_LENGTH değişkenindedir.
Programın işlenmesi sonucu çıktı olarak üretilen dataların ne tipte olacağı bilgisini ise CONTENT_TYPE
çevre değişkeniyle belirtiriz. Bu çıktı tipleri html, gif, text gibi MIME tipleridir.
GET metoduyla 256 karakterden fazla gönderilemezken POST metodu fazlasını kabul eder ve datalar
daha güvenli bir şekilde server'a aktarılır. Metotla ilgili mutlaka bilmemiz gereken bu bilgilerden sonra
tekrar formumuza dönelim ve formda bulunan alan-adları (ad,email gibi) ve içine girilen değerler
(Ertan TURKMEN,ertan@gazi.edu.tr gibi) hep birlikte nasıl server'a gönderilir inceleyelim.
Formda bulunan isimle ilgili text alanımızın adı ad idi. Biz bu alana Ertan Türkmen değerini,
email isimli alana da ertan@gazi.edu.tr değerini girmiş olalım.
Bu stringler alan-adı/değer çifti olarak şu biçimde serverdaki programa gönderilirler:
ad=Ertan+Turkmen&email=ertan@gazi.edu.tr
& işareti alan-adı ve değer çiftlerini ayırırken = karakteri ise alan-adı ile onun içindeki değer bilgisini
ayırır + karakterine gelince bu karakter alan içindeki değerlerin boşluk kısmını temsil eder.
Ayrıca <,> gibi karakterlerde hexadesimal olarak % işaretiyle birlikte ifade edilir.
Örneğin,<ertan@gazi.net> ifadesi, %3Certan%40gazi.net%3E olarak cgi programına gönderilir.
Bu gösterime URL Kodlama(URL Encoding) işlemi denir.(Not:URL=UniformResourceLocator).
Çok kullanılan bazı karakterlerin kodları aşağıdadır.
Karakter URL Kodu
\t %09
\n %0A
@ %40
& %26
/ %2F
~ %7E
; %3B
: %3A
< %3C
> %3E
Peki bu gösterimi cgi nasıl normale döndürür yani decode eder?.
İşte decode fonksiyonu içeren alt program örneği:
sub URL_yi_coz{
$_ = shift;
tr/+/ /;
s/%(..)/pack('c', hex($1))/eg;
return($_);
}
Bu örnekle tr satırında +, lar boşluğa çevrilir ve mesela Ertan+Turkmen, Ertan Turkmen şekline
dönüşür. Bir alt satırda da % v.s. gibi özel ve hexadecimal kodlanmış karakterler atılarak string
normale döndürülür. Bu işi pack fonksiyonunun özelliği yapar. 'c' hexadecimal gösterimin normal
karakter stringine döneceğini temsil eder. $_ ise daha önceden de öğrendiğiniz gibi burada
stringin tamamını ifade etmektedir.Bu alt program return($_); ifadesiyle normale döndürülmüş(decode
edilmiş) stringi döndürür.
(Not:Biz decode işlemini alt programda değil normal program akışında yapacaksak
$deger =~ tr/+/ /;
$deger =~ s/%(..)/pack("C", hex($1))/eg;
şeklinde kodlayabiliriz. Bu durumda stringin tamamı $deger değişkenindedir).
Örnek Program:
Bir web sayfasından girilen ad, e-mail ve not bilgilerini alıp, bunu browser'ınıza html sayfası olarak
basan bir cgi yazalım adını ornek2.pl koyalım.
İşte kodu:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
# ornek2.pl programının çıktısı html sayfası olacak demektir
#bir üst satırın boş olması önerilir.
#Eğer text dosya halinde çıktı istersek Content-type tanımı :
# Content-type: text/plain\n\n biçimindedir.
#sondaki 2 satır sonu karakteride çıktı düzeni için gereklidir(\n\n)
read(STDIN, $gecici_alan, $ENV{'CONTENT_LENGTH'});
# giriş (STDIN) den gelen veriler $gecici_alan adlı bir skalar değişkene
#aktarıldı
@alan_deger_ciftleri = split(/&/, $gecici_alan);
#her bir alan-adı/değer çifti ayrı ayrı alan_deger_ciftleri dizisine konuldu
foreach $alan_deger (@alan_deger_ciftleri) {
# her bir alan-adı/değer çiftinin her biri tek tek $alan_deger değişkenine alınıyor
($alan, $deger) = split(/=/, $alan_deger);
#alan-adı ,$alan değişkenine;değer ise $deger değişkenine atandı
$deger =~ tr/+/ /; # + karakteri boşluk karakterine dönüştü
$deger =~ s/%(..)/pack("C", hex($1))/eg;
# üst satır aşağıdaki gibi de kodlanabilir ama uzatmaya gerek yok
# $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))
# hexadecimal karakterlerde normale dönüştürülüp tüm string decode edildi
$FORM{$alan} = $deger; #string alan-adı ve değer olarak,
#FORM isimli bileşik diziyi oluşturuyor
}
print "<html><head>";
print "<title>örnek2</title>";
print "</head>";
#web sayfasının başlangıç tanımları yapıldı
print "<body bgcolor=ffffff>";
#sayfanın zemin rengi beyaz olarak tanımlandı ve bastırıldı
print "<center><table border=1 bordercolor=000055 bgcolor=ff7777>
<tr><td>";
#düzgün görüntü için tablo tanımlandı.tablonun zemin rengi,kenarlık
#kalınlığı ve rengi de tanımlandı ve bastırıldı
print "</center><center><h3><ul>Gönderilen Bilgileri Aşağıya Yazdım</ul></h2>\n";
# başlık kısmı bastırıldı
print "</center><p align=center><br>\n";
# değerlerin bastırılması için ayar yapıldı ortalı olarak bastırılacak
foreach $key (keys(%FORM)) {
# her bir alan-adı ve değeri çifti tek tek alınıyor
print "$key = $FORM{$key}<br>",
# ve bastırılıyor
}
print "</p><br></td></tr></table></body></html>";
# sayfa sonu tanımları tamamlandı..Kodlama tamamlandı!
Şimdi bu perl cgi programını çalıştıracak web sayfasını da kodlayalım.
KODU :
<html><head><title>ornek2</title></head>
<body>
<table border=1 bordercolor=dc6000 bgcolor=337733><tr><td>
<form
action="http://sirius.gazi.edu.tr/cgi-bin/ornek2.pl" method="POST">
<pre>
Adınız : <input type="text" name="ad">
E-mail : <input type="text" name="email">
Notunuz: <input type="text" name="not">
</pre>
<input type="submit" value="Yolla">
<input type="reset" value="Sil">
</form>
</td></tr></table>
</body>
</html>
Bu sayfa Browserınızda şöyle gözükecektir.
Yukarıdakiforma ait, email alanına : ertan@gazi.edu.tr, not alanına : Basarilar, ad alanına ise
Ertan Turkmen girelim ve Yolla tuşunu klikleyelim.
Browser ekranında aşağıdaki görüntü varsa cgi programınız doğru çalışmış demektir.
Gönderilen
Bilgileri Aşağıya Yazdım email = ertan@gazi.edu.tr |
Siz bu örnekle sadece 3 değer girdiniz ama çok fazla sayıda da alan-adı tanımlar ve onlara değerler
girebilirdiniz. Program yine başarıyla çalışırdı.
Çevre Değişkenleri (Environment Variables):
cgi programlarıyla çevre değişken ve değerlerine erişmek mümkündür. Bir kısmı aşağıdadır.
SERVER_SOFTWARE : Kullanılan Web server versionu.
REMOTE_ADDR : client (Browser'dan çalıştıranın) IP adresi.
REMOTE_HOST : client tam domain adı.
QUERY_STRING : Eğer GET metodu kullanılmışsa URL encoded string.
(Aranacak kelime veya alanadı/alandeğeri çifti içerir)
HTTP_USER_AGENT : Kullanıcının Browser'ı.(netscape,explorer v.s.)
CONTENT_LENGTH : String uzunluğu(byte).
CONTENT_TYPE : MIME tipi (text,html,gif)
DOCUMENT_ROOT : Server dökümanları için ana dizin (/...httpd/htdocs)
REQUEST_METHOD : client tarafından gonderilen istek metodu (GET veya POST).
SCRIPT_NAME : CGI scriptin URL'si ve adı
SERVER_NAME : Server adı (DNS host adı)
Çevre değişkenleri bilgilerini elde eden bir test programı yazalım.
Adı text2.pl olan programın çıktısı web sayfasına olup kodu ise aşağıdadır.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<"bas";
<html>
<BODY> <TITLE> HTML ÇIKTISI </TITLE>
<p>
<H1> CEVRE DEGISKENLERI </H1>
<UL>
<LI>DOCUMENT_ROOT = <B> $ENV{'DOCUMENT_ROOT'}</B>
<LI>GATEWAY_INTERFACE = <B> $ENV{'GATEWAY_INTERFACE'}</B>
<LI>HTTP_ACCEPT = <B> $ENV{'HTTP_ACCEPT'}</B>
<LI>PATH = <B> $ENV{'PATH'}
<LI>QUERY_STRING = <B> $ENV{'QUERY_STRING'}</B>
<LI>REMOTE_ADDR = <B> $ENV{'REMOTE_ADDR'}</B>
<LI>REQUEST_METHOD = <B> $ENV{'REQUEST_METHOD'}</B>
<LI>SCRIPT_NAME = <B> $ENV{'SCRIPT_NAME'}</B>
<LI>SERVER_NAME = <B> $ENV{'SERVER_NAME'}</B>
<LI>SERVER_SOFTWARE = <B> $ENV{'SERVER_SOFTWARE'}</B>
<LI>SERVER_PORT = <B> $ENV{'SERVER_PORT'}</B>
<LI>SERVER_PROTOCOL = <B> $ENV{'SERVER_PROTOCOL'}</B>
</UL>
</BODY>
</HTML>
bas
programın çıktısı ise aşağıdadır.
· DOCUMENT_ROOT = /home/httpd/htdocs
· GATEWAY_INTERFACE = CGI/1.1
· HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-comet,
application/vnd.ms-powerpoint,application/vnd.ms-excel, application/msword, application/pdf, */*
· PATH = /sbin:/usr/sbin:/bin:/usr/bin
· REMOTE_ADDR = 192.168.100.9
· REQUEST_METHOD = GET
· SCRIPT_NAME = /cgi-bin/test2.pl
· SERVER_NAME = sirius.gazi.edu.tr
· SERVER_SOFTWARE = Apache/1.3.3 (Unix) (Red Hat/Linux)
· SERVER_PORT = 80
· SERVER_PROTOCOL = HTTP/1.1
FORM MAIL KULLANIMI
ornek2.pl programıyla bazı bilgileri server'a göndermiştik. Şimdi aynı bilgileri mail yoluyla
ertan@gazi.edu.tr isimli kullanıcıya (kendimize) mail ile gönderme programını inceleyelim.
Bu internette çok yaygın kullanılır. Form mail olarak bilinir. Amaç genelde sayfa veya server ile ilgili
ziyaretçi önerilerini almaktır.
Web sayfamızdaki form hatırlarsanız aşağıdaki gibiydi.
Bu sayfaya girilen değerleri işleyecek olan programımızın adı fmail.pl olsun.
Yani form tanımındaki İlgili satır tanımı şöyle olacak:
<form action="http://sirius.gazi.edu.tr/cgi-bin/fmail.pl" method="POST">
Program ayrıca Notunuz:(not) kısmına bilgi girilmez ise bu alana mutlaka bilgi girilmesi için uyarsın.
Şimdi bu perl cgi programını (fmail.pl) kodlayalım.
#!/usr/bin/perl
$sysmailprg = '/usr/sbin/sendmail -t';
$alan = 'ertan@gazi.edu.tr';
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n<TITLE>Teşekkürler</TITLE>\n</HEAD>";
print "\n\n<BODY BGCOLOR=\"#FFFFFF\" LINK=\"#CC0000\">\n";
read(STDIN, $gecici_alan, $ENV{'CONTENT_LENGTH'});
if ( $gecici_alan eq '\0')
{ exit(0) };
@ciftler = split(/&/, $gecici_alan);
foreach $cift (@ciftler)
{
($isim, $deger) = split(/=/, $cift);
$deger =~ tr/+/ /;
$deger =~ s/%(..)/pack("C", hex($1))/eg;
$FORM{$isim} = $deger;
}
&bos_cevap unless $FORM{'not'}; # not alanına bir şey girilmemişse
#devreye girecek altprogram
# mail alanın (burada ertan@gazi.edu.tr) alacağı mesajlar
open (MAIL, "|$sysmailprg $alan") || ("$sysmailprg bulunamadı.!\n");
print MAIL "From: $FORM{'email'} ($FORM{'ad'})\n";
print MAIL "Subject: Önerileri içeren Notlar\n\n";
print MAIL "\n\n-----------------------------------------------------------$
print MAIL " $FORM{'not'}\n\n";
print MAIL "\n\n-----------------------------------------------------------$
print MAIL "Browser: $ENV{'HTTP_USER_AGENT'}\n";
print MAIL "Geldiği makina: $ENV{'REMOTE_HOST'}\n";
close (MAIL);
# mail gönderenin browser'ına çıkan mesaj
print "<p><br><center><H3>Notunuzu aldım ve değerlendireceğim</H3><p><br>";
print "<B>İlginize teşekkürler.<PALIGN=\"CENTER\">\n\n";
print "<A HREF=\"mailto:ertan\@sirius.gazi.edu.tr\">Ertan
Turkmen</A></P>\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";
#not alanı boş geçilirse devreye girecek olan alt program kodu
sub bos_cevap {
print "<center><p><br><b>Hic bir not yazmadiniz ... ";
print "Yeniden Deneyiniz !</b>\n";
print "<FORM>\n";
print "<INPUT onclick=history.go(-1) type=button value=Geri>\n";
print "</FONT></FORM></center><p><br>\n";
exit;
}
Şimdi de yukardaki forma verileri girip Yolla tuşuna basalım. Program çalışacak ve e-mail
olarak kullanıcıya (ertan@gazi.edu.tr) gidecek.E-mail mesajı alıcı tarafından şu şekilde
okunacaktır.
Date: Tue, 1 Jan 1999 16:25:55 +0200
From: Atilla Usenmez <atilla_usenmez@yahoo.com>
Subject: Önerileri içeren Notlar
------------------------------------------------------------
Başarılı Çalışmalarınızın devamını dilerim. Kolay Gelsin.
------------------------------------------------------------
Browser : Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Geldiği makina:
ve gönderenin browser sayfasına çıkan mesaj ise aşağıdaki gibi olacaktır.
İlginize
teşekkürler.
Anket Formları
İnternette bolca rastladığımız örneklerden biri de anket formudur.Bu konuyu da görelim.
Formumuz aşağıdaki görünümde olsun.
ve KODU :
<form action="http://sirius.gazi.edu.tr/cgi-bin/ornek8.pl" method="POST">
Adınız:<input type="text" name="ad" size=25><br>
Bu sene kim şampiyon olacak ? <br>
<input type="radio" name="secim" value=1> Beşiktaş
<input type="radio" name="secim" value=2> Trabzonspor
<input type="radio" name="secim" value=3> Galatasaray
<input type="radio" name="secim" value=4> Fenerbahçe
<br><input type="submit" value="Seçimini Gönder">
</form>
Bu formu işleyecek programımızın (ornek8.pl) kodu ise :
#!/usr/bin/perl
print "Content-type:text/html\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/+/ /;
$deger =~ s/%(..)/pack("C", hex($1))/eg;
$FORM{$alan} = $deger;
}
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>Değerlendirme Sonucu !!!</H3><p><br>";
print "<PALIGN=\"CENTER\">\n\n";
print "SAYIN $FORM{'ad'}<br>";
%kim = (
1 => "Beşiktaş",
2 => "Trabzonspor",
3 => "Galatasaray",
4 => "Fenerbahçe"
);
print "$FORM{'secim'}.Seçeneği işaretleyerek,<br>";
print "$kim{$FORM{'secim'}} Futbol Takımını seçtiniz<br>";
print "Anketimize katıldığınız için teşekkürler..<br>";
print "<FORM>\n";
print "<INPUT onclick=history.go(-1) type=button value=Geri>\n";
print "</FONT></FORM>&l