Sanal PHP Form

3 Cevap php

Ben bir formu tükürür bir PHP dosyası var. Ben, (şu anda "include" kullanarak), bu PHP dosyası sunucu tarafı çağırır onu doldurmak ve onu göndermek istiyorum.

Bu yüzden veri kendi PHP dosyası tarafından anlaşılmalıdır olur böylece sadece sunum katmanı ile anlaşma, gerçek form PHP ile etrafında karışmak zorunda değilsiniz iyidir.

Bu mümkün mü? Formu "yöntemi" POST.

3 Cevap

Siz formu doldurun ve include() kullanarak göndermeniz mümkün olmayacaktır. Bir form göndererek, bir web sunucusuna HTTP üzerinden gitmek zorunda anlamına gelir, bu yüzden ne arıyorsanız bir POST isteği taklit etmektir. PHP bunu yapmak için CURL denilen popüler bir kütüphaneye sahiptir.

Böyle bir şey deneyin:

$ch = curl_init('http://www.example.com/yourform.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'var1=value1&var2=value2&whatever=stuff');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);

Sadece formu teslim sanki $output sayfa çıkışını içerecektir.

Yani kendiniz için bir formu göndermek istiyorsanız? CURL bunu yapmak için bir yol olacaktır, ama başka bir HTTP oturumu oluşturarak olurdu gibi geliyor. Aksi takdirde POST değişkenleri taklit ve dış komut formun eylem arayabilirsiniz.

Eğer geçerli istek içinde bu formun teslim simüle etmek için çalışıyoruz gibi açıklamalara dayanarak, bu sesler. Ben PHP komut her çağırma bağımsız çalıştırır, yani senaryonun geçerli vadede gelen global değişkenler cURL isteği kolları vadede tarafından paylaşılan olmaz düşünüyorsun - cURL ile yapabilirsiniz eğer ben emin değilim.

Ben bu idare ediyorum yolu form gönderme işlemek için bir işlev oluşturmak olacaktır:

function handle_form($postdata) {
    // whatever you would normally do, just replace $_POST with $postdata
}

// to handle a normal form submission:
handle_form($_POST);

Bu şekilde, sadece form alanı değerleri ile bir dizi oluşturarak formun bir gönderme taklit edebilirsiniz:

$formvals['fieldname1'] = 'fieldvalue1';
$formvals['fieldname2'] = 'fieldvalue2';

ve çağrı

handle_form($formvals);