Sayfa PHP_SELF ile yeniden eğer PHP algılamak

4 Cevap php

Ben güncellenen verilerle sayfayı yeniden yükler bir form var:

<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    ...
    <input type="submit" name="Submit" value="Update data">
</form>

Sayfası güncellendiğinde bir mesaj "güncellenmiş veri" göstermek istiyorum. Orada Referer Ben beleve ile bu gibi bir şey oldu, ama hatırlayamıyorum.

btw ben de kullanıyorum:

if (isset($_POST['Submit'])) {
    // prevent resending data
    header("Location: " . $_SERVER['PHP_SELF']);
}

kullanıcı geri düğmesini tıkladığında can sıkıcı tekrar gönderme veri mesajını önlemek için. Bu doğru mudur?

4 Cevap

Bir form sunuldu kesinlikle emin olmak istiyorsanız, bir session bir değişken saklayabilirsiniz:

session_start();      // at top of page
...
if (isset($_POST['Submit'])) {
    $_SESSION['form_submitted'] = true;
    ...
    // prevent resending data
    header("Location: " . $_SERVER['PHP_SELF']);
}
elseif ($_SESSION['form_submitted'])
{
    ...
}

Daha az güvenilir ama aynı zamanda olası $_SERVER['HTTP_REFERER'] ziyaretçi geldi ne sayfa algılamak için kullanılmasıdır.

Böyle bir şey yapabileceğini ...

a. ancak bilgilerin ekstra bir parça ile, kendini yönlendirme -? "updated = true" (ya da * & * updated = true PHP_SELF zaten bir sorgu dize içeriyorsa)

if (isset($_POST['Submit'])) {
    // prevent resending data
    header("Location: " . $_SERVER['PHP_SELF'] . '?updated=true');
}

b. Bu ekstra bilgilere dayanarak, metni görüntüler.

if (isset($_GET['updated'])) {
    echo "data updated";
}

... Ve evet, yeniden yönlendirme resubmision önlemek için geçerli bir yoldur

"Verileri yeniden" iletisini önlemek için bir genel kabul yolu Post-Redirect-Get desen kullanmaktır.

İdeal sonuçlarını görüntülemek ve aynı zamanda formu işlemek için aynı sayfayı kullanarak olmamalıdır. Ben form doğrulama geçtikten sonra yönlendirmek ayrı bir sayfaya "güncellenmiş veri" hareketli öneririm.

Bu şekilde, tarayıcınızın Geri düğmesini bu can sıkıcı mesajları olmadan kullanıcı için sezgisel davranır.

Eğer her zaman güvenmemelisiniz böylece Ayrıca, teknik $ _SERVER "gönderen" değer sahte olabilir.

Sen sadece hoş çok kullandığınız hangi kullanabilirsiniz:

if (isset($_POST['submit'])) {
    echo "data submitted";
}

Neden olmasın?