开发者

CSV Import to MySQL Table with image copy

Wondering if anyone would be so kind to help me with a addition to this script i have found online:

    if(isset($_POST['SUBMIT']))
{
     $fname = $_FILES['sel_file']['name'];

     $chk_ext = explode(".",$fname);

     if(strtolower($chk_ext[1]) == "csv")
     {

         $filename = $_FILES['sel_file']['tmp_name'];
         $handle = fopen($filename, "r");

         while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
         {
            $sql = "INSERT into user(name,email,phone) values('$data[0]','$data[1]','$data[2]')";
            mysql_query($sql) or die(mysql_error());
         }

         fclose($handle);
         echo "Successfully Imported";
     }
     else
     {
         echo "Invalid File";
     }   
}

<form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post'>

    Import File : <input type='text' name='sel_file' size='20'>
    <input type='submit' name='submit' value='submit'>

</form>

i have a csv which i want to import a bunch of data and this piece of code i have found online should do the trick but i have a couple of extra things i need to apply and hoping someone would be willing to write additional code to this for this to work.

i have 2 fields in the csv container image paths from another url:

image: http://blag.com/images.jpg images: http://blag.com/images.jpg;http://blag.com/images.jpg;http://blag.com/images.jpg;http://blag.com/images.jpg

i am wanting to grab the image from the external url and upload it to a path on the site itself and then set the local image path and image name in the database

the images part contains multiple images which i need to do the same but apply to another field with those on them but would need to be able to display those additional images on the page but not sure if possible with that ; seperator in the database but guess you guys will know if its possible to fectha dn display but thats something ele i guess

开发者_如何学C

if someone would be so kind to help me adapt that code so i can do that would be awesome as need to import a lot of data tonight :)

Thanks in advanced!


I wouldn't use php for this task. For importing the csv data I would use mysqlimport as it is much more efficient and less error prone then rolling your own php solution. For retrieving the images and storing them locally you could easily write a ruby or perl or even a bash script with curl to fetch the image and place them in the correct directory.

If this is part of another tool written in PHP then I would = look to using a system command to execute the mysqlimport on the local file. Then I would use the curl facility to grab the images and place them in the appropriate directory.


James, you can add it easily,...

In this line:

$sql = "INSERT into user(name, email, phone) values('$data[0]','$data[1]','$data[2]')";

add the name of related Database Fields to the first part(for example:)

$sql = "INSERT into user(name, email, phone **,image, images** ) values('$data[0]','$data[1]','$data[2]')";

and for add their values from the result array in $data if they are immediately after other items (I mean if it is in this format: Name - Email - Phone - image - images) you just need to add to the index of array, in this condition it would be something like this:

$sql = "INSERT into user(name, email, phone **,image, images** ) values('$data[0]','$data[1]','$data[2]' **,'$data[3]','$data[4]'** )";

------------------------------------------------

UPDATED

OK, that's not hard too... I wrote a sample code for that, let me know if you have any problem:

// List of all images separated by ";"
$all_images = "http://www.google.com/images/nav_logo40.png;http://static.php.net/www.php.net/images/php.gif";

// Make an array from the list of images
$images = explode(";", $all_images);

// We want to copy all of images in the array
foreach ($images as $img_source_path){

        // Retrive the name of file from path (It works for most of filenames!)
    preg_match("/\/(?P<name>[a-zA-Z0-9._]+)$/", $img_source_path, $img_matches);
    $img_filename = $img_matches[name];

        // Make destination path
    $img_destitation_path = getcwd()."/temp/".$img_filename;

        // Copy file and check if it is done successfully
    if (!copy($img_source_path, $img_destitation_path)) {
        echo "failed to copy $img_filename...\n";
    }
    else {
        echo "$img_filename copied successfully...\n";

    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜