简体   繁体   中英

Accessing files created with PHP after form is submitted

I am constructing a form that allows a user to query a table/database. The user selects a table to be loaded from a directory via a HTML drop-down menu. This drop-down menu is powered by a PHP loop that reads and then displays the files (or tables) from a directory. To achieve multiple queries of the same table, the user FIRST selects a checkbox to download their queried table into the same directory, THEN SECOND selects their queried file from the same drop-down menu. Make sense?

However, after hitting submit, the newly created file is absent from the drop-down menu. The file does appear after the the page is refreshed.

Now for the question: what is the best way to display the newly downloaded table so that it is recognized by the drop down box (and PHP loop) as soon as the submit button is pressed. I have played around with javascript location.reload(); but to no avail. See simplified code below:

<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());

}

After asking the question, I realized my error and want to elaborate to avoid an unanswered question. Several PHP if statements exist to determine how the table is queried. Within each if statement there is an embedded statement that downloads the queired table as described in the original question. However if nothing is queried, there is no statement to handle the download if requested by the user. This was causing headaches when checking the functionality of the overall application.

Here is the code in full if anyone is interested.

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

    ?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM