2017-04-13 1 views
1

Ich arbeite an einem Programm, das Werte aus einer Datenbank erhält und spuckt eine Zeile nach dem anderen in eine Formulartextausgabe aus. Um die verschiedenen Zeilen zu sehen, gibt es Navigationsschaltflächen, die die aktuelle Zeile ändern, die Sie gerade betrachten. Alles funktioniert bis auf die Knöpfe, die jedes Mal gelöscht und reinitialisiert werden, wenn Sie einen von ihnen drücken. Es gibt vier dieser Schaltflächen, eine "erste", "vorherige", "nächste" und "letzte", die die Nummer festlegen, die die aktuelle Zeile auf den jeweiligen Wert für jede Schaltfläche steuern soll.PHP-Zeile Navigationstaste Schalter löscht immer Variable vor dem Ausführen

Hier ist der Abschnitt, der nicht funktioniert:

`

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"; 
}` 

Drücken der„First“oder„Zurück“-Tasten setzt den button_value (verwendete Spur der aktuellen Zeile zu halten) auf 0, drücken Sie die Schaltfläche "Weiter" setzt button_value auf 1, und drücken Sie die Schaltfläche "Last" setzt den Wert auf die maximale Anzahl von Zeilen für die ausgewählte Tabelle.

Ich kann wirklich nicht herausfinden, was hier vor sich geht. Wenn noch mehr Code benötigt wird, um das herauszufinden, kann ich es liefern, aber ich wollte nicht alle 226 Codezeilen posten.

Der größere Teil des Codes PHP unten enthalten ist:

<?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"; 
     } 
    ?> 

Wenn der Code-Abschnitt

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

ist nicht an der Spitze enthalten ist, dann wird die Variable "button_value" ist immer ungesetzt vor jeder switch statement hit.

Oh, und hier ist der HTML-Code für die Schaltflächen:

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

Antwort

0

ich endlich eine Lösung herausgefunden. Durch die Verwendung einer Session-Global-Variable könnte ich die Variable aufhören, auf Null zurückzusetzen. Also habe ich diese an der Spitze von meinem Code:

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

Nach diesem ich die Schaltfläche Management-Abschnitt meines Codes aktualisiert, um die Sitzung zu verwenden, global:

//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"; 
} 
Verwandte Themen