Еще раз всем привет. Написал небольшой код для импорта из csv в mysql
-csv в массив преобразует нормально
-импортирует нормально
а вот с тем что бы он по столбцу если значение есть до делал update а не insert ни как не могу разобраться
<?php
$allowed_extensions = array('csv');
$upload_path = '/completed';
if (!empty($_FILES['file'])) {
if ($_FILES['file']['error'] == 0) {
$file = explode(".", $_FILES['file']['name']);
$extension = array_pop($file);
if (in_array($extension, $allowed_extensions)) {
if (move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name'])) {
$handle = $_FILES['file']['name'];
$options = array(
'enable' => true, // Скрипт работает только если значение TRUE
/* Настройки CSV */
'filename' => $handle, // Имя файла CSV. Находиться должен в одной папке со скриптом
'delimiter' => ';', // Какой разделитель используется
/* Настройки подключения к БД */
'db_server' => 'localhost', // Сервер БД
'db_user' => 'root', // Имя пользователя
'db_password' => '', // Пароль
'db_base' => 'dvigloshop' // Имя базы данных
);
if(!$options['enable']) die('Скрипт отключен, дальнейшая обработка данных невозможна!');
/*
*
* Функции скрипта
*
*/
// Основная функция, из импортируемого файла выбираем данные в массив
// !Во время первой итерации значения первой строки будут являться ключами ассоциативного массива!
function csv_to_array($filename='') {
if(!file_exists($filename) || !is_readable($filename)){
return FALSE;
}
global $options;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $options['delimiter'])) !== FALSE) {
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
/*
* Подключаемся к Базе Данных
*
*/
$link = mysqli_connect($options['db_server'], $options['db_user'], $options['db_password'],$options['db_base']);
if (!$link) {
die('Ошибка соединения: ' . mysqli_error($link));
}
// Указываем, что общаемся с БД только в UTF-8
mysqli_query($link,"SET NAMES 'utf8'");
mysqli_query($link,"SET CHARACTER SET 'utf8'");
mysqli_query($link,"SET SESSION collation_connection = 'utf8_general_ci'");
// Выбираем интересующую нас Базу
//$db_selected = mysqli_select_db($link,$options['db_base']);
//if (!$db_selected) {
// die ('Не удалось выбрать базу db_data: ' . mysqli_error($link));
//}
// Отключаем индексацию таблицы, для максимального быстродействия
mysqli_query($link,"ALTER TABLE `".$options['db_base']."` DISABLE KEYS");
$obn=0;
$dob=0;
foreach (csv_to_array($options['filename']) as $val) {
$rrrr="";
// Тут собственно делаем запросы в соответствии с задачей
echo 'Массив входящий';
print_r($val);
echo '</br></br>';
//получаю значение поля
$zavnumber = current($val);
//выбираю из базы по этому значению
$zapnumber = "SELECT * FROM `sdvd_products` WHERE `zavnumber`='".$zavnumber."'";
// $querynumber = mysqli_query($link,$zapnumber);
// $row = mysqli_fetch_assoc($querynumber);
// $rrrr = $row["zavnumber"];
$zapnumber = mysqli_real_escape_string($link, $zapnumber);
if ($result = mysqli_query($link, $zapnumber)) {
echo 'Переменная result';
print_r($result);
echo '</br></br>';
/* извлечение ассоциативного массива */
while ($row = mysqli_fetch_assoc($result)) {
printf ($row);
$rrrr = $row["zavnumber"];
}
echo "ffff".$rrrr;
echo '</br></br>';
/* удаление выборки */
mysqli_free_result($result);
}
echo 'Номер';
var_dump($zavnumber);
echo '</br></br>';
echo 'Запрос на номер';
var_dump($zapnumber);
echo '</br></br>';
// print_r($querynumber);
// echo '</br></br>';
// print_r($rrrr);
// echo '</br></br>';
if ($rrrr !== ""){
$sql_values = array();
while(list($key,$value) = each($val)){
$keyval = "`".$key ."` = '".$value."'";
print_r($keyval);
echo '</br></br>';
array_push($sql_values,$keyval);
}
print_r($sql_values);
echo '</br></br>';
$tab = implode(', ',$sql_values);
$sql = "UPDATE `sdvd_products` SET ". $tab ." WHERE `zavnumber`=\'".$zavnumber."\'";
$obn++;
print_r($sql.'</br>');
}else{
$sql = "INSERT INTO `sdvd_products`";
// implode keys of $array...
$sql .= " (`".implode("`, `", array_keys($val))."`)";
// implode values of $array...
$sql .= " VALUES ('".implode("', '", $val)."') ";
$dob++;
print_r($sql.'</br>');
}
mysqli_query($link,$sql);
$sql = "";
}
// Включаем индексацию таблицы
mysqli_query($link,"ALTER TABLE `".$options['db_base']."` ENABLE KEYS");
// Закрываем соединение с БД
mysqli_close($link);
echo"Обновлено ".$obn;
echo"Добавлено ".$dob;
}
} else {
$message = '<span class="red">Only .csv file format is allowed</span>';
}
} else {
$message = '<span class="red">There was a problem with your file</span>';
}
}
?>
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Upload CSV to MySQL</title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<link href="css/core.css" rel="stylesheet" type="text/css" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<section id="wrapper">
<form action="" method="post" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0" class="table">
<tr>
<th><label for="file">Select file</label> <?php echo $message; ?></th>
</tr>
<tr>
<td><input type="file" name="file" id="file" size="30" /></td>
</tr>
<tr>
<td><input type="submit" id="btn" class="fl_l" value="Submit" /></td>
</tr>
</table>
</form>
</section>
</body>
</html>
формат csv
zavnumber;price;kolichestvo
ttt132-12059;86753;5
99132-12051;86753;3
99132-12052;86753;8
954442-12053;86753;3
99132-12054;86753;3
99132-12055;55553;3
333132-12056;86753;3
rrr32-12057;86753;3
99132-12058;86753;3
99132-12059;86753;4
99132-12060;86753;3
99132-12061;86753;3
99132-12062;86753;3
99132-12063;86753;3
99132-12064;86753;3
99132-12065;86753;3