Помощь - Поиск - Пользователи - Календарь
Полная версия: Экспорт Из Excel В Mysql
Форум Php-Nuke > Форумы разработчиков > Вопросы по MySQL
Дядя Вова
Не нашел в форуме ответ на этот вопрос, если есть - ткните пожайлуста пальцем.
А нужнов от что: перекидывать данные из Excel в базу, причем регулярно.
Кто что подскажет?
Artu
Navicat MySQL
Miha_hard
Я так понимаю, что человеку надо на автомате Artu..
Дядя Вова лучше использовать для таких целей cvs
Дядя Вова
Да cvs подойдет. Поглядел в phpMyAdmin можно загрузить из cvs, пока наверное устроит. Буду со скриптом возиться.
Miha_hard
там простой очень скрипт.. если нужно я скину прям готовую админку для этого.. поправите там под себя. Хотя там править почти и не нужно ничего..
Alexander-V-Sh
Miha_hard

Скиньте smile.gif Мне ненадо пока, но когда, пригодится чтобы не искать smile.gif
Miha_hard
у меня там сложнее принцип.. у меня динамически создаются поля.. но вам оно не надо smile.gif
Вот упрощенный вариант. разберётесь ..

Код


function Product() {
    global $prefix, $db, $admin_file;
    include ("header.php");
    OpenTable();
    GraphicAdmin();
    echo "<center><font class='title'><b>Продукция</b></font></center>";
    echo "<br>";
    echo "<form enctype=\"multipart/form-data\" action=\"admin.php\" method=\"post\" style=\"display: inline\">";
    echo "Загрузить файлы структуры(<b>Strukt.csv</b>) и товара(<b>Price.csv</b>)<br><input name=\"userfile\" type=\"file\" style=\"width=450px\">";
    echo "<input type=\"hidden\" name=\"module\" value=\"Product\">
    <input type=\"hidden\" name=\"op\" value=\"Product_upload\">
    <input type=\"submit\" value=\"Добавить товар...\"></form>";

    CloseTable();
    include ("footer.php");
}

function Product_upload() {
    global $prefix, $db, $admin_file, $module_name;
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    $f_name = explode(".",$_FILES['userfile']['name']);
    $extension = strtolower($f_name[1]);
    if ($extension != "csv") {
    $eror_text = "Вы пытаетесь загрузить не разрешенный тип файла!";
    exit;
    }
    $realname = $_FILES['userfile']['name'];
    $res = copy($_FILES['userfile']['tmp_name'], "upload/$realname");
    if (!$res) { echo "Eror Upload file"; exit; }

$path_real = "upload/$realname";
$fileprice = $path_real;
$f_name = explode(".",$realname);
$nameprice = strtolower($f_name[0]);
$f= fopen("$fileprice","r") or die("ошибка");
for ($i=0; $data=fgetcsv($f,1000, ";"); $i++){
$num= count($data);
if ($num==1 && $data[0]==="") continue;
$crt ="";
for ($a=0; $a<$num; $a++){
$crt .= ", name".($a+1)." varchar(255)";
}
}
fclose($f);
$sql = $db->sql_query("TRUNCATE TABLE ".$prefix."_mprice_".$nameprice."");
//$result=$db->sql_query("CREATE TABLE ".$prefix."_mprice_".$nameprice." ( `aid` int(11) NOT NULL auto_increment ".$crt.", PRIMARY KEY  (aid))");
    include ("header.php");
    OpenTable();
    GraphicAdmin();
    echo "<center><font class='title'><b>Продукция</b></font></center>";
    echo "<br>";
//echo "<b>Создана таблица в Mysql <font color=blue>".$prefix."_mprice_".$nameprice."</font> (".($num+1)." полей)</b><br>";
//echo "<code>\$result=\$db->sql_query(\"CREATE TABLE ".$prefix."_mprice_".$nameprice." ( `aid` int(11) NOT NULL auto_increment ".$crt.", PRIMARY KEY  (aid))\");</code><br><br>";

$f= fopen("$fileprice","r") or die("ошибка");
for ($i=0; $data=fgetcsv($f,1000, ";"); $i++){
$num= count($data);
if ($num==1 && $data[0]==="") continue;
    echo "<br>";
echo "<b>Импортироана строка номер ".($i+1)." (".($num+1)." полей):</b><br>";
$echoins = "\$result2=\$db->sql_query(\"INSERT INTO ".$prefix."_mprice_".$nameprice." VALUES (NULL, ";
$ins = "";
for ($c=0; $c<$num; $c++){
if($c==$num-1){
$echoins .= "' ".str_replace("'", "", $data[$c])." '";
$ins .= "' ".str_replace("'", "", $data[$c])." '";
}else {
$echoins .=  "' ".str_replace("'", "", $data[$c])." ', ";
$ins .=  "' ".str_replace("'", "", $data[$c])." ', ";
}
}
$echoins .= ")\");";
echo "<code>$echoins</code><br>";
$result2=$db->sql_query("INSERT INTO ".$prefix."_mprice_".$nameprice." VALUES (NULL, ".$ins.")");
}
fclose($f);
@unlink($fileprice);
}
CloseTable();
    include("footer.php");
}



Если раскомментровать код там, то таблицы и создадутся сами.. с именем префикс_mprice_имя_файла
это, повторяю - админка..
В данном случае создаются таблицы категорий и самой продукции.. как их потом выводить пользователю это уже писать не стану.. ибо просто..
Примерный результат можно увидеть вот тут: http://choco-land.ru/prodcat8.html
Дядя Вова
Разобрался, все работает, спасибо
Damian
Кстати, на некоторых серверах функция fgetcsv() может работать некорректно.
Например, на Ayola.net эта функция извлекает только по полстроки из файла.
В сети нашел альтернативу:
Код
function xfgetcsv($f='', $x='', $s=';'){
    if($str=fgets($f)){
        $data=split($s, trim($str));
    return $data;
    }else{
    return FALSE;
    }
}

Здесь
$f - дескриптор файла, предварительно открытого функцией fopen();
$x - не знаю для чего, я установил в 0;
$s - символ-разделитель в CSV файле, как правило, это ";".
Единственная беда - невозможно установить ограничение на длину строки.
Хотя у меня на sanmir.dp.ua базу из 2278 позиций вышеуказанный скрипт (модернизированный слегка) перенес из CSV в MySQL секунд за 5.
Работает - ОГОНЬ!
Miha_hard
$x тут вообще не при делах smile.gif но дополнение полезное.
p.s. приятно что мой код кому таки нужен бывает smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2014 Invision Power Services, Inc.