POST isteklerini PHP'de işleriz. NodeJS. POST istekleri nasıl işlenir http istekleri php işleniyor

Tarayıcı istemcileri web sunucusuna bilgi gönderebilir.

Tarayıcı bilgiyi göndermeden önce URL kodlama adı verilen bir şemayı kullanarak onu kodlar. Bu şemada, ad/değer çiftleri eşit işaretlerle birleştirilir ve farklı çiftler bir ve işaretiyle ayrılır.

Ad1=değer1&ad2=değer2&ad3=değer3

Boşluklar kaldırılır ve bir + karakteriyle değiştirilir; alfasayısal olmayan diğer karakterler ise onaltılık değerlerle değiştirilir. Bilgiler kodlandıktan sonra sunucuya gönderilir.

GET yöntemi

GET yöntemi, sayfa isteğine eklenen kodlanmış kullanıcı bilgilerini gönderir. Sayfalar ve kodlanmış bilgiler birbirinden ayrılmış mı? soru işareti.

http://www.test.com/index.htm?name1=value1&name2=value2

  • GET yöntemi, sunucu günlüklerinizde tarayıcının "Konum" alanında görünen uzun bir dize üretir.
  • GET yöntemi yalnızca 1024 karaktere kadar gönderimle sınırlıdır.
  • Sunucuya göndereceğiniz bir parolanız veya başka hassas bilgileriniz varsa asla GET yöntemini kullanmayın.
  • GET, resimler veya metin belgeleri gibi ikili verileri sunucuya aktarmak için kullanılamaz.
  • GET yöntemiyle gönderilen verilere QUERY_STRING ortam değişkeni kullanılarak erişilebilir.
  • PHP, GET yöntemini kullanarak gönderilen tüm bilgilere erişmek için $_GET ilişkisel dizisini sağlar.

if($_GET["isim"] || $_GET["yaş"]) ( echo "Hoş Geldiniz ". $_GET["isim"]; echo "Siz ". $_GET["yaş"]. " yaşındasınız "; çıkış(); )

İsim: Yaş:

POST yöntemi

Yöntem POSTALAMAK Bilgileri HTTP başlıkları aracılığıyla iletir. Bilgi, yöntem durumunda açıklandığı gibi kodlanır. ELDE ETMEK ve başlığa yerleştirildi QUERY_STRING.

  • POST yönteminin gönderilmesi gereken verinin boyutu konusunda herhangi bir sınırı yoktur.
  • POST yöntemi, ikili verilerin yanı sıra ASCII verilerini göndermek için de kullanılabilir.
  • POST yöntemi kullanılarak gönderilen veriler bir HTTP başlığından geçer, dolayısıyla güvenlik HTTP protokolüne bağlıdır. Güvenli HTTP kullanarak bilgilerinizin korunmasını sağlayabilirsiniz.
  • PHP, POST yöntemi kullanılarak gönderilen tüm bilgilere erişmek için $_POST ilişkisel dizisini sağlar.

Kaynak kodunu test.php betiğine yerleştirerek aşağıdaki örneği deneyin.

if($_POST["isim"] || $_POST["yaş"]) ( if (preg_match("[^A-Za-z"-]",$_POST["isim"])) ( die (" geçersiz ad ve ad alfa olmalıdır"); ) echo "Hoş Geldiniz ". $_POST["isim"]; echo "Siz ". $_POST["yaş"]. " yaşındasınız."; çıkış(); )

İsim: Yaş:

$_REQUEST değişkeni

PHP değişkeni $_REQUEST gibi içerikler içeriyor $_GET, $_POST, Bu yüzden $_COOKIE. Değişkeni tartışacağız $_COOKIEÇerezlerden bahsettiğimizde.

PHP $_REQUEST değişkeni, GET ve POST yöntemleri kullanılarak gönderilen form verilerinden sonucu almak için kullanılabilir.

PHP POST isteği gerçekleştirmenin ilk yöntemi file_get_contents kullanmaktır. İkinci yöntem fread'i birkaç başka işlevle birlikte kullanacaktır. Her iki seçenek de gerekli istek başlığı alanlarını doldurmak içinstream_context_create işlevini kullanır.

Kod Açıklaması

$sPD değişkeni aktarılacak verileri içerir. HTTP istek dizesi biçiminde olması gerekir, bu nedenle bazı özel karakterlerin kodlanması gerekir.

Hem file_get_contents fonksiyonunda hem de fread fonksiyonunda iki yeni parametremiz var. Bunlardan ilki use_include_path'tır. HTTP isteği yaptığımız için her iki örnekte de false olacaktır. Yerel bir kaynağı okumak için true değerine ayarlandığında işlev, include_path konumundaki dosyayı arayacaktır.

İkinci parametre, $aHTTP dizisinin değerini alanstream_context_create'in dönüş değeriyle doldurulan bağlamdır.

POST istekleri yapmak için file_get_contents'ı kullanma

PHP'de file_get_contents kullanarak bir POST isteği göndermek için, başlık alanlarını manuel olarak doldurmak ve hangi "sarmalayıcının" kullanılacağını belirtmek için Stream_context_create kullanmanız gerekir - bu durumda HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL'si $sPD = "isim=Jacob&bench=150"; // POST verileri $aHTTP = array("http" => // Kullanılacak sarıcı array("method" => "POST", // İstek yöntemi // İstek başlıkları "header" => "İçerik altında ayarlanır - type: application/x-www-form-urlencoded", "content" => $sPD)); $bağlam =stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $içerik;

POST istekleri yapmak için fread kullanma

POST istekleri yapmak için fread işlevini kullanabilirsiniz. Aşağıdaki örnek, gerekli HTTP istek başlıklarını oluşturmak için Stream_context_create'ı kullanır:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL'si $sPD = "isim=Jacob&bench=150"; // POST verileri $aHTTP = array("http" => // Kullanılacak sarmalayıcı array("method" => "POST", // İstek Yöntemi // İstek başlıkları "header" => "İçerik altında ayarlanır - type: application/x-www-form-urlencoded", "content" => $sPD)); $bağlam =stream_context_create($aHTTP); $tanıtıcı = fopen($sURL, "r", false, $bağlam); $içerikler = ""; while (!feof($tanımlayıcı)) ( $contents .= fread($tanımlayıcı, 8192); ) fclose($tanımlayıcı); echo $içerik;

PHP ile GET İstekleri Yapmak

Artık internetten HTTP ve HTTPS yoluyla içerik indirmek için fread ve file_get_contents kullanmaya odaklanacağız. Bu makalede açıklanan yöntemleri kullanmak için fopen sarmalayıcılar seçeneğini etkinleştirmeniz gerekir. Bunu yapmak için php.ini dosyasında izin_url_fopen parametresini Açık olarak ayarlamanız gerekir.

PHP'de POST ve GET isteklerini gerçekleştirmek, web sitelerine giriş yapmak, web sayfası içeriğini almak veya uygulamaların yeni sürümlerini kontrol etmek için kullanılır. Basit HTTP isteklerinin nasıl oluşturulacağını ele alacağız.

İnternet üzerinden dosya indirmek veya almak için fread kullanma

Web sayfasının okunmasının paketin erişilebilir kısmıyla sınırlı olduğunu unutmayın. Bu yüzden Stream_get_contents ( işlevini kullanmanız gerekir. file_get_contents'a benzer) veya dosyanın sonuna ulaşılana kadar içeriği daha küçük parçalar halinde okumak için bir while döngüsü:

Bir PHP POST isteğinin işlendiği bu durumda, fread fonksiyonunun son argümanı parça boyutuna eşittir. Genellikle 8192'den büyük olmamalıdır ( 8*1024 ).

Daha büyük veya daha küçük olabileceğini ve ayrıca PHP'nin çalıştığı sistemin ayarlarıyla sınırlı olabileceğini unutmayın.

Bir sitenin URL'sini almak için file_get_contents'ı kullanma

Bir dosyayı HTTP üzerinden okurken bu yöntemi kullanmak daha da kolaydır, çünkü parçalar halinde okuma konusunda endişelenmenize gerek yoktur; her şey PHP'de işlenir.

Bu yayın, dost canlısı proje ekibi tarafından hazırlanan “PHP ile POST İstekleri Yapmak” makalesinin çevirisidir.

PHP şu anda web uygulamalarını uygulamak için en popüler dillerden biridir. Bu ders temellerini incelemeye ayrılmıştır. Kazanılan becerilerin pratik uygulamasına vurgu yapılır.

PHP dili, İnternet'teki belirli bir pratik sorunu çözmek için oluşturuldu (bu sorunu kursun ilk dersini okuyarak öğrenebilirsiniz). Ayrıca teorik akıl yürütmeyle dikkatimizi çok fazla dağıtmamaya çalışacağız ve her derste belirli bir sorunu çözmeye çalışacağız. Örneklerin çoğu gerçek hayattaki bir sistemden alınmıştır: bilgisayar bilimi tarihinin sanal bir müzesi. Kursun ilk kısmı sözdizimi ve kontrol yapılarının temellerini incelemeye ayrılmıştır. Bundan sonra istemci-sunucu teknolojisi PHP dilinin ana uygulama alanı olarak kabul edilir. Daha sonra bizce en kullanışlı yerleşik işlevleri incelemeye ve onların yardımıyla pratik sorunları çözmeye geçiyoruz. PHP dilindeki nesne modeli en zengin model olmasa da, temel varlığı nesne veri modellerini doğal bir şekilde tanımlamanıza olanak tanır. Temel model olarak sanal bilgisayar bilimleri müzesinin belge modeli dikkate alınacaktır. Bundan sonra, bir dizi uygulamalı husus dikkate alınacaktır: dosya sistemiyle, veritabanıyla, dizelerle, oturumlarla, DOM XML ile çalışmak - tüm bunlar, dilin pratik kullanımının temel görevlerini dikkate almamızı sağlayacaktır.

Yukarıdaki tablodan görülebileceği gibi Apache sunucusu lider konumdadır. Aksi belirtilmediği sürece web sunucuları hakkında söyleyeceğimiz her şey Apache merkezlidir. İlk dersimizde bilgisayarınıza nasıl kurulacağından zaten bahsetmiştik. Ve şimdi söz verdiğimiz gibi HTTP protokolüne dönelim.

HTTP protokolü ve sunucuya veri aktarma yöntemleri

İnternet, ikili bilgilerin aktarımının fiziksel yönleriyle ilgilenen fiziksel katmandan, kullanıcı ile ağ arasında arayüz sağlayan uygulama katmanına kadar çok katmanlı bir prensip üzerine inşa edilmiştir.

HTTP (Köprü Metni Aktarım Protokolü), İnternet üzerinde köprü metni bilgilerinin alışverişi için tasarlanmış bir uygulama katmanı protokolüdür.

HTTP, sunucuya gönderilen isteğin amacını belirtmek için bir dizi yöntem sağlar. Bu yöntemler, yöntemin uygulanması gereken kaynağı belirtmek için Evrensel Kaynak Bulucu (URL) veya Evrensel Kaynak Adı olarak bir Evrensel Kaynak Tanımlayıcısının kullanıldığı referans disiplinine dayanmaktadır. ,URN).

HTTP protokolü kullanıldığında ağ üzerinden mesajlar, İnternet posta mesajı formatına (RFC-822) veya MIME (Çok Amaçlı İnternet Posta Değişimi) mesaj formatına benzer bir formatta iletilir.

HTTP, SMTP (E-posta Protokolü), NNTP (Haber Aktarım Protokolü), FTP (Dosya Aktarım Protokolü), Gopher ve WAIS gibi mevcut İnternet protokollerine erişim sağlayan çeşitli kullanıcı programları ve ağ geçidi programları arasındaki iletişim için kullanılır. HTTP, bu tür ağ geçitlerinin verileri proxy sunucular üzerinden kayıpsız olarak aktarmasına izin verecek şekilde tasarlanmıştır.

Protokol istek/yanıt ilkesini uygular. İstekte bulunan program (istemci), yanıt veren programla (sunucu) etkileşimi başlatır ve aşağıdakileri içeren bir istek gönderir:

Erişim yöntemi;

URI adresi;

Protokol sürümü;

İletilen veri türü hakkında bilgi, talepte bulunan müşteri hakkında bilgi ve muhtemelen mesajın içeriği (gövdesi) içeren bir mesaj (MIME'ye benzer şekilde).

Sunucu yanıtı şunları içerir:

Protokol sürümünü ve dönüş kodunu (başarılı veya hata) içeren bir durum satırı;

Sunucu bilgilerini, meta bilgilerini (yani mesajın içeriğine ilişkin bilgileri) ve mesaj gövdesini içeren bir mesaj (MIME benzeri formda).

Protokol, istemci ile sunucu arasındaki bağlantıyı kimin açıp kapatması gerektiğini belirtmez. Uygulamada, bağlantı genellikle istemci tarafından açılır ve sunucu, yanıtı gönderdikten sonra bağlantıyı sonlandırmaya başlar.

İsteklerin sunucuya gönderildiği forma daha yakından bakalım.

Müşteri Talep Formu

İstemci, isteği sunucuya iki biçimden biriyle gönderir: tam veya kısaltılmış. İlk formdaki talebe tam talep, ikinci formdaki talebe ise basit talep denir.

Basit bir istek, bir erişim yöntemi ve bir kaynak adresi içerir. Resmi olarak bu şu şekilde yazılabilir:

<Простой-Запрос> := <Метод> <символ пробел>
<Запрашиваемый-URI> <символ новой строки>

Yöntem GET, POST, HEAD, PUT, DELETE ve diğerleri olabilir. Bunlardan en yaygın olanlarından biraz sonra bahsedeceğiz. İstenen URI çoğunlukla kaynağın URL'sidir.

Basit bir istek örneği:

http://phpbook.info/ ALIN

Burada GET erişim yöntemidir, yani. istenen kaynağa uygulanması gereken bir yöntemdir ve http://phpbook.info/, istenen kaynağın URL'sidir.

Tam bir istek, bir durum satırı, birkaç başlık (istek başlığı, genel başlık veya içerik başlığı) ve muhtemelen bir istek gövdesi içerir. Resmi olarak tam bir talebin genel formu şu şekilde yazılabilir:

<Полный запрос> := <Строка Состояния>
(<Общий заголовок>|<Заголовок запроса>|
<Заголовок содержания>)
<символ новой строки>
[<содержание запроса>]

Buradaki köşeli parantezler isteğe bağlı başlık öğelerini belirtir ve alternatif seçenekler dikey bir çubuk aracılığıyla listelenir. Öğe<Строка состояния>istek yöntemini ve kaynak URI'sini (basit bir istek gibi) ve ayrıca kullanılan HTTP protokolünün sürümünü içerir. Örneğin harici bir programı çağırmak için aşağıdaki durum satırını kullanabilirsiniz:

POST http://phpbook.info/cgi-bin/test HTTP/1.0

Bu durumda POST yöntemi ve HTTP sürüm 1.0 kullanılır.

Her iki istek biçiminde de talep edilen kaynağın URI'si önemli bir rol oynar. En yaygın URI, kaynak URL'si biçiminde kullanılır. Sunucuya erişirken URL'nin hem tam biçimini hem de basitleştirilmiş biçimini kullanabilirsiniz.

Tam form, erişim protokolünün türünü, kaynak sunucusunun adresini ve sunucudaki kaynağın adresini içerir (Şekil 4.2).

Kısaltılmış biçimde, yalnızca sunucu kökündeki kaynağın konumunu belirten protokol ve sunucu adresi atlanır. İsteğin başka bir sunucuya iletilmesi mümkünse tam form kullanılır. Çalışma yalnızca bir sunucuyla gerçekleşirse, genellikle kısaltılmış form kullanılır.


Pirinç. 4.2. Tam URL formu

Yöntemler

Daha önce de belirtildiği gibi, sunucuya yapılan herhangi bir istemci isteği bir yöntem spesifikasyonuyla başlamalıdır. Yöntem müşterinin isteğinin amacını iletir. HTTP protokolü pek çok yöntemi destekler, ancak aslında yalnızca üçü kullanılır: POST, GET ve HEAD. GET yöntemi, kaynak isteğinde URI tarafından tanımlanan herhangi bir veriyi almanıza olanak tanır. URI bir programa işaret ediyorsa, o zaman metin değil, programın işleminin sonucu döndürülür (tabii ki metin, programın işleminin sonucu olmadığı sürece). İsteği işlemek için gereken ek bilgiler isteğin kendisinde (durum satırında) yerleşiktir. GET yöntemini kullanırken, istenen gerçek bilgi (örneğin bir HTML belgesinin metni) kaynak gövdesi alanına döndürülür.

GET yönteminin bir çeşidi vardır - koşullu GET. Bu yöntem sunucuya, isteğin yalnızca istek başlığının if-Modified-Since alanındaki koşulun doğru olması durumunda yanıtlanması gerektiğini söyler. Daha spesifik olarak, eğer kaynak if-Modified-Since'de belirtilen tarihten bu yana değiştirilmişse, kaynak gövdesi isteğe yanıt olarak iletilir.

HEAD yöntemi GET yöntemine benzer ancak kaynak gövdesini döndürmez ve koşullu bir karşılığı yoktur. HEAD yöntemi bir kaynak hakkında bilgi edinmek için kullanılır. Bu, örneğin hiper metin bağlantılarını test etme sorununu çözerken yararlı olabilir.

POST yöntemi kaynak açıklamaları, haber ve mail mesajları, veritabanına eklenecek veriler gibi bilgilerin sunucuya aktarılması için tasarlanmıştır. büyük hacimli ve oldukça önemli bilgilerin iletilmesi için. GET ve HEAD yöntemlerinden farklı olarak POST, form alanlarından veya diğer giriş kaynaklarından alınan bilgiler olan kaynak gövdesini aktarır.

Şu ana kadar sadece teorileştirdik ve temel kavramları öğrendik. Şimdi tüm bunları pratikte nasıl kullanacağınızı öğrenmenin zamanı geldi. Dersin ilerleyen kısımlarında sunucuya isteklerin nasıl gönderileceğine ve yanıtlarının nasıl işleneceğine bakacağız.

Sunucuya Veri Göndermek için HTML Formlarını Kullanma

Veriler sunucuya nasıl aktarılır? Bu amaçla HTML dilinin özel bir yapısı vardır - formlar. Formlar kullanıcıdan bilgi almak için tasarlanmıştır. Örneğin, kullanıcının sitenin hangi sayfalarına erişmesine izin verilebileceğini belirlemek için kullanıcının kullanıcı adını ve şifresini bilmeniz gerekir. Veya onunla iletişim kurabilmek için kullanıcının kişisel verilerine ihtiyacınız var. Formlar tam olarak bu tür bilgilerin girilmesi için kullanılır. Bunlara metin girebilir veya listeden uygun seçenekleri seçebilirsiniz. Formda yazılan veriler işlenmek üzere sunucudaki özel bir programa (örneğin bir PHP betiği) gönderilir. Kullanıcı tarafından girilen verilere bağlı olarak bu program çeşitli web sayfaları oluşturabilir, veritabanına sorgular gönderebilir, çeşitli uygulamaları başlatabilir vb.

HTML formlarının sözdizimini anlayalım. Birçoğu buna aşina olabilir, ancak önemli olduğu için yine de ana noktaları tekrarlayacağız.

Yani HTML'de form oluşturmak için FORM etiketi kullanılır. İçinde bir veya daha fazla INPUT komutu bulunur. FORM etiketinin eylem ve yöntem niteliklerini kullanarak sırasıyla form verilerini işleyecek programın adını ve istek yöntemini belirtirsiniz. INPUT komutu istenen bilginin türünü ve çeşitli özelliklerini belirtir. Form verileri, gönderme türünün giriş düğmesine basıldıktan sonra gönderilir. Katılımcıları yazışmalı programlama okuluna kaydetmek için bir form oluşturalım.

Tarayıcı tarafından işlendikten sonra bu dosya şuna benzer:


Pirinç. 4.3.Örnek HTML formu

HTML formları bu şekilde oluşturulur ve şöyle görünür. Bunları nasıl yaratacağımızı öğrendiğimizi veya hatırladığımızı varsayacağız. Gördüğümüz gibi formda veri aktarım yöntemini belirtebilirsiniz. GET veya POST yöntemini belirtirseniz ne olacağını, farkın ne olacağını görelim.

GET yöntemi için

GET yöntemini kullanarak form verilerini gönderirken, form içeriği URL'ye soru işaretinden sonra ve işareti & ile birleştirilmiş ad=değer çiftleri olarak eklenir:

eylem?ad1=değer1&ad2=değer2&ad3=değer3

Burada eylem, formu işlemesi gereken programın URL'sidir (ya form etiketinin eylem özelliğinde belirtilen program ya da bu özellik atlanırsa geçerli programın kendisi). isim1, isim2, isim3 isimleri form elemanlarının isimlerine, değer1, değer2, değer3 ise bu elemanların değerlerine karşılık gelir. = ve & dahil tüm özel karakterler bu parametre adlarından veya değerlerinden çıkarılacaktır. Bu nedenle form elemanlarının adlarında veya değerlerinde tanımlayıcılarda bu sembolleri ve Kiril karakterlerini kullanmamalısınız.

Giriş alanına bir servis karakteri girerseniz, onaltılık koduyla iletilecektir, örneğin $ sembolü %24 ile değiştirilecektir. Rusça harfler de aynı şekilde iletilmektedir.

Metin ve şifre giriş alanları için (bunlar type=text ve type=password özniteliğine sahip giriş öğeleridir), değer, kullanıcının girdiği şey olacaktır. Kullanıcı böyle bir alana herhangi bir şey girmezse, sorgu dizesinde name= öğesi mevcut olacaktır; burada name, bu form öğesinin adına karşılık gelir.

Onay kutusu ve radyo düğmesi düğmeleri için değer, düğme işaretlendiğinde VALUE özelliği tarafından belirlenir. Sorgu dizesi oluşturulurken işaretlenmeyen düğmeler tamamen göz ardı edilir. Gerekirse birden fazla onay kutusu düğmesi aynı NAME özelliğine (ve farklı VALUE'lara) sahip olabilir. Radyo düğmesi türündeki düğmeler, sunulan tüm seçeneklerden biri için tasarlanmıştır ve bu nedenle aynı NAME özniteliğine ve farklı VALUE özniteliklerine sahip olmalıdır.

Prensip olarak GET yöntemini kullanarak veri aktarmak için bir HTML formu oluşturmaya gerek yoktur. İstediğiniz değişkenleri ve değerlerini URL dizesine ekleyebilirsiniz.

http://phpbook.info/test.php?id=10&user=pit

Bu bağlamda, GET yöntemini kullanarak veri aktarımının önemli bir dezavantajı vardır - herkes parametre değerlerini tahrif edebilir. Bu nedenle, şifre korumalı sayfalara erişmek veya programın veya sunucunun güvenliğini etkileyen bilgileri iletmek için bu yöntemin kullanılmasını önermiyoruz. Ayrıca kullanıcının değiştirmesine izin verilmeyen bilgileri aktarmak için GET yöntemini kullanmamalısınız.

Tüm bu dezavantajlara rağmen, komut dosyalarında hata ayıklama yaparken (o zaman iletilen değişkenlerin değerlerini ve adlarını görebilirsiniz) ve güvenliği etkilemeyen parametreleri iletirken GET yöntemini kullanmak oldukça kullanışlıdır.

POST yöntemi için

Form içeriği, GET yöntemiyle tamamen aynı şekilde kodlanır (yukarı bakın), ancak URL'ye bir dize eklemek yerine istek içeriği, POST işleminin bir parçası olarak bir veri bloğu olarak gönderilir. ACTION özelliği mevcutsa, orada bulunan URL değeri bu veri bloğunun nereye gönderileceğini belirler. Bu yöntem, daha önce de belirtildiği gibi, büyük veri bloklarının aktarılması için önerilir.

Kullanıcı tarafından girilen ve POST yöntemi kullanılarak sunucuya gönderilen bilgiler, eylem özniteliği tarafından belirtilen programa standart giriş olarak veya bu öznitelik atlanırsa geçerli komut dosyasına sunulur. Gönderilen dosyanın uzunluğu CONTENT_LENGTH ortam değişkenine, veri türü ise CONTENT_TYPE değişkenine iletilir.

Veriler GET'te olduğu gibi başlıkta değil, isteğin gövdesinde gönderildiğinden, verileri yalnızca bir HTML formu kullanarak POST yöntemini kullanarak gönderebilirsiniz. Buna göre parametrelerin değerini yalnızca forma girilen değeri değiştirerek değiştirebilirsiniz. POST kullanırken kullanıcı sunucuya gönderilen verileri görmez.

POST isteklerinin temel avantajı, GET istekleriyle karşılaştırıldığında daha fazla güvenlik ve işlevselliğe sahip olmalarıdır. Bu nedenle, POST yöntemi daha çok önemli bilgilerin yanı sıra büyük ölçekli bilgilerin iletilmesi için kullanılır. Ancak bu mekanizmanın güvenliğine tamamen güvenmemelisiniz, çünkü POST istek verileri, örneğin makinenizde bir HTML dosyası oluşturup onu gerekli verilerle doldurarak da sahte olabilir. Ayrıca tüm istemciler POST yöntemini kullanamaz, bu da kullanım durumlarını sınırlar.

Sunucuya herhangi bir yöntemle veri gönderilirken, yalnızca kullanıcı tarafından girilen veriler değil, aynı zamanda ortam değişkenleri adı verilen, istemciyi karakterize eden, işlem geçmişini, dosya yollarını vb. bir dizi değişken de iletilir. Ortam değişkenlerinden bazıları şunlardır:

REMOTE_ADDR – isteği gönderen ana bilgisayarın (bilgisayarın) IP adresi;

REMOTE_HOST – isteğin gönderildiği ana bilgisayar adı;

HTTP_REFERER – mevcut betiğe bağlantı veren sayfanın adresi;

REQUEST_METHOD – istek gönderilirken kullanılan yöntem;

QUERY_STRING – URL'de soru işaretinden sonra yer alan bilgi;

SCRIPT_NAME – yürütülmesi gereken programın sanal yolu;

HTTP_USER_AGENT – istemcinin kullandığı tarayıcı hakkında bilgi

Şu ana kadar sadece client isteklerinin özel bir program kullanılarak sunucu üzerinde işlendiğinden bahsettik. Aslında bu programı PHP de dahil olmak üzere kendimiz yazabiliriz ve alınan verilerle ne istersek onu yapacaktır. Bu programı yazabilmek için PHP'nin bu amaç için sunduğu bazı kural ve araçlara aşina olmanız gerekir.

Bir PHP betiğinde, istemci tarafından HTTP yoluyla gönderilen verilere erişmenin birkaç yolu vardır. PHP 4.1.0'dan önce bu tür verilere erişim, aktarılan değişkenlerin adlarıyla gerçekleştiriliyordu (verilerin “değişken adı, “=” sembolü, değişken değeri” çiftleri şeklinde aktarıldığını unutmayın). Bu nedenle, örneğin, First_name=Nina iletilirse, komut dosyasının içinde Nina değerine sahip $first_name değişkeni belirir. Verilerin hangi yöntemle aktarıldığını ayırt etmek gerekiyorsa, anahtarları aktarılan değişkenlerin adları olan $HTTP_POST_VARS ve $HTTP_GET_VARS ilişkisel dizileri kullanıldı ve değerler sırasıyla değerlerdi ​bu değişkenlerden. Dolayısıyla, eğer ilk_adı=Nina çifti GET yöntemiyle iletilirse, o zaman $HTTP_GET_VARS["first_name"]="Nina".

Aktarılan değişkenlerin adlarını doğrudan bir programda kullanmak güvenli değildir. Bu nedenle, PHP 4.1.0'dan başlayarak, HTTP istekleri yoluyla iletilen değişkenlere erişmek için özel bir dizi olan $_REQUEST'in kullanılmasına karar verildi. Bu dizi, POST ve GET yöntemlerinin yanı sıra HTTP çerezleri kullanılarak aktarılan verileri içerir. Bu süper küresel bir ilişkisel dizidir, yani. değerleri, ilgili değişkenin (form öğesi) adını anahtar olarak kullanarak programın herhangi bir yerinde elde edilebilir.

Örnek 4.2. Yukarıdaki örnekte olduğu gibi, katılımcıları programlama yazışma okuluna kaydetmek için bir form oluşturduğumuzu varsayalım. Daha sonra bu formu işleyen 1.php dosyasına aşağıdakileri yazabilirsiniz:

$str = "Merhaba,
".$_REQUEST["ad_isim"]. "
".$_REQUEST["soyadı"]."!
";
$str .="Bir kursa çalışmayı seçtiniz
".$_REQUEST["kurs"];
echo $str;
?>

Daha sonra forma “Vasya” adını, “Petrov” soyadını girip tüm kurslar arasından PHP kursunu seçersek, tarayıcı ekranında aşağıdaki mesajı alırız:

Merhaba Vasya Petrov!

$_REQUEST dizisinin tanıtılmasından sonra, $HTTP_POST_VARS ve $HTTP_GET_VARS dizileri tutarlılık açısından sırasıyla $_POST ve $_GET olarak yeniden adlandırıldı, ancak PHP'nin önceki sürümleriyle uyumluluk nedeniyle kullanımdan kaybolmadılar. Öncekilerden farklı olarak, $_POST ve $_GET dizileri süper küresel hale geldi; doğrudan ve işlevler ve yöntemler içinden erişilebilir.

Bu dizilerin kullanımına bir örnek verelim. Diyelim ki name_name, last_name, kurs isimli girdi elemanlarını içeren bir formu işlememiz gerekiyor (örneğin yukarıdaki form.html). Veriler POST yöntemi kullanılarak aktarılmıştır ve diğer yöntemlerle aktarılan verileri işlemek istemiyoruz. Bu şöyle yapılabilir:

$str = "Merhaba,
".$_POST ["ad_adı"]."
".$_POST ["soyadı"] ."!
";
$str .= "Bir derse çalışmayı seçtiniz ".
$_POST["kurs"];
echo $str;
?>

Daha sonra tarayıcı ekranında “Vasya” adını, “Petrov” soyadını girip tüm kurslar arasından PHP kursunu seçersek, önceki örnekte olduğu gibi bir mesaj göreceğiz:

Merhaba Vasya Petrov!
Bir PHP kursuna çalışmayı seçtiniz

PHP 4.1.0 öncesindeki komut dosyalarını işleme yeteneğini sürdürmek için, değişkenlere doğrudan adlarına göre erişime izin veren veya erişimi reddeden Register_globals yönergesi tanıtıldı. Register_globals=On parametresi PHP ayarlar dosyasındaysa, GET ve POST yöntemleri kullanılarak sunucuya iletilen değişkenlere yalnızca adlarıyla erişilebilir (ör. $first_name yazabilirsiniz). Register_globals=Off ise, $_REQUEST["first_name"] veya $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"] yazmanız gerekir. Güvenlik açısından bu yönergeyi devre dışı bırakmak daha iyidir (ör., Register_globals=Off). Register_globals yönergesi etkinleştirildiğinde yukarıda listelenen diziler aynı zamanda istemci tarafından iletilen verileri de içerecektir.

Bazen isteği göndermek için kullanılan yöntem veya isteği gönderen bilgisayarın IP adresi gibi bir ortam değişkeninin değerini bilmeniz gerekir. Bu bilgiyi getenv() fonksiyonunu kullanarak alabilirsiniz. Adı kendisine parametre olarak iletilen ortam değişkeninin değerini döndürür.

getenv("REQUEST_METHOD");
// kullanılan yöntemi döndürecek
echo getenv("REMOTE_ADDR");
// kullanıcının IP adresini gösterecek,
// isteği kim gönderdi
?>

Söylediğimiz gibi GET yöntemi kullanılıyorsa kaynak URL’sine değişken_adı=değer çiftleri şeklinde bir sorgu dizesi eklenerek veriler aktarılır. URL'deki soru işaretinden sonraki her şey şu komut kullanılarak alınabilir:

getenv("QUERY_STRING");

Bu sayede GET yöntemini kullanarak verileri başka bir biçimde aktarmak mümkündür. Örneğin, artı işaretini kullanarak yalnızca birkaç parametrenin değerini belirtebilirsiniz ve komut dosyasında sorgu dizesini parçalara ayırabilir veya yalnızca bir parametrenin değerini iletebilirsiniz. Bu durumda $_GET dizisinde anahtarı bu değere eşit olan boş bir eleman (sorgu dizisinin tamamı) görünecek ve sorgu dizesinde karşılaşılan “+” karakterinin yerine alt çizgi “_” gelecektir.

POST yönteminde veriler yalnızca formlar kullanılarak iletilir ve kullanıcı (istemci) sunucuya hangi verilerin gönderildiğini görmez. Bunları görmek için bilgisayar korsanının formumuzu kendisininkiyle değiştirmesi gerekir. Daha sonra sunucu, yanlış formun işlenmesinin sonuçlarını yanlış yere gönderecektir. Bunu önlemek için verinin gönderildiği sayfanın adresini kontrol edebilirsiniz. Bu, getenv() işlevi kullanılarak tekrar yapılabilir:

getenv("HTTP_REFERER");

Şimdi dersin başında formüle edilen problemi çözmenin zamanı geldi.

PHP kullanarak bir isteğin işlenmesine örnek

Görevin ne olduğunu hatırlayalım ve formülasyonunu netleştirelim. Katılımcıları yazışmalı programlama okuluna kaydetmek için bir form yazmanız ve kayıttan sonra katılımcıya bir mesaj göndermeniz gerekir. Bu mesaja evrensel mektup adını verdik ama önceki dersimizde oluşturduğumuz mektuptan biraz farklı olacak. Burada ayrıca spam gönderenler gibi olmamak için e-postayla hiçbir şey göndermeyeceğiz, ancak sadece bu mesajı oluşturup tarayıcı ekranında görüntüleyeceğiz. Yukarıda kayıt formunun ilk versiyonunu zaten sunmuştuk. Bunu, her kayıt memurunun katılmak istediği kadar ders seçebileceği şekilde değiştireceğiz ve kayıt formunun alındığını onaylamayacağız.

Burada her şey oldukça basit ve net. Dikkat edilmesi gereken tek şey, onay kutusu öğesinin değerlerinin iletilme şeklidir. Eleman adına kurs yazdığımızda bu, ilk işaretlenen onay kutusu öğesinin kurs dizisinin ilk öğesine yazılacağı, ikinci işaretlenen onay kutusunun ikinci dizi öğesine yazılacağı vb. anlamına gelir. Elbette onay kutusu öğelerine farklı adlar verebilirsiniz, ancak çok sayıda ders varsa bu, veri işlemeyi karmaşık hale getirecektir.

Tüm bunları ayrıştırıp işleyecek olan betiğin adı 1.php'dir (form, özellikle action özelliğinde yazılan bu dosyaya atıfta bulunur). Varsayılan olarak iletim için GET yöntemi kullanılır, ancak biz POST'u belirledik. Kayıtlı kişiden alınan bilgilere dayanarak, komut dosyası karşılık gelen bir mesaj oluşturur. Eğer kişi bazı dersleri seçmişse, bu derslerin ne zaman yapılacağına ve dersleri verecek öğretim elemanlarına ilişkin bir mesaj alacaktır. Bir kişi hiçbir şey seçmediyse, Yazışma Programcıları Okulu'nun (ZSH) bir sonraki toplantısı hakkında bir mesaj görüntülenir.

HTML formları, kullanıcı tarafından girilen verilerin daha fazla işlenebileceği bir sunucuya gönderilmesine olanak tanır. Form bakımı iki aşamada gerçekleştirilir. Formun ilk önce kullanıcıya sunulması, kullanıcının verileri doldurması ve ardından sunucuya göndermesi gerekir. Her formun, kullanıcı tarafından gönderilen verilerin işlenmesi için yüklenmesi gereken bir açılış web sayfası vardır. Bu genellikle formu oluşturan aynı komut dosyasıdır. Bu durumda, PHP kodu, formu oluşturmak için betiğin tekrar çağrılıp çağrılmayacağına veya alınan verileri işlemeye başlayıp başlamayacağına karar vermek için formdaki verileri kontrol eder.

Dikkat! Dersin modası geçmiş. Bu konuyla ilgili yeni dersler Yeni Başlayanlar için PHP kursunda yer almaktadır..

Çoğu durumda, formların sunucuya gönderilmesi bir tür veritabanı çalışmasını gerektirir. Örneğin, bir veritabanı arama işlemi, ister forum gönderilerini, kullanıcıları veya bir blogu aramak olsun, pek çok farklı uygulama için gerekli bir eylemdir. Her durumda bu işlem kullanıcının hayatını kolaylaştırabilir. Çünkü Bu noktada PHP ve MySQL DBMS etkileşimine henüz aşina değiliz, bu yazıda basit form işleme örneklerine bakacağız ve benim için asıl görev, bilgilerin PHP dili kullanılarak nasıl aktarıldığını göstermektir. .

PHP dilini kullanarak bilgi aktarma

Bu bölümde verilerin web sayfaları arasında nasıl aktarılabileceğine ilişkin temel bilgiler verilmektedir. Bu bilgilerin bir kısmı yalnızca PHP teknolojisiyle ilgili olmayıp, PHP ve HTML araçlarının etkileşimini açıklar veya HTTP protokolünün kendisiyle ilgilidir.

HTTP protokolünde durum desteğinin olmaması

Herhangi bir web teknolojisinin her zaman akılda tutulması gereken en önemli özelliği, HTTP protokolünün kendisinin durumsuz olmasıdır. Bu, her HTTP isteğinin (çoğu durumda HTML sayfası, .jpg dosyası, stil sayfası vb. gibi tek bir kaynağı alma ve teslim etme isteği anlamına gelir) diğer tüm isteklerden bağımsız olduğu anlamına gelir. müşterinin kimliğine ilişkin her türlü bilgiyi içerir ve bilgisayarın belleğinde iz bırakmaz.

Site gezinmeyi sağlayacak şekilde tasarlanmış olsa bile, yani. bir sayfadan diğerine geçiş kesinlikle tek yönde gerçekleşir (diyelim ki 1. sayfa yalnızca 2. sayfaya gidiyor, o da yalnızca 3. sayfaya gidiyor vb.), HTTP protokolü destek araçları bilgi içermez ve bir kullanıcının 2. sayfayı görüntüleyen kişinin daha önce 1. sayfayı ziyaret etmiş olması gerekir. 1. sayfadaki bir değişkene bir değer atayamaz ve bu değerin HTML kullanılarak 2. sayfaya aktarılmasını bekleyemezsiniz. HTML kodu bir formu görüntülemek için kullanılabilir ve bu kod bilgi girmek için bile kullanılabilir, ancak girilen bilgiyi başka bir sayfaya veya programa aktarmak için bazı ek araçlar kullanılmadığı sürece, değişkene atanan değer hareket ettikten sonra kaybolacaktır. başka bir sayfaya.

PHP gibi form işleme teknolojileri tam olarak bu sorunu çözmek için tasarlanmıştır. PHP, önceki sayfadan diğerine aktarılan bir değişkenin değerini yakalamanıza ve bu değeri daha sonra kullanmak üzere kullanılabilir hale getirmenize olanak tanır. Görünüşe göre PHP teknolojisi, bu tür veri aktarım işlevlerini son derece iyi bir şekilde gerçekleştirme yeteneği sağlıyor, böylece bir web sitesinin işleyişini sağlamayla ilgili çok çeşitli sorunları çözmek için gerekli araçları hızlı ve kolay bir şekilde dağıtmanıza olanak tanıyor.

HTML formları, az sayıda değeri belirli bir sayfadan web sitesindeki herhangi bir başka sayfaya aktarmanın kolay bir yolunu sağlar. Gelecekteki bir makalede ele alınacak olan çerezler ve oturumlar gibi birçok sayfa görüntülemesinde durumu korumanın daha uzun süreli başka yolları da vardır. Bu makale esas olarak, dinamik olarak oluşturulmuş sayfalar oluşturmak ve form verilerini işlemek için GET ve POST yöntemlerini HTTP protokolüyle birlikte kullanan web sayfaları arasında bilgi aktarmanın en basit yollarına odaklanmaktadır.

Parametreleri AL

GET yöntemi, Tekdüzen Kaynak Tanımlayıcı URI biçiminde temsil edilen bir sorgu dizesinin parçası olarak parametreleri önceki sayfadan sonrakine geçirir. Bir formu işlemek için GET yöntemini kullandığınızda, formun action özelliği tarafından tanımlanan URL'nin ardından sınırlayıcıdan sonra bir soru işareti gelir, ardından belirtilen değişken adları ve değerleri gelir ve ardından dizenin tamamı işleme aracısına (bu durumda web sunucusuna) iletilir.

Aşağıda GET yöntemini kullanan bir HTML formu örneği verilmiştir (bu işaretlemeyi yazın ve dosyayı sportsselect.html olarak kaydedin):

PHP'nin Temelleri

Favori sporunuzu seçin

Kullanıcı seçimini yapıp Gönder düğmesini tıkladığında, tarayıcı aşağıdaki öğeleri gösterilen sırayla, öğeler arasında boşluk olmayacak şekilde bağlayacaktır:

  • Eylem sözcüğünden sonra tırnak içinde URL (http://localhost/sports.php).
  • Aşağıdaki karakterlerin bir GET dizesi oluşturduğunu belirten soru işareti (?)
  • Ad değişkeni, eşittir işareti (=) ve karşılık gelen değer parametresi (değer=Hokey).
  • Ve işareti (&) ve ardından ad=değer çifti (varsa).

Böylece tarayıcı aşağıdaki URL dizesini oluşturacaktır:
http://localhost/sports.php?sport=Hokey

Tarayıcı daha sonra ortaya çıkan URL dizesini kendi adres alanı içinde yeni bir istek olarak yeniden yönlendirir. Formun gönderildiği aşağıdaki PHP betiği (sports.php), sorgu dizesinin son kısmından GET değişken değerlerini getirir, bu değişkenleri ve değişken değerlerini $_GET süper küresel dizisine (olacak) ekler. kısaca açıklanacaktır) ve bu değerlerle gerekli bazı eylemleri gerçekleştirir; bu durumda ekleme işlemi bir metin dizesinde gerçekleşir.

Aşağıda yukarıdaki HTML formu için PHP form işleyicisini gösteren bir kod örneği bulunmaktadır:

Favori spor

En sevdiğiniz spor

Önceki sayfada HTML form alanına name="sport" özelliğiyle girilen değerin artık $_GET["sport"] adında bir PHP değişkeni olarak mevcut olduğunu unutmayın. Aşağıdaki şekil bu örneğin nasıl çalıştığını göstermektedir:

Şimdi sayfadan sayfaya aktarılan değerlere nasıl ulaşabileceğinizi tam olarak anlatmamız gerekiyor. Bu makalede, formlarda kullanılan değerleri aktarmanın iki ana yöntemi anlatılmaktadır - GET ve POST. Her yöntemin kendisiyle ilişkilendirilmiş bir süper küresel dizisi vardır. Süper küresel diziler "Değişkenler ve Sabitler" makalesinde daha ayrıntılı olarak anlatılmaktadır. Süper küresel dizilerin diğer dizilerden ayırt edici bir özelliği, adında alt çizgi biçiminde bir önekin bulunmasıdır.

Form işlemcisi, GET yöntemi kullanılarak gönderilen her öğeye $_GET dizisine erişerek ve POST yöntemi kullanılarak gönderilen her öğeye $_POST dizisine erişerek erişir. Süper küresel bir dizinin herhangi bir öğesine erişmek için kullanılan sözdizimsel yapı basit ve tamamen aynıdır:

$_array_name["dizin_adı"]

Burada indeks_adı, ad-değer çiftinin ad kısmıdır (GET yöntemi için) veya HTML form alanının adıdır (POST yöntemi için). Önceki örneği takip edersek, $_GET["sport"], "sport" adlı formun select öğesinin değerini belirtir; bu değer, orijinal dosya üzerinde gerçekleştirilen bir GET işlemi kullanılarak iletildi. Form işleyicisi, verilerin gönderildiği yönteme karşılık gelen bir dizi kullanmalıdır. Özellikle bu örnekte, orijinal form POST yöntemini kullanarak herhangi bir veri göndermediğinden $_POST["sport"] değeri tanımsızdır.

GET form işleme yönteminin POST yöntemine göre önemli bir avantajı vardır; aslında her seferinde mevcut duruma uygun yeni bir URL sorgu dizesi oluşturmanıza olanak tanır. Kullanıcılar daha sonra bu sayfaya yer işareti koyabilir. Öte yandan, POST yöntemi kullanılarak gönderilen formların sonuçları yer imlerine eklenemez.

İstenilen işlevselliğin GET parametreleri kullanılarak elde edilebilmesi, GET yönteminin kullanılması gerektiği anlamına gelmez. Çoğu form işleme türünde bulunan GET yönteminin dezavantajları çok önemlidir. 1997'de yayınlanan orijinal HTML 4.0 çalışma spesifikasyonu bu yöntemi önermiyordu. GET yönteminin başlıca dezavantajları aşağıda sıralanmıştır:

  • Kullanıcı adı ve şifre ekranda tamamen göründüğü için GET yöntemi kayıt pencereleri oluşturmak için geçerli değildir ve bu verilerin ziyaret edilen sayfa hakkında bilgi olarak müşterinin tarayıcısının hafızasında saklanması da mümkündür.
  • Veri setinin kendisi de dahil olmak üzere her GET aktarım işlemi web sunucusunda günlüğe kaydedilir.
  • GET yöntemi verileri bir sunucu ortamı değişkenine atar, dolayısıyla URL'nin uzunluğu sınırlıdır. GET yöntemi kullanılarak iletildiğinde çok uzun URL'lerin nasıl göründüğünü görmüş olabilirsiniz ve aslında herhangi birinin bu yöntemi kullanarak 300 kelimelik bir HTML metni göndermek istemesi pek olası değildir.

Orijinal HTML spesifikasyonu, sorgu dizesinin uzunluğunun 255 karakteri geçmemesi gerektiğini belirtiyordu. Elbette bu kısıtlama daha sonra kaldırıldı ve geriye yalnızca 255 karakter sınırına uyulması yönündeki öneri kaldı, ancak daha uzun satırların kullanılması yine de kesintiye neden olabilir.

POST parametreleri

Şu anda form verilerinin gönderilmesi için tercih edilen yöntem POST'tur (özellikle eylemlerin gerçekleştirilmesinin, örneğin bir veritabanına bilgi girilmesi gibi kalıcı değişikliklerle sonuçlandığı durumlarda). Form veri kümesi, form işleme aracısına (bu durumda PHP yorumlayıcısına) yeniden yönlendirildiğinde form gövdesine dahil edilir. URL dizesi, aktarılan verilerin çeşitliliğini yansıtacak şekilde gözle görülür herhangi bir değişikliğe uğramaz.

Geliştiriciler arasında POST yönteminin GET'ten daha güvenli olduğuna dair yaygın ve haksız bir inanç var. Gerçekte hiçbir yöntem diğerinden daha fazla veya daha az güvenli değildir. Bir ziyaretçi, GET yöntemini kullanmanın yanı sıra POST yöntemini kullanarak gönderilen değişkenleri ve verileri de görüntüleyebilir. Tek fark, ilk durumda iletilen verinin adres çubuğunda bulunmamasıdır. Ancak bu onların gizlendiği anlamına gelmez. POST yöntemi kullanılarak gönderilen veriler web sitesi kullanıcısı tarafından görüntülenebilir ve değiştirilebilir.

Programlamanın, özellikle ağ programlamanın ilk ve en önemli kuralı şudur:
Giriş verilerine asla güvenmeyin.

Her zaman bir ziyaretçinin belirli bir uygulamaya aktarılan verileri kötü niyetli olarak veya hatta kazara değiştirmiş olabileceğini varsaymalısınız, dolayısıyla bu verileri dikkatlice kontrol etmeniz gerekir.

İletilen form verileri yalnızca isteğin SSL, TLS veya başka bir şifreleme yöntemi kullanılarak güvenliğinin sağlanması durumunda daha fazla veya daha az güvenlidir. Ancak veriler yine de son kullanıcıya veya ziyaretçiye net bir biçimde ulaşıyor, dolayısıyla verileri şu veya bu şekilde görüntüleme ve değiştirme fırsatına sahip. Gerçek şu ki, SSL protokolü ağ üzerinden iletilen verileri basitçe şifreler, bu da verilerin göndericiden alıcıya geçiş aşamasında açık metin olarak görüntülenmesine izin vermez. Ziyaretçinin form verilerinde değişiklik yapabilmesine gelince, SSL protokolü bunu engelleyecek hiçbir şey sağlamaz.

Önceki örnekte verilerin aktarılma şeklini değiştirmek için aşağıdaki değişiklikleri yapmanız gerekir:

...

Çoklu Değerlerle Çalışmak

Formda onay kutuları veya radyo düğmeleri varsa yeni bir sorun ortaya çıkar. Örneğin, bir kullanıcı bir formda aynı anda iki değeri seçebilir ancak bir değişken birden fazla değeri saklayamayacağından bir dizi kullanılması gerekecektir. Bu durum aşağıdaki örnekte gösterilmektedir:

" yöntem = "gönder">
Favori evcil hayvanlarınızı seçin

Seçilen hayvanlar: "; foreach ($animal as $a) ( echo " ".htmlentities($a).""; } } ?>

Bu form kullanıcının favori evcil hayvanlarını seçmesine olanak tanır. Bu örnekte kullanıcı aynı anda birden fazla onay kutusunu işaretleyebilir. Bu, bir PHP betiğinde form verilerini işlerken, tek bir ad kullanarak birden fazla değere erişme yeteneğinin sağlanması gerektiği anlamına gelir. Birden fazla seçeneği dizi olarak gönderebilmek için name özelliğinde addan sonra bir çift köşeli parantez () yerleştirdik. Köşeli parantezler atlanırsa ve kullanıcı birden fazla onay kutusunu işaretlerse, son işaretlenen onay kutusu onların seçiminin üzerine yazılır. İsmin arkasına köşeli parantez koyarak değerlerin dizi halinde saklanması gerektiğini belirttik.

İşleyicide dizi $animal değişkeninde saklanır ve normal bir dizi gibi foreach döngüsü kullanılarak numaralandırılır.

Form Doğrulama ve Form Değişkenlerini Biçimlendirme

Bir uygulama bir kullanıcıdan veri aldığında, her seferinde bunun doğruluğunu kontrol etmelidir. Kullanıcının girdiği verileri kontrol etmezseniz güvenlik riskleri dahil birçok sorunla karşılaşabilirsiniz. Geçmiş kontrolü yapmak göründüğü kadar zor değildir.

Kullanıcıların istemci tarafında JavaScript kullanarak kontrol yapması daha uygundur ancak bu kontrolün kullanılıp kullanılmadığına bakılmaksızın sunucu tarafı doğrulamasının yapılması gerekir.

HTML formları oluştururken göz önünde bulundurulması gereken bir diğer husus, formun önceden doldurulmuş girişi görüntülemesi gerekiyorsa, değer özelliğinin ayarlanması gerektiğidir. Bu nokta özellikle iki tür form için geçerlidir: bir veritabanından alınan verileri düzenlemek için kullanılanlar ve muhtemelen verileri birden fazla kez göndermek üzere tasarlananlar. İkinci durum, önceden doldurulmuş verilerde hatalar tespit edildikten sonra formun yeniden görüntülenmesi gereken durumlarda çok yaygındır. Bunun bir örneği, kullanıcı geçerli bir e-posta adresi veya diğer gerekli verileri sağlayana kadar verileri işlenmek üzere kabul etmeyen bir kayıt formu olabilir.

Aşağıdaki örnek, sunucu tarafı doğrulama ve aynı form sayfasında işleme dahil olmak üzere bir formun nasıl işleneceğini gösterir:

PHP'nin Temelleri

" yöntem = "gönder">
İletişim bilgileri "sınıf ="">
"sınıf ="">

Bu örnek, bir filtre kullanarak bir değişkeni test eden ve iki parametre (bir kaynak dizesi ve filtrenin türünü belirten bir sabit) alan filter_var() işlevini kullanır. Bu işlev, e-posta adreslerini (FILTER_VALIDATE_EMAIL) doğrulamanın yanı sıra aşağıdaki sabitleri de destekler: FILTER_VALIDATE_URL - URL'nin doğruluğu için değeri kontrol eder (örneğin), FILTER_VALIDATE_IP - IP adreslerinin doğruluğu için değeri kontrol eder, FILTER_VALIDATE_REGEXP - değeri kontrol eder düzenli ifade sözdiziminin ve is_bool(), is_float(), is_int(), vb. işlevlerine alternatif olan diğer bazı sabitlerin doğruluğu için.

Bu ve sonraki bölümlerde PHP kullanılarak temel web uygulamalarının nasıl oluşturulacağı kısaca ele alınacaktır. Uygulamanızın kullanıcı ile iletişim kurabilmesi ve kullanıcının gerçekleştirdiği işlemlere veya girdiği parametrelere göre formüle edebilmesi için bölümde anlatılanların yeterli olmadığı açıktır. Ne kayıp? Kullanıcı veri girişinin nasıl organize edileceği ve bu verilerin sunucuya aktarımının nasıl yapılacağı konusunda yeterli bilgi bulunmamaktadır. Sunucuda alınan bilgilerin programlı olarak nasıl işleneceği hakkında temel bilgiye zaten sahip olmalısınız.

HTTP istek yöntemleri ve parametreleri

Herhangi bir dinamik web uygulaması, kullanıcının girdiği parametrelere veya istemci tarafında gerçekleştirilen eylemlere göre kullanıcıya bir yanıt üretir. Sunucuyla iletişim genellikle iki tür istekle gerçekleşir: GET yöntemini veya POST yöntemini kullanmak. Bu iki tür istek arasındaki farklar hakkında birkaç söz.

GET yöntemi:

    Parametreler HTTP istek başlığına iletilir, böylece komut satırında görünürler ve böyle bir istek yer imleri olarak kaydedilebilir. Başlığın toplam uzunluğu sınırlı olduğundan GET kullanılarak iletilen parametrelerin sayısı ve uzunluğu da sınırlıdır.

    Arka arkaya yürütülen birden fazla aynı GET isteğinin sonuçlarının aynı olması gerektiğine inanılmaktadır.

POST yöntemi:

    İstek parametreleri HTTP isteğinin gövdesinde iletilir, dolayısıyla komut satırında bulunmazlar. Parametrelerin sayısı ve boyutu sınırsızdır.

    Birden fazla aynı POST isteğinin sonuçlarının, hedef nesnenin özelliklerini değiştirebileceğinden farklı değerler döndürebileceğine inanılmaktadır.

Hedef kaynağın veri yapılarında değişiklik yapmaya gerek olmadığında, bir bilgi kaynağının içeriğini parametrelere göre almak için GET yöntemi kullanılmalıdır ve isteğin (URL) yer imlerine kaydedilmesi mantıklıdır. GET yöntemi, POST yöntemini kullanan benzer isteklerden daha hızlı olabilir.

Sunucuya iletilen parametreleri URL'den gizlemeniz gerektiğinde POST yöntemi kullanılmalıdır. Bu yöntem aynı zamanda hedef kaynağın içeriğindeki değişiklik taleplerinde de kullanılmalı ve bu değişikliklerin bir açıklaması parametrelerde (isteğin gövdesinde) iletilmelidir.

Kaynağa giden yol?parametre1=değer1¶metre2=değer2&…

Parametreleri doldurmak için özel bir HTML formunuz yoksa, test parametrelerini doğrudan tarayıcı komut satırından ileterek PHP uygulamanızın işleyişinde hata ayıklayabilirsiniz, örneğin:

Http://site/php-samples/sql.php?sql=select * d_staff'tan

Sunucu tarafında istek parametrelerine erişmek için global dizileri kullanmalısınız. $_GET Ve $_POST sırasıyla. Uygulamanız hangi yöntemle erişildiğini umursamıyorsa bir dizi kullanmalısınız. $_REQUEST$_GET ve $_POST dizilerinin verilerini birleştiren örneğin şu şekilde:

$sql = isset($_REQUEST["sql"]) ? $_REQUEST["sql"] : "";

Bu örnekte program, “sql” parametresinin iletilip geçirilmediğini belirler: eğer evetse, değerini ilgili değişkene atar, değilse boş bir değer atar.

HTTP istek parametrelerini HTML formu aracılığıyla tanımlama

Elbette parametreleri doğrudan tarayıcı komut satırında manuel olarak tanımlamak pek kullanışlı değildir. Bu yöntem, web uygulamaları birbirleriyle iletişim kurduğunda HTTP isteklerini programlı olarak yürütmek için uygundur. İstemci tarafında ilk veri doğrulamasını girmek ve gerçekleştirmek için HTML formlarını ve . Aşağıda, daha sonra POST yönteminin bir parametresi olarak sunucuya aktarılan bir metin parametresinin (değer) girildiği en basit formun bir örneği verilmiştir.

yöntem = "gönderi" aksiyon =’sql.php’ > SQL:

Form öğesinin yöntem özelliği, verilerin sunucuya iletilme yöntemini (get veya post) belirleyen yöntemi belirtir. Action özelliği şunu belirtir: php dosyası, isteği işleme koyacak. İşleyicinin geçerli dosya olması gerekiyorsa, action niteliğinin eklenmesine gerek yoktur. Değerinin HTTP istek parametresi olarak iletilmesi gereken tüm öğeler için name niteliğine yönelik benzersiz bir değer tanımlamanız gerekir. Bu, nitelik değeridir isim olacak dizin$_GET, $_POST veya $_REQUEST dizilerinde (yukarıdaki örneğe bakın). Bir düğmeye basmak göndermek Formu girilen tüm değerlerin bulunduğu sunucuya gönderir.