0

我正在构建一个允许用户查询表/数据库的表单。用户通过 HTML 下拉菜单从目录中选择要加载的表。这个下拉菜单由一个 PHP 循环提供支持,该循环读取并显示目录中的文件(或表)。为了实现同一张表的多次查询,用户首先选择一个复选框将他们查询的表下载到同一个目录中,然后从同一个下拉菜单中选择他们的查询文件。有道理?

但是,点击提交后,下拉菜单中没有新创建的文件。该文件在页面刷新后出现。

现在的问题是:显示新下载的表格的最佳方式是什么,以便在按下提交按钮后立即被下拉框(和 PHP 循环)识别。我玩过 javascript location.reload(); 但无济于事。请参阅下面的简化代码:

<html>
<form action = "" method = "post"> 

Table File: <select name="hfile">


<?php
$dir = "/Director/to/table/files";
$table_files = scandir($dir, 1); 

//This is going to create the drop-down menu displaying all files in directory $dir.
$i = 0; 
while($i <= count($table_files)) { 
   echo "<option value = $table_files[$i]> $table_file[$i] </option>";
   $i = $i + 1;
}
?>
</select>

<!-- Below are just two of the form elements --> 
<input type ="checkbox" name="download_table" value="download"> Download Queried Table
<input type = "submit" value="Submit" name="submit_query">

//Variables are set once the submit button is pressed
if(isset($_POST["submit_query"])) 
  {
    $download_table = $_POST['download_table']; 
  }

//Download the table (if the download checkbox is on) 
if(isset($download_table)) {
  $file = "query.txt";
  mysql_query("SELECT * FROM table INTO OUTFILE \"$file\" FIELDS TERMINATED BY ','") or die(mysql_error());

}

4

1 回答 1

0

问完这个问题后,我意识到我的错误并想详细说明以避免一个未回答的问题。存在几个 PHP if 语句来确定如何查询表。在每个 if 语句中都有一个嵌入式语句,用于下载原始问题中描述的查询表。但是,如果没有任何查询,则如果用户请求,则没有处理下载的语句。在检查整个应用程序的功能时,这会引起头痛。

如果有人感兴趣,这是完整的代码。

<form action = "" method = "post"> 

Hypo File: <select name="hfile">


<?php
$dir = "/Applications/MAMP/db/mysql/IESE";
$hypo_files = scandir($dir, 1); 

$i = 0; 
while($i <= count($hypo_files) - 4) { 
  echo "<option value = $hypo_files[$i]> $hypo_files[$i] </option>";
  $i = $i + 1;
}

?>
</select>
<br><br>

<fieldset>
<legend>Hypo Query:</legend>
<br>

Min Value: <input type = "text" name = "min_value">
<!-- NOTE the names are named in relation to the col_name fields i.e. col names is greater than the field to the left and less than field to the right. -->  
<input type="radio" name="greater_than" value= ">="> <=  
<input type="radio" name="greater_than" value= ">"> <    

<!-- THIS IS THE DROP DOWN BOX FORM! (and an html comment) -->
<select name="hypo_cols">
<option value="latitude_deg">latitude deg</option>
<option value="longitude">longitude</option>
<option value="depth">depth</option>
<option value="origin_time">origin time</option>
<option value="magnitude">magnitude</option>
<option value="maximum_azimuthal_gap">max azimuthal gap</option>
<option value="distance_to_nearest_station_km">distance to nearest station km</option>
<option value="rms_travel_time_residual">rms travel time residual</option>
<option value="version">version</option>
<option value="auxiliary_remark_from_program">auxiliary remark from program</option>
</select>

<input type="radio" name="less_than" value = "="> ==
<input type="radio" name="less_than" value= "<="> <= 
<input type="radio" name="less_than" value= "<"> <

Max/Equal to Value: <input type = "text" name = "max_value"> <br> <br>
</fieldset>

<div id="forum_options">
      <!-- THIS IS THE CHECKBOX TO DISPLAY HYPO TABLE -->
<input type ="checkbox" name="display_table" value="display"> Print Queried Table
<input type ="checkbox" name="display_map" value="map"> Print Map from Query  
  <input type ="checkbox" name="download_table" value="download"> Download Queried Table <br> <br>
  <div id="submit">
  <input type = "submit" value="Submit" name="submit_query">
  <input type=button value="Refresh" onClick="window.location.reload()">
  </div>
  </div>
  </form> 


<?php

// What are we going to do once the submit button is pressed? 
if(isset($_POST["submit_query"])) 
  {
    //Lets define all the form values as $ without GET/POST.  Seems to read better in the query further below.  
    $hfile = $_POST['hfile'];
    $min_value = $_POST['min_value'];
    $greater_than = $_POST['greater_than'];
    $hypo_cols = $_POST['hypo_cols'];
    $less_than = $_POST['less_than'];
    $max_value = $_POST['max_value'];
    $display_table = $_POST['display_table'];
    $display_map = $_POST['display_map'];
    $download_table = $_POST['download_table']; 

    //DEFINE and POPULATE the TABLE with $hfile.  This is the only bit that is done no matter what else the form says!
    $load_hypo_param = "LOAD DATA INFILE '/Applications/MAMP/db/mysql/IESE/$hfile' INTO TABLE hypo FIELDS TERMINATED BY ','";
    mysql_query($load_hypo_param ) or die(mysql_error());  

  }


//a
if($less_than == "=") 
  {
    //echo "part a successful. <br>";  
    $result1 = mysql_query("SELECT * FROM hypo WHERE $hypo_cols $less_than $max_value") or die(mysql_error());

    //Lets download(?) the table (if the download checkbox is on) 
    if(isset($download_table)) {
      $file = "query.txt";
      unlink("/Applications/MAMP/db/mysql/IESE/query.txt");
      mysql_query("SELECT * FROM hypo WHERE $hypo_cols $less_than $max_value INTO OUTFILE \"$file\" FIELDS TERMINATED BY ','") or die(mysql_error());
    }

  }

//b
else if($min_value != NULL and $max_value != NULL) //isset($min_value) and isset($max_value)) 
  {
    //echo "part b successful" . "<br>" ;
    $result1 = mysql_query("SELECT * FROM hypo WHERE $hypo_cols BETWEEN $min_value AND $max_value") or die(mysql_error());

    if(isset($download_table)) {
      $file = "query.txt";
      unlink("/Applications/MAMP/db/mysql/IESE/query.txt");
      mysql_query("SELECT * FROM hypo WHERE $hypo_cols $less_than $max_value INTO OUTFILE \"$file\" FIELDS TERMINATED BY ','") or die(mysql_error());
    }

  }

//c
else if($min_value != NULL) 
  {
    //echo "part c successful" . "<br>";
    $result1 = mysql_query("SELECT * FROM hypo WHERE $hypo_cols $greater_than $min_value") or die(mysql_error());

    if($download_table != NULL) {
      $file = "query.txt";
      unlink("/Applications/MAMP/db/mysql/IESE/query.txt");
      mysql_query("SELECT * FROM hypo WHERE $hypo_cols $greater_than $min_value INTO OUTFILE '$file' FIELDS TERMINATED BY ','") or die(mysql_error());
    }
  }

//d
else if($max_value != NULL)
  {
    //echo "part d successful" . "<br>";
  $result1 = mysql_query("SELECT * FROM hypo WHERE $hypo_cols $less_than $max_value") or die(mysql_error());

  if(isset($download_table)) {
    $file = "query.txt";
    unlink("/Applications/MAMP/db/mysql/IESE/query.txt");
    mysql_query("SELECT * FROM hypo WHERE $hypo_cols $less_than $max_value INTO OUTFILE \"$file\" FIELDS TERMINATED BY ','") or die(mysql_error());
  }

  }

else
  {  
  echo "Nothing seems to be set. <br>";
  $file = "query.txt";
  unlink("/Applications/MAMP/db/mysql/IESE/query.txt");
  mysql_query("SELECT * FROM hypo INTO OUTFILE \"$file\" FIELDS TERMINATED BY ','") or die(mysql_error());

  $result1 = mysql_query("SELECT * FROM hypo");
  $nothing_set=TRUE;
  }

//echo all results.

if(!isset($nothing_set)) { 
echo "<h4>" . "Query successful and involves:" . "<br>" . "$hypo_cols " . "$greater_than " . "$min_value " . "<br>" . "$hypo_cols " . "$less_than " . "$max_value" . "<br>" . "</h4>";
}

  //Lets print the map (if the print map checkbox is on) 
  if(isset($display_map)) {
    //lets create a string of lat long values from the result1 queried table.  

    ?>
于 2013-03-12T23:13:35.153 回答