$ _POST Değişkeni

4 Cevap php

Ben bir sorunla karşılaşma ediyorum. Ben Wordpress kullanıyorum, ama bu bir Wordpress soru değildir.

Ben kullanıcının gönderdiği formu denetimi için kullanabileceğiniz tüm giriş alanları ve bir gizli giriş alanı olan bir form üzerinde, iki form kullanıyorum. Ben 'kurtarmak' olarak değerini kaydettiniz. Sadece tüm seçenekleri sıfırlanması ve değer 'reset' olduğu için başka bir form vardır. PHP, ben gizli alanın değerini kontrol edin ve ilgili eylemleri. Ama sorun sıfırlama şeysi çalışmıyor olmasıdır.

İşte formlar için benim HTML:

<fieldset>
    <form method="post">
        <!-- Some input fields here-->
        <p class="submit">
            <input name="save" type="submit" value="Save changes" />
            <input type="hidden" name="action" value="save" />
        </p>
    </form>
</fieldset>
<fieldset>
    <form method="post">
        <p class="submit">
            <input name="reset" type="submit" value="Reset" />
            <input type="hidden" name="action" value="reset" />
        </p>
    </form>
</fieldset>

PHP, bu gibi onları doğrulamak:

// if I change the 'save' literal to something else like 'savea', $_POST variable will not be empty
// but if I dont, then $_POST variable is NULL
if ('save' == $_POST['action']) {
    foreach ($this->cp_options as $option) {
        if (isset($_POST[$option['id']])) {
            update_option($option['id'], $_POST[$option['id']]);
        }
        else {
            delete_option($option['id']);
        }
    }

    header("Location: themes.php?page=functions.php&saved=true");
    die;
}
// if I change the 'reset' literal to something else like 'reseta', $_POST variable will not be empty
// but if I dont, then $_POST variable is NULL

elseif ('reset' == $_POST['action']) {
    foreach($this->cp_options as $option) {
        delete_option($option);
    }

    header("Location: themes.php?page=functions.php&reset=true");
    die;
}

Sorun değiştirirsem 'reset' veya 'reseta' veya 'saveasdfasd', $_POST gibi başka bir şey için 'save' değişmez değişken boş olmayacak, ama ben vermezsek, o $_POST değişken NULL olduğunu.

Bu neden oluyor herhangi bir fikir?

4 Cevap

[Eski cevap Redacted]

EDIT

Önce bir test ortamı izole etmek için çalışın. Bu bana beklenen sonuçları verdi.

<?php

if ( isset( $_POST['action'] ) )
{
  switch( $_POST['action'] )
  {
    case 'save':
      echo 'Save Action Requested';
      break;
    case 'reset':
      echo 'Reset Action Requested';
      break;
    default:
      echo 'Unknown action requested:';
      var_dump( $_POST['action'] );
  }
} else {
  echo 'No action parameter received';
}

?>
<fieldset>
    <form method="post">
        <!-- Some input fields here-->
        <p class="submit">
                <input name="save" type="submit" value="Save changes" />
                <input type="hidden" name="action" value="save" />
        </p>
    </form>
</fieldset>
<fieldset>
    <form method="post">
        <p class="submit">
                <input name="reset" type="submit" value="Reset" />
                <input type="hidden" name="action" value="reset" />
        </p>
    </form>
</fieldset>

Ben $ _POST boş olduğunu söyledi biliyorum ama varsayarak ya aslında $ _POST == null 'kontrol ettiniz mi? Eğer tam olarak ne üzerinden gönderilir oluyor yazdırmak için bir var_dump ($ _POST) yapıyor denediniz mi? Sadece yeniden yönünü açıklama ve $ _POST içinde ne olduğunu görmek. Belki bu size ne oluyor olarak daha iyi bir ipucu verecektir.

Basit ... gizli girdileri kaldırmak ve aynı adı olması için "Gönder" düğmeleri hem değiştirmek, ancak farklı değerler:

<input type="submit" name="action" value="Reset" />
<input type="submit" name="action" value="Save" />

Sonra bu gibi test edebilirsiniz:

if ($_POST['action'] === 'Reset') {
    // Do a reset here
} else {
    // Do a save here
}

Ve muhtemelen her şeyi sarmak istiyorum:

if (isset($_POST['action'])) {
    // Put your form handling here
}

Eğer bir sayfada birden fazla form varsa, ben farklı bir URL'ye her formu göndermek tavsiye ederim. Bu sadece formu işleme ile başa çıkmak için iki farklı senaryo var elimde, bugüne kadar formu nereye algılamak için en basit ve en güvenilir yoludur. Daha sonra dahil veya kullanıcı görmek istediğiniz son sayfaya yönlendirebilirsiniz.