mysql - PHP - uploading images from dynamic form - file naming issue -


i'm building dynamic form allows user create variable number of rows per entry. form includes image upload feature. i'm able image upload work, not - issue seem forced use 'tmp_name' of file, , can't original file name.

first off, here's php (heading mysql)...

require '../credentials.php'; $servername = "localhost"; $dbname = "dynamic_test"; $target_dir = "uploads/";  $conn = new mysqli($servername, $username, $password, $dbname);  $sql = '';  $name = $_post['name']; $route = $_post['route'];  $site_array = $_post['site'];  foreach($site_array $sitenumber => $value){      $species_array[$sitenumber] = $_post['species'.$sitenumber.''];     $deadinjured_array[$sitenumber] = $_post['deadinjured'.$sitenumber.''];     $image_array[$sitenumber] = $_files['image'.$sitenumber.'']['tmp_name'];      foreach($species_array[$sitenumber] $key => $species){          if($image_array[$sitenumber][$key]){             $target_file = ($target_dir . rand(1, 9999999) . strtolower(basename($image_array[$sitenumber][$key])));              if(move_uploaded_file($image_array[$sitenumber][$key], $target_file)){                 $image_url = $target_file;             }          };              $deadinjured = $deadinjured_array[$sitenumber][$key];      $sql .= "insert test (volunteer, route, site, species, deadinjured, image_url)     values ('$name', '$route', '$sitenumber', '$species', '$deadinjured', '$image_url');";      }; };   if ($conn->multi_query($sql) === true) {     echo "mysql you";     $conn->close(); }; 

notice line -

$image_array[$sitenumber] = $_files['image'.$sitenumber.'']['tmp_name']; 

in order images $image_array, required either ['name'] or ['tmp_name'] suffix - using ['name'] here cause move_uploaded_file function fail, though - generates error undefined variable: image_url. however, found building ['tmp_name'] $image_array variable instead, able move_uploaded_file function work, since function expecting ['tmp_name'] suffix in first parameter.

so question - there way images image array using actual file name, rather temporary name? isn't big deal - code above work , don't need preserve actual file names particular project - i'd still know right way this.

thank you.

just store whole _file in array:

require '../credentials.php'; $servername = "localhost"; $dbname = "dynamic_test"; $target_dir = "uploads/";  $conn = new mysqli($servername, $username, $password, $dbname);  $sql = '';  $name = $_post['name']; $route = $_post['route'];  $site_array = $_post['site'];  foreach($site_array $sitenumber => $value){      $species_array[$sitenumber] = $_post['species'.$sitenumber];     $deadinjured_array[$sitenumber] = $_post['deadinjured'.$sitenumber];     $image_array[$sitenumber] = $_files['image'.$sitenumber];      foreach ($species_array[$sitenumber] $key => $species) {         $image_url = false;          if (isset($image_array[$sitenumber][$key])) {             $target_file = ($target_dir . $image_array[$sitenumber][$key]['name']);              if (move_uploaded_file($image_array[$sitenumber][$key]['tmp_name'], $target_file)) {                 $image_url = $target_file;             }          }                 $deadinjured = isset($deadinjured_array[$sitenumber][$key]) ? $deadinjured_array[$sitenumber][$key] : false;          $sql .= "insert test (volunteer, route, site, species, deadinjured, image_url)         values ('$name', '$route', '$sitenumber', '$species', '$deadinjured', '$image_url');";      }; }; 

notice though, have sql injection threats. also, i'd recommend storing file unique name. if need keep original name, store original name in database, along auto generated name. user see file name uploaded it, stored on server different name. use uniqid or similar generate random names.


Comments