PHP代码生成一个额外的字符串

时间:2016-03-03 14:25:27

标签: php html

我试图用PHP编写Poker Dice程序。它在下面:

//Please ignore the session variable and calculation parts of the program...its still incomplete because it does not affect the user interface in this case.    
<?php session_start() ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>My Own Poker Dice</title>
        </head>
        <body>
            <center>
                <?php
                    print "<h1>Poker Dice</h1>";
                    if(!filter_has_var(INPUT_POST, "doNext")){
                        startGame();
                    } else{
                        playGame();
                    }
                    function startGame(){
                        $cash=100;
                        $_SESSION["cash"]=100;
                        firstPass();
                    }
                    function playGame(){
                        $doNext=filter_input(INPUT_POST, "doNext");
                        if($doNext=="firstPass"){
                            firstPass();
                        } else if($doNext=="secondPass"){
                            secondPass();
                        }
                    }
                    function firstPass(){
                        print <<<HERE
                            <fieldset>
                                <legend>
                                    <h3>First pass</h3>
                                </legend>
    HERE;
                        for($i=0;$i<5;$i++){
                            $die[$i]=rand(1,6);
                            print <<<HERE
                                <form method="post" action="">
                                    <img src="$die[$i].png"/>
                                    <input type="checkbox" name="keepIt[$i]" value="$die[$i].png"/> //keepIt is not directly an array. its a part of making an array. its only an array after you extract it and assign it to an array name.
    HERE;
                        }
                        print <<<HERE
                            </fieldset>
                            <p>
                                <input type="hidden" name="doNext" value="secondPass"/>
                                <input type="submit" name="submit-firstPass" value="GO!"/>
                            </p>
                            </form>
    HERE;
                    }
                    function secondPass(){
                        if(filter_has_var(INPUT_POST, "keepIt")){
                            $formData=filter_input_array(INPUT_POST);
                            $keepIt=$formData["keepIt"];
                            for($i=0;$i<5;$i++){
                                if(empty($keepIt[$i])){
                                    $keepIt[$i]=0;
                                }
                            }
                        } else{
                            $keepIt=array(0,0,0,0,0);
                        }
                        for($i=0;$i<5;$i++){
                            if($keepIt[$i]==0){
                                $die[$i]=rand(1,6);
                            } else{
                                $die[$i]=$keepIt[$i];
                            }
                        }
                        print <<<HERE
                            <fieldset>
                                <legend>
                                    <h3>Second pass</h3>
                                </legend>
    HERE;
                                for($i=0;$i<5;$i++){
                                    print "<img src='$die[$i].png'/>";
                                }
                        print <<<HERE
                            </fieldset>
                            <form>
                                <p>
                                    <input type="hidden" name="doNext" value="firstPass"/>
                                    <input type="submit" name="submit-secondPass" value="GO!"/>
                                </p>
                            </form>
    HERE;
                    }
                ?>
            </center>
        </body>
    </html>

我的问题是应该打印一组5个骰子的secondPass()函数正在生成一个额外的字符串,即&#39; .png&#39;用于表示骰子的图像文件的扩展。结果,我得到了一个&#39; image.png.png&#39;而不是&#39; image.png&#39;。如果我不检查函数firstPass()提供的表单中的复选框,则不会生成额外的扩展名,并且图像加载正常。在检查时,由于额外的扩展,图像不会显示。我检查图像的html是:

<img src="3.png.png"> <!-- this is what I'm talking about -->
<img src="6.png">
<img src="4.png">
<img src="3.png.png"> <!-- checking a check-box results in an extra '.png'-->
<img src="2.png">

我需要你的帮助才能找出造成这个问题的原因。

2 个答案:

答案 0 :(得分:1)

你的问题在这里:

<input type="checkbox" name="keepIt[$i]" value="$die[$i].png"/>

POST号码,包括.png分机号码。将其更改为

<input type="checkbox" name="keepIt[$i]" value="$die[$i]"/>

你应该全力以赴。

答案 1 :(得分:-3)

这是一个肮脏的解决方案,但为什么不替换

for($i=0;$i<5;$i++){
    print "<img src='$die[$i].png'/>";
}

并通过此代码替换它。所以额外的png将被激活

for($i=0;$i<5;$i++){
    print "<img src='" . trim($die[$i],'.png') . ".png'/>";
}