PHP: Bu küçük kodundaki bir hata, bir çift kontrol Need

3 Cevap

Daha sonra POST için kullanılan gizli bir giriş seçilen değeri saklamak için varsayalım bu basit Seç kutusunu, (ben bunu menüleri devre dışı damla verileri kullanmak için bu şekilde yapıyorum) var

<body>
    <?php 
    $Z = $_POST[hdn];
    ?>
    <form id="form1" name="form1" method="post" action="test.php">
    <select name="whatever" id="whatever" onchange="document.getElementById('hdn').value = this.value">
      <option value="1">1Value</option>
      <option value="2">2Value</option>
      <option value="3">3Value</option>
      <option value="4">4Value</option>
    </select>

<input type="hidden" name ='hdn' id="hdn" />
<input type="submit" id='submit' />
<?php
echo "<p>".$Z."</p>";
?>
</form>
</body>

The echo call works for the last 3 options (2,3,4) but if I select the first one it doesnt output anything, and even if i change first one it still doesnt output anything. Can someone explain to me whats going on, I think it might be a syntax issue.

EDIT: ilk paragrafında belirtildiği gibi: Ben gizli alanını kullanıyorum yerine benim gerçek web sitesinde aşağı seçin damla devre dışı bırakma planı nedeniyle sadece seçilmiş değerini kullanarak ve menü devre dışı bıraktığınızda POST verileri artık erişilebilir. Gizli bir alana koyarak hala bilgilere erişebilirsiniz

3 Cevap

İlki ilkine "Change", aslında değişmedi ve olayı olmadığında varsayılan, bu yüzden.

Siz seçin doğrudan değerini okuyarak ve ancak gizli alanını JS bağlı olmamalıdır. JS sadece anlamsız, güvenilmez karmaşıklığı.

Istemci tarafı uygulama başka bir şey o gizli bir alanda bağlıdır? Gizli alanın SADECE amacı açılan seçilen değerini çoğaltmak ise, o zaman bir Onchange işleyicisi kullanmak için hiçbir neden yok.

En iyi çözüm gizli alanına açılan değerini kopyalamak için formun kendisi üzerinde bir onsubmit işleyicisi ayarlamak olacaktır.

<form ... onsubmit="document.getElementById('hdn').value = document.getElementById('whatever').value">

Bu gibi Mesaja erişimi deneyin:

<?php
if (array_key_exists('hdn', $_POST)) {
    $Z = $_POST['hdn'];
}
else {
    $Z = 1;
}
?>

Lütfen giriş değiştirin:

<input type="hidden" name='hdn' id="hdn" value= <?php echo "$Z"; ?> />

this.value hiçbir değeri yoktur. Başlangıçta formu yüklediğinizde $_POST['hdn'] bir değeri yoktur nedeni budur.

@ David dediği gibi, Firefox kullanıyorsanız eğer hdn / boş boş olduğu için yazılan verileri görebilirsiniz.