2017-04-13 6 views
1

データベースから値を取得し、一度に1行ずつフォームテキスト出力に吐き出すプログラムで作業しています。異なる行を表示するには、現在表示している行を変更するナビゲーションボタンがあります。いずれかを押すたびにクリアされ、再初期化されるボタンを除き、すべてが機能します。これらのボタンのうち、現在の行を制御するはずの番号を各ボタンのそれぞれの値に設定する "First"、 "Previous"、 "Next"、および "Last"の4つのボタンがあります。ここ PHPの行ナビゲーションボタンは、実行前に常に変数をクリアします

が動作していない部分である:button_value

`

if(isset($result)){ 
    $rows = mysqli_num_rows($result); 
    if(isset($button_value)){ 
     echo "After isset(button_val) in buttons, val = ".$button_value."<br>"; 
     if(isset($_GET['table_nav'])){ 
      $button_ch = $_GET['table_nav']; 
      switch($button_ch){ 
       case "First": 
        unset($button_ch); 
        echo "button_value in, before = ".$button_value."<br>"; 
        $button_value = 0; 
        echo "button_value in = ".$button_value."<br>"; 
        break; 
       case "Previous": 
        unset($button_ch); 
        if($button_value > 0){ 
         echo "button_value in, before = ".$button_value."<br>"; 
         $button_value--; 
         echo "button_value in = ".$button_value."<br>"; 
         break; 
        }else{ 
         echo "Invalid button action. No previous rows.<br>"; 
         break; 
        } 
        break; 
       case "Next": 
        unset($button_ch); 
        if($button_value < $rows){ 
         echo "button_value in, before = ".$button_value."<br>"; 
         $button_value++; 
         echo "button_value in = ".$button_value."<br>"; 
         break; 
        }else{ 
         echo "Invalid button action. No next rows.<br>"; 
         break; 
        } 
        break; 
       case "Last": 
        unset($button_ch); 
        echo "button_value in, before = ".$button_value."<br>"; 
        $button_value = $rows - 1; 
        echo "button_value in = ".$button_value."<br>"; 
        break; 
       default: 
        unset($button_ch); 
        echo "Error, invalid row navigation button value<br>"; 
      } 
      echo "button val after set by case = ".$button_value; 
     }//*/ 
    } 
} else { 
    echo "ERROR in result"; 
}` 

いずれかの「最初の」または「前へ」ボタンを押すと設定する(現在の行を追跡するために使用されています)を0に設定する場合、「次へ」ボタンを押すとbutton_valueが1に設定され、「最後」ボタンを押すと、選択したテーブルの最大行数に値が設定されます。

ここで何が起こっているのか本当に分かりません。これを理解するのに必要なコードがあればそれを供給することができますが、私は226行すべてのコードを投稿したくありません。

PHPコードの大きなチャンクが以下が含まれる:

<?php 
    global $table_array; 
    //global $button_value; 
    $table_array = array(); 
//* 
    if(!isset($button_value)){ 
     $button_value = 0; 
     echo "reset the undecfined var button_value <br>"; 
    }//*/ 

    //$result = get_table($_GET["table_name"], $connection_to_mysql); 
    if(isset($_GET["table_name"])){ 
     $table = $_GET["table_name"]; 
     //echo "table name is ".$table."<br><br>"; 
     $result = get_table($table, $connection_to_mysql); 
     $rows = mysqli_num_rows($result); 
     list($table_array, $table_cols) = parse_result($result, $table); 
     } 

     //The button handling section 
     if(isset($result)){ 
      $rows = mysqli_num_rows($result); 
      if(isset($button_value)){ 
       if(isset($_GET['table_nav'])){ 
        $button_ch = $_GET['table_nav']; 
        switch($button_ch){ 
         case "First": 
          unset($button_ch); 
          $button_value = 0; 
          echo "button_value in = ".$button_value."<br>"; 
          break; 
         case "Previous": 
          unset($button_ch); 
          if($button_value > 0){ 
           $button_value--; 
           break; 
          }else{ 
           echo "Invalid button action. No previous rows.<br>"; 
           break; 
          } 
          break; 
         case "Next": 
          unset($button_ch); 
          if($button_value < $rows){ 
           echo "button_value in, before = ".$button_value."<br>"; 
           $button_value++; 
           echo "button_value in = ".$button_value."<br>"; 
           break; 
          }else{ 
           echo "Invalid button action. No next rows.<br>"; 
           break; 
          } 
          break; 
         case "Last": 
          unset($button_ch); 
          $button_value = $rows - 1; 
          echo "button_value in = ".$button_value."<br>"; 
          break; 
         default: 
          unset($button_ch); 
          echo "Error, invalid row navigation button value<br>"; 
        } 
        echo "button val after set by case = ".$button_value; 
       }//*/ 
      } 
     } else { 
      echo "ERROR in result"; 
     } 
    ?> 

コード

if(!isset($button_value)){ 
     $button_value = 0; 
     echo "reset the undefined var button_value <br>"; 
    } 

のセクションが上に含まれていない場合には、変数「button_value」が常に設定されていません各switch文がヒットする前に私は最終的に解決策を考え出した

<form action='' method="GET"> 
    <table> 
     <tr> 
      &nbsp;<input id="button_first" type="submit" name="table_nav" value="First"> 
     </tr> 
     <tr> 
      &nbsp;<input id="button_previous" type="submit" name="table_nav" value="Previous"> 
     </tr> 
     <tr> 
      &nbsp;<input id="button_next" type="submit" name="table_nav" value="Next"> 
     </tr> 
     <tr> 
      &nbsp;<input id="button_last" type="submit" name="table_nav" value="Last"> 
     </tr> 
    </table> 
</form> 

答えて

0

ああ、ここでは、ボタンのHTMLです。セッショングローバル変数を使用することによって、変数の停止を0にリセットすることができます。だから私は私のコードの先頭にこれを置く:

if(!isset($_SESSION["button_value"])){ 
    $_SESSION["button_value"] = 0; 
} 

この私がセッショングローバルに利用するために私のコードのボタン管理部を更新した後:

//The button handling section 
if(isset($result)){ 
    $rows = mysqli_num_rows($result); 
    //echo "Between isset(result) and isset(button_val) in buttons, rows = ".$rows."<br>"; 
     if(isset($_GET["table_nav"])){ 
      $button_ch = $_GET["table_nav"]; 
      $button_value = $_SESSION["button_value"]; 
      switch($button_ch){ 
       case "First": 
        unset($button_ch); 
        //echo "button_value in, before = ".$_SESSION["button_value"]."<br>"; 
        $_SESSION["button_value"] = 0; 
        break; 
       case "Previous": 
        unset($button_ch); 
        if($button_value > 0){ 
         //echo "button_value in, before = ".$_SESSION["button_value"]."<br>"; 
         $_SESSION["button_value"] = $button_value - 1; 
         break; 
        }else{ 
         echo "Invalid button action. No previous rows.<br>"; 
         break; 
        } 
        break; 
       case "Next": 
        unset($button_ch); 
        if($button_value < $rows - 1){ 
         echo "button_value in, before = ".$_SESSION["button_value"]."<br>"; 
         $_SESSION["button_value"] = $button_value + 1; 
         break; 
        }else{ 
         echo "Invalid button action. No next rows.<br>"; 
         break; 
        } 
        break; 
       case "Last": 
        unset($button_ch); 
        //echo "button_value in, before = ".$_SESSION["button_value"]."<br>"; 
        $_SESSION["button_value"] = $rows - 1; 
        break; 
       default: 
        unset($button_ch); 
        echo "Error, invalid row navigation button value<br>"; 
      } 
      //echo "button val after set by case = ".$_SESSION["button_value"]; 
     } 
}else{ 
    echo "ERROR in result"; 
} 
関連する問題