0

助けてください。

NO GD Libraryを使用して、キャプチャを追加したい連絡フォームがあります。ガイドとしていくつかの画像を追加しましたが、現在は静的です。私がやろうとしているのは、非表示フィールドのコード (乱数) と一致する画像をループで出力することです。たとえば、乱数が「18301」の場合、各番号に適切な画像が表示されます。これまでの私のコードです:

<label for="captcha">Type the code you see (*):<br />
    <?php (do a loop here){ ?>
<img src="images/0<?php echo $num; ?>.gif" width="18" height="30" />
<?php } ?>  

     <img src="images/00.gif" width="18" height="30" />
         <img src="images/01.gif" width="18" height="30" />
         <img src="images/08.gif" width="18" height="30" />
         <img src="images/03.gif" width="18" height="30" />
         <img src="images/00.gif" width="18" height="30" />
         <img src="images/01.gif" width="19" height="30" /> =</label>
    <span id="spryCaptcha">
    <input type="text" name="captcha" id="captcha" tabindex="70" />
    <input name="hiddenCode" type="hidden" value="<?php echo rand(000000,999999); ?>"/>

毎回正しい画像が表示され、ユーザーの入力が毎回表示されるコードと一致することを確認するようにするにはどうすればよいですか??

4

2 に答える 2

0

ループの前に乱数を初期化する必要があります。

<?php
    $random = (string)rand(0,999999);
?>
<label for="captcha">Type the code you see (*):<br />
    <?php for($i=0; $i<strlen($random); $i++){ ?>
        <img src="images/0<?php echo $random{$i}; ?>.gif" width="18" height="30" />
    <?php } ?>  
</label>
<span id="spryCaptcha">
<input type="text" name="captcha" id="captcha" tabindex="70" />
<input name="hiddenCode" type="hidden" value="<?php echo $random ?>"/>

ただし、それをセッションに保存し、後で確認する必要があります(非表示フィールドのセキュリティは 0 であるため)。

session_start()あなたのページの上に呼び出します

<?php
    $random = (string)rand(0,999999);
    $_SESSION['captcha'] = $random;
?>
<label for="captcha">Type the code you see (*):<br />
    <?php for($i=0; $i<strlen($random); $i++){ ?>
        <img src="images/0<?php echo $random{$i}; ?>.gif" width="18" height="30" />
    <?php } ?>  
</label>
<span id="spryCaptcha">
<input type="text" name="captcha" id="captcha" tabindex="70" />

次のページであなたの$_POST['captcha']反対をチェックしてください$_SESSION['captcha']

それでも、イメージ名を読み取ることができるため、これはセキュリティ 0 です。

于 2012-09-14T08:19:57.080 に答える