Gizli form alanı temelleri ile mücadele (PHP)

2 Cevap php

PHP veri ile gizli formları kullanarak zorluk yaşıyorum. Ben bana yaşam için yapıyorum yanlış anlamaya olamaz.

Benim kod gerekir

  1. Bir saldırı başarılı olmadığını görmek için kontrol edin;
  2. Bu başarılı olursa, sağlığı zarar çıkarma;
  3. $ Sağlık değişkeni yeniden yazın.
  4. Sonraki tur için yeni $ sağlık değerini kullanın.

Sorun sağlık değerini sıfırlayarak tutar olduğunu.

İşte benim kod (saldırı her zaman başarılı böylece ayarlanır) olduğunu:

<?php
$health = $_REQUEST["health"];
$attack = rand(10,20);
$defend = rand(1,9);
$damage = rand(1,5);
$health =50;

if ($attack>$defend){
    print "<p>Jim hit the robot for $damage.</p>";
    $health = $health - $damage;
    print "<p>The robot has $health health remaining.</p>";
} else {
    print "<p>Jim missed.</p>";
    print "<p>The robot has $health health remaining.</p>";
} // end if statement

print <<<HERE

<input type="text"
   name="openMonsterHealth"
   value="$health">
<input type="hidden"
   name="hdnMonsterHealth"
   value="$health">
<input type="submit"
   value="click to continue">

HERE;
?>

2 Cevap

Eğer bir sonraki sayfada sizi takip etmek $ sağlık istiyorsanız, oturumları kullanın.

PHP Manual on Sessions

Temelde, sayfalarınızı ile başlamak istiyorum

session_start();
if(isset($_SESSION['health'])) {
    $health = $_SESSION['health'];
}
else {
    //However you normally set health when the user is just starting
}

Bu gibi ayarlarsanız, önceki sayfada sağlık değeri yüklemek hangi:

$_SESSION['health'] = $health;

PHP komut dosyaları otomatik olarak yazmak ve yakın oturumları, böylece oturum küresel dizideki bir değişken oluşturmak dışında bir şey hakkında endişelenmenize gerek yok. Sadece önceki sayfadan oturum dizideki verileri almak istediğiniz zaman oturumları başlatmak için unutma. Sizin kullanıcılar Ancak, çerezleri kabul etmek mümkün olacaktır.

Gizli alanları kullanarak devam ederseniz, bir oyuncu (onlar takip etmek için daha fazla sorun demektir, artı) sana geri göndermeden önce bu bilgileri değiştirebilir.

edit:


Sizin böcek, ancak, size istek sağlığı için doğru değişken adını kullanarak değil, sizin kod 5. satırında 50 sağlık sıfırlayarak konum vardır ve herhangi bir formu etiketleri yok.


<?php
if(isset($_REQUEST['hdnMonsterHealth']))
    $health = $_REQUEST['hdnMonsterHealth'];
else 
    $health = 50;
$attack = rand(10,20);
$defend = rand(1,9);
$damage = rand(1,5);

if ($attack > $defend) {
print "<p>Jim hit the robot for $damage.</p>";
$health = $health - $damage;
print "<p>The robot has $health health remaining.</p>";
} else {
    print "<p>Jim missed.</p>";
    print "<p>The robot has $health health remaining.</p>";
} // end if statement

print <<<HERE

<form method="post">
<input type="text"
   name="openMonsterHealth"
   value="$health">
<input type="hidden"
   name="hdnMonsterHealth"
   value="$health">
<input type="submit"
   value="click to continue">
</form>

HERE;
?>

Edit: garabeti tüm Üzgünüz, biçimlendirme bu kod bloğu ile kırık, bu yüzden el ile kodda her < eklemek zorunda kaldı olduğunu &lt;. Bu kod, ancak şimdi çalışıyor.

Hala olumsuz sağlık bir hata var. Ama, sizin için oyun yazmıyorum.

Maalesef, size $ sağlık değişkenin ne kapsam bahsetmedim. Bu oturuma ait, ya da sadece istek ömür boyu mu?

Ben kuvvetle oturum değişkenleri, yani kullanarak öneririm:

$_SESSION["health"] = $_SESSION["health"] - $_REQUEST["DAMAGE"];