squishypentagon Posted May 26, 2011 Share Posted May 26, 2011 Ok, I have this code that is supposed to upload a csv file and save the contents into a specific sql table. I am getting an error when i hit submit that states the file is empty, meaning the csv file. I am thinking that the file isn't really being targeted i just don't know how to fix it. To start i have a php page with a the form and then i have another php page that is included in the form php page. The functions for submitting the csv info in the text file is located in the include file. here is the code: $csv = new Quick_CSV_import(); $arr_encodings = $csv->get_encodings(); //take possible encodings list $arr_encodings["default"] = "[default database encoding]"; //set a default (when the default database encoding should be used) if(!isset($_POST["encoding"])) $_POST["encoding"] = "default"; //set default encoding for the first page show (no POST vars) if(isset($_POST["Go"]) && ""!=$_POST["Go"]) //form was submitted { $csv->file_name = $HTTP_POST_FILES['file_source']['tmp_name']; //optional parameters $csv->use_csv_header = isset($_POST["use_csv_header"]); $csv->field_separate_char = $_POST["field_separate_char"][0]; $csv->field_enclose_char = $_POST["field_enclose_char"][0]; $csv->field_escape_char = $_POST["field_escape_char"][0]; $csv->encoding = $_POST["encoding"]; //start import now $csv->import(); } else $_POST["use_csv_header"] = 1; ?> <tr> <td>Source CSV file to import:</td> <td rowspan="30" width="10px"> </td> <td><input type="file" name="file_source" id="file_source" class="edt" value="<?=$file_source?>"></td> </tr> and class Quick_CSV_import { var $table_name = "tbl_product"; //where to import to var $file_name; //where to import from var $use_csv_header; //use first line of file OR generated columns names var $field_separate_char; //character to separate fields var $field_enclose_char; //character to enclose fields, which contain separator char into content var $field_escape_char; //char to escape special symbols var $error; //error message var $arr_csv_columns; //array of columns var $table_exists; //flag: does table for import exist var $encoding; //encoding table, used to parse the incoming file. Added in 1.5 version function Quick_CSV_import() { $this->file_name = $file_name; $this->arr_csv_columns = array(); $this->use_csv_header = true; $this->field_separate_char = ","; $this->field_enclose_char = "\""; $this->field_escape_char = "\\"; $this->table_exists = false; } function import() { if($this->table_name=="") $this->table_name = "temp_".date("d_m_Y_H_i_s"); $this->table_exists = false; $this->create_import_table(); if(empty($this->arr_csv_columns)) $this->get_csv_header_fields(); /* change start. Added in 1.5 version */ if("" != $this->encoding && "default" != $this->encoding) $this->set_encoding(); /* change end */ if($this->table_exists) { $sql = "LOAD DATA INFILE '".@mysql_escape_string($this->file_source). "' INTO TABLE `".$this-> table_name. "` FIELDS TERMINATED BY '".@mysql_escape_string($this->field_separate_char). "' OPTIONALLY ENCLOSED BY '".@mysql_escape_string($this->field_enclose_char). "' ESCAPED BY '".@mysql_escape_string($this->field_escape_char). "' ". ($this->use_csv_header ? " IGNORE 1 LINES " : "") ."(`".implode("`,`", $this->arr_csv_columns)."`)"; $res = @mysql_query($sql); $this->error = mysql_error(); } } //returns array of CSV file columns function get_csv_header_fields() { $this->arr_csv_columns = array(); $fpointer = fopen($file_name, "r"); if ($fpointer) { $arr = fgetcsv($fpointer, 10*1024, $this->field_separate_char); if(is_array($arr) && !empty($arr)) { if($this->use_csv_header) { foreach($arr as $val) if(trim($val)!="") $this->arr_csv_columns[] = $val; } else { $i = 1; foreach($arr as $val) if(trim($val)!="") $this->arr_csv_columns[] = "column".$i++; } } unset($arr); fclose($fpointer); } else $this->error = "file cannot be opened: ".(""==$this->file_name ? "[empty]" : @mysql_escape_string($this->file_name)); return $this->arr_csv_columns; } i just can't figure it out. could anyone help me out? the error i get says this: Warning: fopen() [function.fopen]: Filename cannot be empty in /Quick_CSV_import.php on line 83 Quote Link to comment https://forums.phpfreaks.com/topic/237488-php-file-browse-upload-issue/ Share on other sites More sharing options...
PFMaBiSmAd Posted May 26, 2011 Share Posted May 26, 2011 $HTTP_POST_FILES was depreciated over 9 years ago, turned off by default in php5.0, and is scheduled to be completely eliminated in an upcoming php version. Use $_FILES instead. Quote Link to comment https://forums.phpfreaks.com/topic/237488-php-file-browse-upload-issue/#findComment-1220366 Share on other sites More sharing options...
squishypentagon Posted May 26, 2011 Author Share Posted May 26, 2011 I tried that and it didn't work..... does anyone know where i could find a different code for uploading a csv file to write over sql data? Quote Link to comment https://forums.phpfreaks.com/topic/237488-php-file-browse-upload-issue/#findComment-1220377 Share on other sites More sharing options...
PFMaBiSmAd Posted May 26, 2011 Share Posted May 26, 2011 The part of the form you posted is incomplete and nonfunctional. There are countless upload scripts posted all over the Internet. Quote Link to comment https://forums.phpfreaks.com/topic/237488-php-file-browse-upload-issue/#findComment-1220381 Share on other sites More sharing options...
squishypentagon Posted May 26, 2011 Author Share Posted May 26, 2011 here is the full form: <form method="post" enctype="multipart/form-data"> <table border="0" align="center"> <tr> <td>Source CSV file to import:</td> <td rowspan="30" width="10px"> </td> <td><input type="file" name="file_source" id="file_source" class="edt" value="<?=$file_source?>"></td> </tr> <tr> <td>Use CSV header:</td> <td><input type="checkbox" name="use_csv_header" id="use_csv_header" <?=(isset($_POST["use_csv_header"])?"checked":"")?>/></td> </tr> <tr> <td>Separate char:</td> <td><input type="text" name="field_separate_char" id="field_separate_char" class="edt_30" maxlength="1" value="<?=(""!=$_POST["field_separate_char"] ? htmlspecialchars($_POST["field_separate_char"]) : ",")?>"/></td> </tr> <tr> <td>Enclose char:</td> <td><input type="text" name="field_enclose_char" id="field_enclose_char" class="edt_30" maxlength="1" value="<?=(""!=$_POST["field_enclose_char"] ? htmlspecialchars($_POST["field_enclose_char"]) : htmlspecialchars("\""))?>"/></td> </tr> <tr> <td>Escape char:</td> <td><input type="text" name="field_escape_char" id="field_escape_char" class="edt_30" maxlength="1" value="<?=(""!=$_POST["field_escape_char"] ? htmlspecialchars($_POST["field_escape_char"]) : "\\")?>"/></td> </tr> <tr> <td>Encoding:</td> <td> <select name="encoding" id="encoding" class="edt"> <? if(!empty($arr_encodings)) foreach($arr_encodings as $charset=>$description): ?> <option value="<?=$charset?>"<?=($charset == $_POST["encoding"] ? "selected=\"selected\"" : "")?>><?=$description?></option> <? endforeach;?> </select> </td> </tr> <tr> <td colspan="3"> </td> </tr> <tr> <td colspan="3" align="center"><input type="Submit" name="Go" value="Import it" onclick=" var s = document.getElementById('file_source'); if(null != s && '' == s.value) {alert('Define file name'); s.focus(); return false;}"></td> </tr> </table> </form> Quote Link to comment https://forums.phpfreaks.com/topic/237488-php-file-browse-upload-issue/#findComment-1220395 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.