1

注册.php

$allCaps=array("img01.png", "img02.png", "img03.png"....);  // 20 images
shuffle($allCaps);  // this is critical point
$fiveCaps = array_slice($allCaps, 0, 5);

<td id="box01">
<?php
shuffle($fiveCaps);
echo "<img src=\"captcha/imgs/".$fiveCaps[0]."\">";
echo "<img src=\"captcha/imgs/".$fiveCaps[1]."\">";
... //all five images from $fiveCaps are placed here
?>  
</td>

<td id="box02">
<script type="text/javascript">
$("#box02").load("register.php #box01")
</script> </td>

在 box02 中,我想要(并且期望)与 box01 中相同的图像(只是洗牌)。
但是一些其他图像出现在 box02 中,而这些图像在 box01 中不存在
如果我删除“critical_point_line” - 两个框中的图像是相同的,但当然,总是只有 $allCaps 中的前五个图像。

4

3 回答 3

1

你为什么用jquery来洗牌,为什么不直接这样

    <td id="box-1">
        <?php $lista = shuffle($fivecaps);
            foreach($lista as &$imgcode){
                echo '<img src=\"captcha/imgs/"'.$imgcode.'"\">';
            }
        ?>
    </td>
    <td id="box-2">
        <?php $listb = shuffle($fivecaps);
            foreach($listb as &$imgcode){
                echo '<img src=\"captcha/imgs/"'.$imgcode.'"\">';
            }
        ?>
    </td>
于 2012-08-14T09:09:57.863 回答
1

仅使用 php 函数有什么问题?

<?php
$allCaps=array("img01.png", "img02.png", "img03.png"....);  // 20 images
shuffle($allCaps);  // this is critical point
$fiveCaps = array_slice($allCaps, 0, 5);

function printRandom($caps)
{
  shuffle($caps);
  foreach($caps as $cap)
  {
    echo "<img src=\"captcha/imgs/".$cap."\">";
  }
}
?>     

<td id="box01">
<?php
   printRandom($fiveCaps);
?>  
</td>

<td id="box02">
<?php
   printRandom($fiveCaps);
?>  
</td>

您的代码中的问题指出您可能不完全理解 jQuery 的选择器;执行以下代码:

$("#box02").load("register.php #box01")

不会加载 的新实例,而只是将(我们刚刚从 PHP 代码中填充register.php的内容复制到#box1#box02

如果你想洗牌变量并用 Javascript 打印它,你需要找到一种方法将它从 PHP 传递到 Javascript。一个很好的方法是使用JSON(JavaScript Object Notation

于 2012-08-14T09:11:33.140 回答
0
   <td id="box02">
    <!-- just leave this empty -->
   </td>

并将其放在您的 onload 中:

$("#box02").html($('#box1').html()); // <-- wouldn't this make it a lot easier?

如果你想要 div box1in box2,你为什么不直接复制 htmlbox1呢?这使它更快(少了一次服务器调用)并且更容易阅读。

于 2012-08-14T09:07:02.097 回答