За последние 24 часа нас посетили 17577 программистов и 1723 робота. Сейчас ищут 1919 программистов ...

....перенос из html в БД....

Тема в разделе "PHP и базы данных", создана пользователем rodion4657, 9 апр 2012.

  1. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Подскажите пожалуйста как перенести данные из таблицы-html в БД
    Таблица получается путем считывания данных из .xls файла(библиотека phpExcel)
    сам скрипт считывания
    Код (PHP):
    1. <?php
    2.         PATH_SEPARATOR . 'Z:/home/localhost/www/PhpExcel/Classes/');
    3. require_once 'PHPExcel/IOFactory.php';
    4. $objPHPExcel = PHPExcel_IOFactory::load("C:/Documents and Settings/Admin/Рабочий стол/tt.xls");
    5. $objPHPExcel->setActiveSheetIndex(0);
    6. $aSheet = $objPHPExcel->getActiveSheet();
    7. echo '<table border="1" >';
    8. //echo '<thead>';
    9. //получим итератор строки и пройдемся по нему циклом
    10. foreach ($aSheet->getRowIterator() as $row) {
    11.   echo "<tr>\r\n";
    12.  
    13.   //получим итератор ячеек текущей строки
    14.   $cellIterator = $row->getCellIterator();
    15.   //пройдемся циклом по ячейкам строки
    16.   foreach ($cellIterator as $cell) {
    17.     //и выведем значения
    18.     echo "<td>" . $cell->getCalculatedValue() . "</td>";
    19.     //echo '</thead>';
    20.   }
    21.   echo "<tr>\r\n";
    22. }
    23. echo '</table>';
    24. ?>
    25. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    26.  
    27. <html xmlns="http://www.w3.org/1999/xhtml">
    28.   <head profile="http://gmpg.org/xfn/11">
    29.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    30.  
    31.   </head>
    32.  
    33.   <body>
    34.  
    35.  
    36.   </body>
    37. </html>
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    стоит собрать массив, и потом по массиву пройтись и вкрячить в бд.
     
  3. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    ...можно немного подробней...я не понимаю как данные собрать в массив, чтобы потом, при переносе в БД каждая запись была в соответствующем ей столбце...
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1. $array = array();
    2. foreach ($aSheet->getRowIterator() as $row) {
    3.   //echo "<tr>\r\n";
    4.   //получим итератор ячеек текущей строки
    5.   $cellIterator = $row->getCellIterator();
    6.   //пройдемся циклом по ячейкам строки
    7.   $line = array();
    8.   foreach ($cellIterator as $cell) {
    9.     //и выведем значения
    10.     //echo "<td>" . $cell->getCalculatedValue() . "</td>";
    11.     $line[] = $cell->getCalculatedValue();
    12.     //echo '</thead>';
    13.   }
    14.   $array[]=$line;
    15.   //echo "<tr>\r\n";
    16. }
    17.  
    18. var_dump($array); 
     
  5. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    А как применить написанный вами код?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в итоге этого кода получается массив. а что с ним делать это уже ваше решение. =)
     
  7. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Проблема в том, что здесь идет считывание всех строк, а мне нужно чтобы считывало начиная со 2(названия столбцов в таблице excel не нужно они такие же как в таблице БД, в которую я и хочу добавить записи из .xls файла) и сам запрос на добавление будет такой?
    Код (Text):
    1.  $query = "INSERT INTO t (name, old, ves, date) VALUES ('".$line."')";
    2.    mysql_query ( $query );
    или что нужно использовать в качестве
    Код (Text):
    1.  VALUES(....)
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    array_shift($array);

    удалит первый элемент массива (в твое случае первую строку)
     
  9. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Спасибо)разобрался правда по-другому,но вот появился новый вопрос реально ли тоже самое сделать, если база данных состоит из нескольких таблиц?
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    а то же самое - это что?
     
  11. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    переносить записи из .xls файла в базу данных mysql...
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    похоже $objPHPExcel->setActiveSheetIndex(0);
     
  13. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ну ты на выходе получил массив, дальше бесконечное поле деятельности, хоть в одну таблицу, хоть в десяток...это уже дело вкуса...
     
  14. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    сейчас как-то и представить не могу как сделать, чтобы часть записей из массива ушла в одну таблицу, часть в другую....(((если не сложно подскажите..
     
  15. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    нужен какой-то критерий деления на части...есть такой?
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем тебе несколько таблиц?
     
  17. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    для того чтобы БД была приведена к 3-Нормальной Форме...
     
  18. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    как вставлять картинку на этом форуме не пойму...где вложения?подскажите хочу выложить вид таблицы бд...
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    к какой-какой форме?
     
  20. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    херня там написана. если следовать такой логике, то правильно сделать "четвертую нормальную форму". а не писать один товар два раза в одну таблицу.

    то, что ты задумал - правильно. но ты не объяснил чего там у тебя и как и что требуется в итоге. так что ничего посоветовать не могу.
     
  22. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    ну мне по сути просто нужно подсказать как из массива раскидать данные по разным таблицам....как задать такие критерии, чтобы часть данных ушла в 1, часть во 2, часть в 3 таблицы?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я тебя понял.

    библиотека.
    в ней:
    1. клиенты - она существует для них.
    2. книги - описание книги и НОМЕР автора, количество книг и т.п.
    3. авторы книг
    4. Таблица где номер клиента, номер книжки и две даты - это кто что когда взял и когда должен вернуть.
    5.... и др - шкафы, где лежат книги, соотв тут можно задать его местоположение и номер и вписать номер в таблицу с книгами... и т.п. тут можно уже много чело плодить. Можно дойти до 30 таблиц легко. Ввести очередь, заявки на редкие книги, штрафы за просрочку, историю, когда кто и что брал... короче, ты понял.

    обычно стремятся делать так.
     
  24. rodion4657

    rodion4657 Активный пользователь

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Спасибо...еще такой вопрос, нужно импортировать данные из бд в excel, но не все, а только результат поиска и чтобы этот результат еще и отобразился на html странице, вот код, но что то не хочет работать....подскажите что не так?
    Код (Text):
    1. <?php
    2.  
    3.  $filename = 'tt.xls';
    4.  
    5. /* Соединение, выбор БД */
    6. $db = mysql_connect("localhost", "rau2", ""); mysql_select_db("baza2", $db);
    7. mysql_query("SET NAMES UTF-8");
    8.  
    9. $query = "SELECT * FROM t WHERE UPPER (date) LIKE '%".strtoupper($_POST['date'])."%'";
    10.   $res = mysql_query( $query,$db ) or die("Запрос ошибочный");
    11.  
    12.    echo '<h2>База</h2>';
    13.    echo '<table border="1" cellpadding="2" cellspacing="0">';
    14.   echo '<tr><th>ID</th><th>Имя</th><th>Возраст</th><th>Вес</th><th>Дата</th><th>Ред.</th><th>Удл.</th></tr>';
    15.  
    16.  $row = mysql_fetch_array($res);
    17.  
    18.   while ( $row = mysql_fetch_array( $res ) )
    19.    {
    20.      echo '<tr>';
    21.      echo '<td>'.$row['id'].'</td>';
    22.      echo '<td>'.$row['name'].'</td>';
    23.      echo '<td>'.$row['old'].'</td>';
    24.      echo '<td>'.$row['ves'].'</td>';
    25.       echo '<td>'.$row['date'].'</td>';  
    26.      echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=editform&id='.$row['id'].'">Ред.</a></td>';
    27.      echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=delete&id='.$row['id'].'">Удл.</a></td>';
    28.      echo '</tr>';
    29.    }
    30.    echo '</table>';
    31.      echo '</br></br><td><button type="button" onClick="history.back();">Отобразить всю базу данных</button></td>';
    32.  
    33.  
    34. require_once 'Z:/home/localhost/www/PhpExcel/Classes/PHPExcel.php';
    35. $phpExcel = new PHPExcel();
    36.  
    37.  for($i = 2;$row = mysql_fetch_array($res);$i++)
    38.  {
    39. $foo = $phpExcel->getActiveSheet()->setCellValue('A1', 'Имя');
    40. $foo = $phpExcel->getActiveSheet()->setCellValue('B1', 'Возраст');
    41. $foo = $phpExcel->getActiveSheet()->setCellValue('C1', 'Вес');
    42. $foo = $phpExcel->getActiveSheet()->setCellValue('D1', 'Дата');
    43.  
    44. $foo = $phpExcel->getActiveSheet()->setCellValue('A'.$i, $row['name']);
    45. $foo = $phpExcel->getActiveSheet()->setCellValue('B'.$i, $row['old']);
    46. $foo = $phpExcel->getActiveSheet()->setCellValue('C'.$i, $row['ves']);
    47. $foo = $phpExcel->getActiveSheet()->setCellValue('D'.$i, $row['date']);
    48. }
    49.  
    50. $phpExcel = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5');
    51. $phpExcel->save($filename);
    52.  
    53.  
    54.  $data = file_get_contents($filename);
    55.  
    56.           // Generate the server headers
    57.           if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    58.           {
    59.              header('Content-Type: application/vnd.ms-excel;');
    60.              header('Content-Disposition: attachment; filename="'.$filename.'"');
    61.              header('Expires: 0');
    62.              header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    63.              header("Content-Transfer-Encoding: binary");
    64.              header('Pragma: public');
    65.              header("Content-Length: ".strlen($data));
    66.           }
    67.           else
    68.           {
    69.              header('Content-Type: application/vnd.ms-excel;');
    70.              header('Content-Disposition: attachment; filename="'.$filename.'"');
    71.              header("Content-Transfer-Encoding: binary");
    72.              header('Expires: 0');
    73.              header('Pragma: no-cache');
    74.              header("Content-Length: ".strlen($data));
    75.           }
    76.    exit($data);
    77.  
    78.  
    79.    
    80. ?>
    81. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    82.  
    83. <html xmlns="http://www.w3.org/1999/xhtml">
    84. <head profile="http://gmpg.org/xfn/11">
    85.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    86.    
    87. </head>
    88.  
    89. <body>
    90.  
    91. </body>
    92. </html>
     
  25. Jakiro

    Jakiro Активный пользователь

    С нами с:
    8 май 2012
    Сообщения:
    9
    Симпатии:
    0
    А если дочитать хотя бы до середины, то можно увидеть:
    Кхм, простите, а Вам знаком термин атомарность данных?
    Ничего против Вас не имею, но к себе ни программистом, ни проектировщиком, я бы Вас не взял. Ибо именно такие вопросы я и задаю на сообеседованиях.