2016-03-03 3 views
0

Я пытаюсь написать программу Poker Dice с помощью PHP. Это ниже:PHP-код генерирует дополнительную строку

//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> 

Моя проблема заключается в том, что функция secondPass(), которая, как предполагается печатать набор 5 кубиков генерирует дополнительную строку, а именно, в «.png» расширение файлов изображений, которые я использую для представления кубиков. В результате я получаю «image.png.png» вместо «image.png». Если я не проверю флажки в форме, предоставляемой функцией 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"> 

Мне нужна ваша помощь, чтобы выяснить, что вызывает эту проблему.

+0

Совет: PHP не случайно добавляет строки, это всегда ошибка в * вашем коде ... * – deceze

+1

Уже один downvote. 1 достаточно. Больше нет. –

+1

Не беспокойтесь о нисходящем, просто попробуйте задать умные вопросы (прочтите [this] (http://www.catb.org/esr/faqs/smart-questions.html)) и продолжайте экспериментировать. –

ответ

1

Ваша проблема здесь:

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

вам POST номер, включая расширение .png. Измените его на

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

и все должно быть установлено.

+0

Спасибо. Я попробую это. –

+0

Это сработало. Благодарю. –

-3

Это грязное решение, но почему бы не заменить

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

и заменить его с помощью этого кода. Так что дополнительные PNG будет trimed

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

ОП объясняет, что он новичок и просто учится. Мы не должны учить его грязным трюкам. –

+0

Я сказал, что это грязные решения, но не так, потому что это просто лишает его. Он пропускает только 2 раза, поэтому изображения будут в порядке. Так что это правильное решение. – Kordi

+0

Это неправильно. Это очень неправильно. Тот факт, что это работает, не означает, что это не так. –

Смежные вопросы