Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите дописать скрипт импорта csv в mysql
 
 автор: scva   (19.04.2010 в 13:30)   письмо автору
 
 

<? 
if (isset($_GET['id']))          {$id $_GET['id'];}
if (isset(
$_POST['import']))          {$import $_POST['import'];}
if (isset(
$_POST['id']))          {$id $_POST['id'];}
if (isset (
$import))
{
$data File("admin/csv.csv"); 
for (
$i=0;$i<count($data);$i++) 

$data_array explode(";"$data[$i]); 
$query "UPDATE  table SET title='".mysql_real_escape_string($title)."', 
articul='"
.mysql_real_escape_string($articul)."',
korpus='"
.mysql_real_escape_string($korpus)."',
glass='"
.mysql_real_escape_string($glass)."',
sex='"
.mysql_real_escape_string($sex)."',
color='"
.mysql_real_escape_string($color)."',
wr='"
.mysql_real_escape_string($wr)."',
diameter='"
.mysql_real_escape_string($diameter)."',
bracelet='"
.mysql_real_escape_string($bracelet)."',
id_category='"
.mysql_real_escape_string($id_category)."', 
name_category='"
.mysql_real_escape_string($name_category)."', 
id_brand='"
.mysql_real_escape_string($id_brand)."', 
opisanie='"
.mysql_real_escape_string($opisanie)."', 
name_brand='"
.mysql_real_escape_string($name_brand)."',
dop='"
.mysql_real_escape_string($dop)."',
price='"
.mysql_real_escape_string($price)."', 
des='"
.mysql_real_escape_string($des)."', 
description='"
.mysql_real_escape_string($description)."', 
opisanie='"
.mysql_real_escape_string($opisanie)."', 
yamarket='"
.mysql_real_escape_string($yamarket)."', 
id_podcat='"
.mysql_real_escape_string($id_podcat)."', 
name_podcat='"
.mysql_real_escape_string($name_podcat)."', 
spec='"
.mysql_real_escape_string($spec)."' WHERE id='".mysql_real_escape_string($id)."'"
$result mysql_query$query);
echo 
"Успешно";

}
else
{
echo 
'<form action="importer.php" method="post" name="form">
Обновить? <input name="import" type="submit" value="да" />
</form>'
;     
}
?> 

  Ответить  
 
 автор: cheops   (19.04.2010 в 14:35)   письмо автору
 
   для: scva   (19.04.2010 в 13:30)
 

А что со скриптом не так? Он не работает, работает неправильно?

  Ответить  
 
 автор: scva   (19.04.2010 в 14:37)   письмо автору
 
   для: cheops   (19.04.2010 в 14:35)
 

тупо не обновляет

  Ответить  
 
 автор: cheops   (19.04.2010 в 14:41)   письмо автору
 
   для: scva   (19.04.2010 в 13:30)
 

У вас в WHERE-условии используется $id, т.е. в цикле много раз обновляется одна строка. И вообще не понятно откуда берутся переменые вроде $title, $articcul и т.п. В место них вероятно нужно подставить элементы массива $data_array?

  Ответить  
 
 автор: scva   (19.04.2010 в 14:43)   письмо автору
 
   для: cheops   (19.04.2010 в 14:41)
 

так?
articul='.$data_array[1]'


включил ошибки
ругается на
]$data = File("admin/csv.csv");[/code

[code]Warning: file(admin/csv.csv) [function.file]: failed to open stream: No such file or directory in

  Ответить  
 
 автор: cheops   (19.04.2010 в 15:27)   письмо автору
 
   для: scva   (19.04.2010 в 14:43)
 

>articul='.$data_array[1]'
Вероятно да, только нужно учитывать, что нумерация в массивах начинается с 0

>включил ошибки
>ругается на
Скрипт не может найти файл csv.csv - он где у вас лежит относительно папки admin?

  Ответить  
 
 автор: scva   (19.04.2010 в 15:30)   письмо автору
 
   для: cheops   (19.04.2010 в 15:27)
 

>>articul='.$data_array[1]'
>Вероятно да, только нужно учитывать, что нумерация в массивах начинается с 0
>
>>включил ошибки
>>ругается на
>Скрипт не может найти файл csv.csv - он где у вас лежит относительно папки admin?

C этим разобрался

Сделал массивом начал обновлять но при обновлении стер всю базу и оставил тольку одну запись которая в ксв файле вот скрипт

<? 
if (isset($_GET['id']))          {$id $_GET['id'];}
if (isset(
$_POST['import']))          {$import $_POST['import'];}
if (isset(
$_POST['id']))          {$id $_POST['id'];}

if (isset (
$import))
{


$data File("admin/1.csv"); 
for (
$i=0;$i<count($data);$i++) 

$data_array explode(";"$data[$i]); 
unset (
$data_array[0]); 

$query "UPDATE  tovar SET title='$data_array[1]', 
articul='
$data_array[2]',
korpus='
$data_array[3]',
glass='
$data_array[4]',
sex='
$data_array[5]',
color='
$data_array[6]',
wr='
$data_array[7]',
diameter='
$data_array[8]',
bracelet='
$data_array[9]',
id_category='
$data_array[10]', 
name_category='
$data_array[11]',
id_brand='
$data_array[12]',
opisanie='
$data_array[13]',
name_brand='
$data_array[14]',
dop='
$data_array[15]',
price='
$data_array[16]',
des='
$data_array[17]',
description='
$data_array[18]',
opisanie='
$data_array[19]',
yamarket='
$data_array[20]',
id_podcat='
$data_array[21]',
name_podcat='
$data_array[22]',
spec='
$data_array[23]'"   or die("error"); 
$result mysql_query$query);

echo 
"Успешно";



}

else
{
echo 
'<form action="importer.php" method="post" name="form">
Обновить? <input name="import" type="submit" value="да" />
</form>'
;    
    
}
?> 


  Ответить  
 
 автор: neadekvat   (19.04.2010 в 15:45)   письмо автору
 
   для: scva   (19.04.2010 в 15:30)
 

> unset ($data_array[0]);
Так изощренно еще никто не расправлялся с вопросом индексации массивов с нуля =))
А в базе у вас ничего не удалилось. Все просто обновилось - как вы сказали, так и сделали. Ведь условия WHERE нет.

  Ответить  
 
 автор: scva   (19.04.2010 в 15:48)   письмо автору
 
   для: neadekvat   (19.04.2010 в 15:45)
 

то есть убрать unset ($data_array[0]);)

а WHERE какое условие? where id='.$data_array['id']
чтобы обновлялось по id и не удаляло другие строки

  Ответить  
 
 автор: neadekvat   (19.04.2010 в 15:50)   письмо автору
 
   для: scva   (19.04.2010 в 15:48)
 

Нет, то есть разобраться, какие данные под каким индексом у вас хранятся. Почему так нулевой индекс боитесь? о.О

А id - он должен быть в csv файле, я так понимаю.

И вот сюда посмотрите, на функцию fgetcsv

  Ответить  
 
 автор: scva   (19.04.2010 в 16:40)   письмо автору
 
   для: neadekvat   (19.04.2010 в 15:50)
 

сможеш набросать?
в csv файле 23 столбца по дномером 1 находится id

  Ответить  
 
 автор: cheops   (19.04.2010 в 17:16)   письмо автору
 
   для: scva   (19.04.2010 в 16:40)
 

Чтобы посмотреть стуктуру массива, выведите его дамп
<?php
  
echo "<pre>";
  
print_r($data_array);
  echo 
"</pre>";
?>

В большинстве языков программирования, нумерация в индексных массивах начинается с нуля.

  Ответить  
 
 автор: scva   (19.04.2010 в 17:34)   письмо автору
 
   для: cheops   (19.04.2010 в 17:16)
 

выводит пустой массив
Array
(
)

  Ответить  
 
 автор: cheops   (19.04.2010 в 17:53)   письмо автору
 
   для: scva   (19.04.2010 в 17:34)
 

Значит в нём ничего нет и нужно сначала решить проблему с тем, почему в него не попадают данные из файла csv.csv? Вы проверку дампа массива внутри цикла производите?

  Ответить  
 
 автор: scva   (19.04.2010 в 17:59)   письмо автору
 
   для: cheops   (19.04.2010 в 17:53)
 

да.
получается что он не может прочитать csv

  Ответить  
 
 автор: cheops   (19.04.2010 в 18:58)   письмо автору
 
   для: scva   (19.04.2010 в 17:59)
 

Выведите дамп массива $data - он содрежит какие-нибудь данные?

  Ответить  
 
 автор: scva   (20.04.2010 в 12:49)   письмо автору
 
   для: cheops   (19.04.2010 в 18:58)
 

пусто

  Ответить  
 
 автор: cheops   (20.04.2010 в 14:09)   письмо автору
 
   для: scva   (20.04.2010 в 12:49)
 

А файл admin/1.csv что-нибудь содержит?

  Ответить  
 
 автор: scva   (20.04.2010 в 15:20)   письмо автору
 
   для: cheops   (20.04.2010 в 14:09)
 

587;Defy Classic Aero;
Механический хронометр с автоподзаводом;
Мужские;
Нержавеющая сталь;белый;ремень;
Сапфировое стекло;WR 300;43;
Корпус и браслет из нержавеющей стали
;;1;Новые;2;Каталог часов;
Defy Classic Aero;13;Zenith;03.0516.4000_01.R642;;y;n

во пример одной строки

  Ответить  
 
 автор: cheops   (20.04.2010 в 16:20)   письмо автору
 
   для: scva   (20.04.2010 в 15:20)
 

А почему у вас функция file() его не видит? У вас где находится скрипт разбора? В той же директории, где находится папка admin?

  Ответить  
 
 автор: scva   (22.04.2010 в 11:11)   письмо автору
 
   для: cheops   (20.04.2010 в 16:20)
 

естественно, пробывал и абсолютный ставит, все равно никаких изменений

  Ответить  
 
 автор: Trianon   (22.04.2010 в 11:51)   письмо автору
 
   для: scva   (22.04.2010 в 11:11)
 

Для начала стоит поставить error_reporting(E_ALL); в начало скрипта.

>естественно, пробывал и абсолютный ставит, все равно никаких изменений

Это лишь означает, что и с абсолютным путем Вы ошиблись.

  Ответить  
 
 автор: scva   (22.04.2010 в 18:18)   письмо автору
 
   для: Trianon   (22.04.2010 в 11:51)
 

разобрался в чем было дело
выводит результат

Array
(
    [0] => 587
    [1] => Defy Classic Aero
    [2] => Механический хронометр с автоподзаводом
    [3] => Мужские
    [4] => Нержавеющая сталь
    [5] => белый
    [6] => ремень
    [7] => Сапфировое стекло
    [8] => WR 300
    [9] => 43
    [10] => Корпус и браслет из нержавеющей стали, механизм El Primero 4000SC
    [11] => 
    [12] => 1
    [13] => Новые
    [14] => 2
    [15] => Каталог часов
    [16] => Defy Classic Aero
    [17] => 13
    [18] => Zenith
    [19] => 03.0516.4000_01.R642
    [20] => 
    [21] => y
    [22] => n

)

успешно 


но ничего не обновляется, вот обработчик

<?
$data 
file("../admin/1.csv"); 

for (
$i=0;$i<count($data);$i++) 

$data_array explode(";"$data[$i]); 

//unset ($data_array[0]); 

$query "UPDATE  `tovar` SET 
'
$data_array[0]', 
'
$data_array[1]',
'
$data_array[2]',
'
$data_array[3]',
'
$data_array[4]',
'
$data_array[5]',
'
$data_array[6]',
'
$data_array[7]',
'
$data_array[8]',
'
$data_array[9]', 
'
$data_array[10]',
'
$data_array[11]',
'
$data_array[12]',
'
$data_array[13]',
'
$data_array[14]',
'
$data_array[15]',
'
$data_array[16]',
'
$data_array[17]',
'
$data_array[18]',
'
$data_array[19]',
'
$data_array[20]',
'
$data_array[21]',
'
$data_array[22]' WHERE id='$data_array[0]'" or print 'Ошибка работы с БД: '.mysql_error(); 
$result mysql_query($query);

  echo 
"<pre>";
  
print_r ($data_array);
  echo 
"</pre>"
echo 
"успешно"
?>

  Ответить  
 
 автор: scva   (23.04.2010 в 11:01)   письмо автору
 
   для: scva   (22.04.2010 в 18:18)
 

Впрос снят, проблему решил

  Ответить  
 
 автор: Trianon   (23.04.2010 в 11:14)   письмо автору
 
   для: scva   (23.04.2010 в 11:01)
 

Имеет смысл написать, в чем же состояла неприятность.

  Ответить  
 
 автор: scva   (27.04.2010 в 14:04)   письмо автору
 
   для: scva   (23.04.2010 в 11:01)
 

Надо было элементы массива присваивать полям


id='$data_array[0]', 
title='$data_array[1]',
des='$data_array[2]',
................


и еще прикол в том что, в такой конструкции

$query = "UPDATE  `tovar` SET "
id= '$data_array[0]', " or print 'Ошибка работы с БД: '.mysql_error(); 
$result = mysql_query($query);

скрипт не работал

а вот сделав так
$query = mysql_query("UPDATE  `tovar` SET 
id= '$data_array[0]', ").........

все заработало

  Ответить  
 
 автор: cheops   (19.04.2010 в 17:17)   письмо автору
 
   для: scva   (19.04.2010 в 15:48)
 

У вас же индексный массив, откуда в нём возьмется элемент с ассоциативным ключом 'id'? Выведите дамп массива, чтобы было проще ориентироваться, под каким номером, что находится.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования