Benim çerçeve aynı zamanda $ _GET ve $ _POST erişime izin gerekir?

8 Cevap php

Ben aynı anda hem $_GET ve $_POST kullanabilirsiniz biliyorum, ama bu gerekli bir "özelliği" dir? Ben girişi erişebileceğiniz bir çerçeve yazıyorum:

$value = $this->input->get('name','');
$value = $this->input->post('name','');
$value = $this->input->cookies('name','');

Ben sadece burada düşünüyorum, aynı zamanda GET ve POST olmak için bir ihtiyaç vardır? Ben yapamadım:

$value = $this->input('name','default value if not set');

Hangi HTTP isteği göre GET / POST verilerini elde etmek için yapıldı? Çerezler ->cookies() sadece erişilebilir olacak, ama ben ->get() kullanın ve ->post() yerine gibi bir şey yapıyor olmalı ->input()?

Giriş için teşekkür ederiz!

8 Cevap

Yes!
I think you must allow access to both $_GET and $_POST at the same time. And I don't think you can just merge them together either. (You can have the option to, like PHP and the ill concieved $_REQUEST.) You could get a request like:

POST /validator?type=strict HTTP/1.1

type=html/text
body=<h1>Hello World</h1>

Değişken adı type , ancak farklı kapsamlarda, iki kez kullanılan unutmayın! (. Kez URI POST işlemesi gereken kaynak tanımlama, ve daha sonra yayınlanan varlık kendisi) PHP bu gibi görünüyor:

$_GET => ('type' => 'strict')
$_POST => ('type' => 'html/text', 'body' => '<H1>Hellow World</h1>')

PHP: Sadece URI ayrıştırma ve içine orada parametreleri koyarak s yolu $_GET biraz kafa karıştırıcı. Bir URI POST gibi, GET, PUT, DELETE vb (PHP inandığınız gibi sadece GET değil.) Belki devrimci olabilir ve kendi dil bazı kullanmak, (tüm?) En HTTP yöntemleri kullanılır :

$a = $this->uri('name');//param passed in the URI (same as PHP:s $_GET)
$b = $this->entity('body');//var passed in an entity (same as PHP:s $_POST)
$c = $this->method(); //The HTTP method in question ('GET', 'POST' etc.)

Ve belki de bazı yarar fonksiyonları:

if($this->isGET()){
     ...
}elseif($this->isPOST()){
     ...
)

I know, wild and crazy :)
Good luck and have fun!
cheers!

Bu REST mimarisi yüzden gibi bir ürün eklemek istiyorum ki akla:

POST /products?location=Ottawa HTTP/1.0

name=Book

Ve ürün otomatik sorgu params konumu ile ilişkili olacaktır.

Özetle: Her iki izin için geçerli nedenleri anlamsal vardır, ama her zaman bir ya da diğer dönüştürülebilir. Söyleniyor, senin kullanıcılar o kullanımını zorlamak istiyorsun?

Evet, ama emin olun bu kodu kullanarak zaman yerine aynı şey olarak GET ve POST tedavi daha, isteğin bir sonucu olarak bir şey değiştirmek için gidiyoruz eğer istek yöntemi POST olduğunu kontrol etmeleri olmak isteyebilirsiniz.

Genelde açılış yapmaları gereken tüm 'olsun' şeyler olduğunu, herhangi bir yan etkiye sahip olmamalıdır GET çünkü bu.

Edit This seems less relevant since you have clarified your question, but I will leave it here anyway

kullanıcı belirli bir var girdi istiyor örtmek ama bayrakları ile sadece giriş yöntemini kullanabilirsiniz:

$this->input('abc', '');
$this->input('abc', '', self::I_POST);
$this->input('abc', '', self::I_GET);
$this->input('abc', '', self::I_COOKIE);

Bu size çok şey maliyeti ve web sitesinin manipülasyonlar bazı küçük dizi kapatır çünkü genellikle $_GET ve $_POST yerine $_REQUEST kullanmak daha kabul edilir. Ben senin çerçevesinde mevcut azından belirli kaynak alımlarını yapmak istiyorum.

Ben bunlar ayrı amaçlar için kullanılan bu yana, onları ayrı tutarak öneririm. POST, vb seçimler teyit öğeleri düzenleme / ekleme, yönetici amaçlı kullanılan ise GET genellikle görüntüleme amacıyla kullanılır

Ayrıca hafif bir güvenlik sorunu olabilir: Birisi GET parametreleri kullanılarak bir sayfa ister ve veri silme gibi bir şey yürütülmesine zorlamak olabilir - örneğin, example.com/index.php?deleteid=123 (Aslında bu harici bir HTML formundan POST ile yapılır ancak çok yaygın edilebilir. Herkes her yerde bir forum, blog, bir bağlantı sonrası.)

Ben onlar kullanılan olacak nasıl tahmin edemez, çünkü POST hem tutulması tavsiye ve değişkenler GET olacaktır.

Lütfen nesneleri doldurmadan önce | [GET POST] En önemlisi $ _ böyle XSS, SQL enjeksiyonu gibi güvenlik açıkları karşı doğrulamak için emin olun.

Ben son derece durumuna bağlıdır söyleyebilirim. Eğer sadece bir HTML sayfasını görüntülemek nasıl değişecek bazı parametreleri (tipik bir GET değişken) kabul etmek istiyorsanız, her iki kabul muhtemelen ok bulunuyor.

Veri ve kısıtlı erişim değiştirme, formları ile çalışmak için gidiyoruz; Eğer CSRF alanı içine bakmalı ve nasıl bu güvenlik sorunu sizi etkileyebilir.

Ya hakkında açık olabilir eğer genel olarak, bunu yapmak akıllıca olur.