PHP basit bir Javascript komut dönüştürmek

4 Cevap php

Ben teslim bir form (RSform! Pro Joomla) doğrulamak için basit bir javascript işlevi var. Sorun botlar JavaScript devre çalışmakta doğrulama komut dosyası olmadan formu göndermek mümkün olmaktadır. Oluyor bu davayı engellemek için aklıma tek seçenek yerine javascript php kullanmaktır. Birisi bu dönüşüm ile bana yardım ya da bir alternatif sunabilir?

    function validateEntreeCount(theForm)
    {
     if (parseInt(document.getElementById('Attendees').value) != 
parseInt(document.getElementById('Beef').value) + 
parseInt(document.getElementById('Chicken').value) + 
parseInt(document.getElementById('Vegetarian').value))
     {
      alert('The total amount of attendees does not match the total amount of entrees selected'); 
      return false;
     } 
     else
     {
      return true; 
     }
    }

Herkesin girişi için teşekkürler!

4 Cevap

Işe dönüştürme için, ben bir kaç şey varsaymak zorundayız, bu yüzden sana benim genel varsayımlar ile bir dönüşüm göstermek izin verir:

Birkaç girdi türlerinin, toplam katılımcı sayısı ile bir form içeren benim kabul HTML sayfası, belirten bir sayı kaç emir akşam ne tür ve bir gönderme düğmesi. Formun yöntem, post olduğuna dikkat edin ve eylem yourfile.php olduğunu.

<form name="my_form" method="post" action="yourfile.php">
   <input type="text" value="Attendees"></input>
   <input type="text" value="Beef"></input>
   <input type="text" value="Chicken"></input>
   <input type="text" value="Vegetarian"></input>
   <input type="submit" value="submit"></input>
</form>

Form değerlerini almak olacaktır PHP sayfası:

<?php
  function validateEntreeCount() {
   // used for validation purposes
   if (!isset($_POST['submit']) {
       // form was submitted without data, silly bots.
     echo "We've encountered a problem, please re-enter your data";
      // possible redirect back to the page.
   }       
   // convert the data into integers.
   $total   = intval($_POST["Attendees"]);
   $beef    = intval($_POST["Beef"]);
   $chicken = intval($_POST["Chicken"]);
   $veg     = intval($_POST["Vegetarian"]);

    // if all is well, everything should be equal
     if ($total == ($beef + $chicken + $veg)) {
       return true;
    }  
   // something went wrong
       echo "The total amount of attendees does not match the total amount of entrees selected";
       return false;
  }
?>

Bu test ya da sadece karşılaştırma işlevi PHP gibi nasıl görüneceğini gösteren derlenmiş olmamıştır. Üzerinde çalışmak için çok şey özellikle girdi ve hata denetimi doğrulayarak, vardır.

Bu size yardımcı olur, ya da doğru yönde işaret umuyoruz.

Ben (kullandığınız olursa olsun) (javascript ile) istemci tarafında VE sunucu tarafında hem de doğrulama için her zaman iyi bir fikir olduğunu söyleyebilirim.

Bu şekilde, kullanıcı o bir hata yaptıysanız, bir sayfayı yeniden beklemek zorunda değildir emin olun, ancak kullanıcı kötü niyetle veya değil, üzerinde javascript yok çünkü sizin uygulamayı geçersiz giriş olmayacak emin olabilirsiniz (birçok kullanıcı varsayılan olarak javascript bırakmayın).

Ben burada terim zarif bozulması sanırım. Ben size onu varmış gibi iyi bir deneyime sahip olmasa bile, javascript olmadan web sitenizde kullanmak mümkün olmalıdır demek. Ve formları özel çünkü gerçekten kullanmadan önce veri temizleme önemi bunun için bir hayır beyin vardır.

Böyle bir şey gidebilir:

function validateEntreeCount()
{
 if (intval($_POST['Attendees']) != 
intval($_POST['Beef']) . 
intval($_POST['Chicken']) . 
intval($_POST['Vegetarian']))
 {
  print('The total amount of attendees does not match the total amount of entrees selected'); 
  // exit/redirect/return false or whatever
 } 
 else
 {
  return true; 
 }
}

Siz POST var değerleri orada geliyor emin olun. Eğer numaralarını karşılaştırarak varsa ve aynı zamanda daha sonra + belirtmek yerine yukarıda gösterildiği gibi bir nokta gerekir.

Ben şu anda dönüşüm ile yardımcı olamaz, ama botlara ile başa çıkmak için de sayfa dahil etmek kullanıcıların Gönder düğmesini ve kullanabilirsiniz javascript gizleyebilirsiniz.