Member Avatar for Pidgetastic

Hi, I have been trying to import the data from a CSV file (10,000 rows) into a database using SQL and PHP

<body> <div id="container"> <div id="form"> <?php $user="root"; $database="test"; mysql_connect("localhost",$user); @mysql_select_db($database) or die( "Unable to select database"); //Upload File if (isset($_POST['submit'])) { if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; } $query = <<<eof LOAD DATA INFILE '$filename' <<<<<<<<<<ERROR HERE INTO TABLE importing FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' (text,number) IGNORE 1 LINES eof; mysql_query($query); print "Import done"; //view upload form }else { print "Upload new csv by browsing to file and clicking on Upload<br />\n"; print "<form enctype='multipart/form-data' action='upload.php' method='post'>"; print "File name to import:<br />\n"; print "<input size='50' type='file' name='filename'><br />\n"; print "<input type='submit' name='submit' value='Upload'></form>"; } ?> </div> </div> </body> </html> 

the only error being returned is "Notice: Undefined variable: filename" and I can't see how to fix it no matter how much I look...
any help would be appreciated, I think i have been staring at code too long today lol

You get that because $filename is undefined, it has no value set. Somewhere you need to have:

$filename = ''; // not an empty string of course, but pointing to the uploaded file 
Member Avatar for akmozo

Hi,

I think that you should add

$filename = $_FILES['filename']['name']; 

after

$query = <<<eof 
Member Avatar for Pidgetastic

but wont the form be defining it? i tried various different things. inluding trying to retrieve it with POST but had no luck

Member Avatar for Pidgetastic

@akmozo

it just throws up "Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING" if i do that

The file will be uploaded to a temporary location, and you have to use move_uploaded_file to put it somewhere permanent. The filename you use there, you can use to import.

UPDATE: Just found this link on the MySQL forum.

Member Avatar for Pidgetastic

The file will be uploaded to a temporary location, and you have to use move_uploaded_file to put it somewhere permanent. The filename you use there, you can use to import.

does it need a location to move to, because i'm not moving the file at all?
if not, something like:
move_uploaded_file ($filename) would work?
and where would it be poisitoned in the code?

Thanks

Member Avatar for akmozo

When we upload a file, the server will put it in a temporary directory (like /server/web_server/temp ) so it's not accessible from the web ( for the visitors of your site ), that's why we should move it in another directory which is accessible.

Try this at the beginnig of upload.php ( before the query ):

 $temp_file = $_FILES['Filedata']['tmp_name']; $origin_file = $_FILES['Filedata']['name']; $target_file = '/uploads/'.$origin_file; move_uploaded_file($temp_file, $target_file); $file_name = $target_file; 
Member Avatar for Pidgetastic

so does that mean that after the user has left the file would be left where I moved it?

Member Avatar for akmozo

This depends on your needs !

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.