За последние 24 часа нас посетили 22812 программистов и 1271 робот. Сейчас ищут 766 программистов ...

Импорт из excel в sql таблицы через скрипт php

Тема в разделе "PHP и базы данных", создана пользователем gringo_beta, 17 мар 2021.

Метки:
  1. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    добрый день только учусь, заранее извиняюсь если что то нетак.
    Суть проблемы: настроил экспорт из файла в базу данных параметров, но в файле есть одно необязательное поле (оно заполнено не у всех объектов) как результат товары у которых это поле не заполнено не вносятся в базу данных, я добавил исключение что если это поля нет считать его null, всеравно неработает однако если прописать правило что если это поле не заполнено счтать его 0 или 1 то все работает но важно передать именно параметр null

    вот код
    Код (Text):
    1. <?php
    2.   function insert($name, $desc, $year, $rating, $poster, $category_id) {
    3.     $mysqli = new mysqli('localhost', 'mysql', 'mysql', 'test2');
    4.     if (mysqli_connect_errno()) {
    5.       print_r('соединение не установлено');
    6.       exit();
    7.     }
    8.     $mysqli->set_charset('utf8');
    9.     $query = "INSERT INTO movie VALUES (null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
    10.     $result = false;
    11.     if ($mysqli-> query($query)) {
    12.       $result = true;
    13.     }
    14.     return $result;
    15.   }
    16.  
    17.  
    18.     $xml = simplexml_load_file("xml/movies.xml") or die  ("Error: Cannot create object");
    19.       // echo count($xml);
    20.       $title = null;
    21.       $title_orign = null;
    22.       $post = null;
    23.       $rating = null;
    24.       $year = null;
    25.  
    26.       foreach ($xml as $movie_key => $movie) {
    27.         // echo $movie->title_russian.'<br>'; это равно строке ниже
    28.         $title = $movie->title_russian;
    29.         $title_orign = $movie->title_original;
    30.         $year  = $movie->year;
    31.        
    32.         foreach ($movie->poster->big->attributes() as $poster_key => $poster) {
    33.           $post = $poster;
    34.         }
    35.         if ($movie->imdb) {
    36.           // echo $movie->imdb->attributes()['rating'];
    37.           $rating = $movie->imdb->attributes()['rating'];
    38.         }
    39.          else {
    40.            $rating = null;
    41.          }
    42.         insert($title, $title_orign, $year, $rating, $post, 1);
    43.  
    44.       }
    45.     echo "<pre>";
    46.     print_r ($xml);
    47.     echo "</pre>";
    48. ?>
    49. <!DOCTYPE html>
    50. <html lang="en">
    51. <head>
    52.     <meta charset="UTF-8">
    53.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    54.     <title>Document</title>
    55. </head>
    56. <body>
    57.  
    58. </body>
    59. </html>
    60.  
    61. при добавлении в базу данных
    62. происходит добавление фильмов только с рейтингом
    63. там где рейтинг не указан они не вносятся в базу данных
    64.  
    65. тоесть правило
    66.          else {
    67.            $rating = null;
    68.          }
    69. почему то неработает
    70. хотя если указать          else {
    71.            $rating = 0;
    72.          }
    73.  
    74. то все фильмы вносятся в базу данных хоть и 0 рейтингом.
    75. как сделать чтобы правиль
    76.          else {
    77.            $rating = null;
    78.          }
    79. заработало
     
  2. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Структуру таблицы movie покажите
     
  3. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    добавил сейчас на модерации
     
  4. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    что то случилось со вчера модерацию сообщение не проходит
    --- Добавлено ---
    сейчас еще раз добавлю
    --- Добавлено ---
    вот вставил
     

    Вложения:

    • 3.png
      3.png
      Размер файла:
      39,4 КБ
      Просмотров:
      3
    • 3.png
      3.png
      Размер файла:
      39,4 КБ
      Просмотров:
      3
  5. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Справа на скринах иконки в виде карандаша "изменить".
    Там выберите значение по умолчанию "как определено", а под ним будет поле, оставьте его пустым.
    В строке
    Код (Text):
    1. $query = "INSERT INTO movie VALUES (null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
    null замените на ''
    Код (Text):
    1. $query = "INSERT INTO movie VALUES ('', '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
    Соответственно и в этой части кода тоже
    Код (Text):
    1.       $title = null;
    2.       $title_orign = null;
    3.       $post = null;
    4.       $rating = null;
    5.       $year = null;
     
  6. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    пишет ошибка при правке поля значение у rating
     

    Вложения:

  7. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Потому, что "как определено" пустое значение допустимо у текстовых полей.
    У INT и FLOAT нужно что-то проставить.
     
  8. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    поставил 0.0 все сохранилось
    Код (Text):
    1. $query = "INSERT INTO movie VALUES ('', '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
    тут все заменил

    Код (Text):
    1.       $title = null;
    2.       $title_orign = null;
    3.       $post = null;
    4.       $rating = '';
    5.       $year = null;
    заменил так вообще неработает, нет добавления
     
  9. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так вам только для одного поля надо было?
    Забыл со вчера.
    Кроме изменений в структуре тогда ничего не надо. Верните как было.
    А еще лучше перефразируйте вопрос.
    Что-то я начал читать более вдумчиво - ничего непонятно.
     
  10. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    при добавлении в базу данных
    происходит добавление фильмов только с рейтингом
    там где рейтинг не указан они не вносятся в базу данных

    тоесть правило
    Код (Text):
    1. else {
    2. $rating = null;
    3. }
    4. //почему то неработает
    5. !!! важно - хотя если указать else {
    6. $rating = 0;
    7. }

    то все фильмы вносятся в базу данных хоть и 0 рейтингом.

    извините если что то непонятно вроде расписал как мог суть проблемы:
    при добавлении в базу данных
    происходит добавление фильмов только с рейтингом
    там где рейтинг не указан они не вносятся в базу данных

    тоесть правило
    Код (Text):
    1. else {
    2. $rating = null;
    3. }
    почему то неработает (в базу не добавляются фильмы без рейтинга)
    хотя если указать
    Код (Text):
    1. else {
    2. $rating = 0;
    3. }

    то все фильмы вносятся в базу данных правильно с 0 рейтингом.
    но нужно внесьте именно параметр null что данное поле было пустое
    проблема в том проблема что у меня будут с 0 те у которых небыло рейтинга вообще и с таким же 0 те у кого рейтинг 0, потом их отличить не получится а null подставленный вроде как и должен был помочь
     
  11. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Теперь понятно.
    По структуре таблицы, в поле rating нельзя добавить NULL, и нельзя его игнорировать при добавлении, так как по умолчанию не должно оставаться пустым.
    Нужно либо что-то передавать, либо изменить структуру.
     
  12. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    хм а какие варианты исправления есть ? почему null в это поле вообще нельзя отправить?
    просто как то же это делается что если есть данные то заполняются если нет то нет, типо необязательное поле
     
  13. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Делается.
    Но вы так ячейки настроили.
    Выполните
    Код (Text):
    1. SHOW CREATE TABLE `movie`
    и в развернутом отображении посмотрите.
    У вас будет что-то вроде
    Код (Text):
    1. `rating` float NOT NULL,
     
  14. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    Код (Text):
    1.  
    2. CREATE TABLE `movie` (
    3.  `id` int NOT NULL AUTO_INCREMENT,
    4.  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    5.  `description` text NOT NULL,
    6.  `year` int NOT NULL,
    7.  `rating` float NOT NULL DEFAULT '0',
    8.  `poster` varchar(255) NOT NULL,
    9.  `add_date` datetime NOT NULL,
    10.  `category_id` tinyint NOT NULL,
    11.  PRIMARY KEY (`id`)
    12. ) ENGINE=InnoDB AUTO_INCREMENT=605 DEFAULT CHARSET=utf8
    вот ответ а как сделать не not null а разрешить присваивать null или null пол умолчанию если данные не поступали ?
     
  15. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    В том самом меню под карандашом отметьте "NULL"
     
  16. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    вот пометил , всеравно добавляются только те у которых есть рейтинг.
    там где его нет, недобавлены в базу данных
     

    Вложения:

  17. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Возможно, проблема в значении по умолчанию.
    Или типе данных вообще.
    Значение так же установите в NULL, а не "как определено", или "Нет" если не получится.
     
  18. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    всеравно вывод идет только тех у которых есть рейтинг
     

    Вложения:

    • 3.png
      3.png
      Размер файла:
      43,3 КБ
      Просмотров:
      3
  19. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Сейчас вот сделал таблицу
    Код (Text):
    1. movie    CREATE TABLE `movie` (
    2.   `id` int(11) NOT NULL AUTO_INCREMENT,
    3.   `name` varchar(255) NOT NULL,
    4.   `description` text NOT NULL,
    5.   `year` int(11) NOT NULL,
    6.   `rating` float DEFAULT NULL,
    7.   `poster` varchar(255) NOT NULL,
    8.   `add_date` datetime NOT NULL,
    9.   `category_id` tinyint(4) NOT NULL,
    10.   PRIMARY KEY (`id`)
    11. ) ENGINE=MyISAM AUTO_INCREMENT=1236 DEFAULT CHARSET=utf8
    замечательно всё вставляется.
    Вот так например
    Код (Text):
    1. INSERT INTO `altcoin`.`movie` (`id` ,
    2. `name` ,
    3. `description` ,
    4. `year` ,
    5. `rating` ,
    6. `poster` ,
    7. `add_date` ,
    8. `category_id`
    9. )
    10. VALUES ('1238', 'test', 'descr', '2020', NULL , '', '2021-03-19 11:53:49', '120'
    11. )
    Или так
    Код (Text):
    1. INSERT INTO `altcoin`.`movie` (`id` ,
    2. `name` ,
    3. `description` ,
    4. `year` ,
    5. `poster` ,
    6. `add_date` ,
    7. `category_id`
    8. )
    9. VALUES ('1240', 'test', 'descr', '2020', '', '2021-03-19 11:53:49', '120'
    10. )
     
    #19 Drunkenmunky, 19 мар 2021
    Последнее редактирование: 19 мар 2021
  20. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    может все удалить и попробовать с 0 создать ? может где то повредилась база данных? потому что только что заметил что tinyint(4) - длина символов не сохраняется в базе данных. тоесть вводишь символы пишешь сохранить а там ничего нет при повторном редактировании
     
  21. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  22. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    создал новую таблицу всеравно результат такой же. ума не приложу что нетак. вы можете глянуть в тимвивере?
     
  23. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Нет, давайте лучше саму таблицу, в sql. И данные, в чём там они.
     
  24. gringo_beta

    gringo_beta Новичок

    С нами с:
    17 мар 2021
    Сообщения:
    14
    Симпатии:
    0
    сам скрипт
    Код (Text):
    1. <?php
    2.   function insert($name, $desc, $year, $rating, $poster, $category_id) {
    3.     $mysqli = new mysqli('localhost', 'mysql', 'mysql', 'testhome');
    4.     if (mysqli_connect_errno()) {
    5.       print_r('соединение не установлено');
    6.       exit();
    7.     }
    8.     $mysqli->set_charset('utf8');
    9.     $query = "INSERT INTO movie VALUES (null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')";
    10.     $result = false;
    11.     // скрипт поиска ошибки
    12.     if ($mysqli-> query($query)) {
    13.       $result = true;
    14.     }
    15.   //   if( $mysqli->query($query) or die( $mysqli->error ) ) {
    16.   //     $result = true;
    17.   // }
    18.     return $result;
    19.   }
    20.  
    21.  
    22.  
    23.  
    24.     $xml = simplexml_load_file("xml/movies.xml") or die  ("Error: Cannot create object");
    25.       // echo count($xml);
    26.       $title = null;
    27.       $title_orign = null;
    28.       $post = null;
    29.       $year = null;
    30.       $rating = null;
    31.      
    32.  
    33.     foreach ($xml as $movie_key => $movie) {
    34.         // echo $movie->title_russian.'<br>'; это равно строке ниже
    35.         $title = $movie->title_russian;
    36.         $title_orign = $movie->title_original;
    37.         $year  = $movie->year;
    38.        
    39.         foreach ($movie->poster->big->attributes() as $poster_key => $poster) {
    40.           $post = $poster;
    41.         }
    42.         if ($movie->imdb) {
    43.           // echo $movie->imdb->attributes()['rating'];
    44.           $rating = $movie->imdb->attributes()['rating'];
    45.         }
    46.          else {
    47.            $rating = null;
    48.          }
    49.         insert($title, $title_orign, $year, $rating, $post, 1);
    50.  
    51.       }
    52.  
    53.  
    54.      
    55.     echo "<pre>";
    56.     print_r ($xml);
    57.     echo "</pre>";
    58. ?>
    59. <!DOCTYPE html>
    60. <html lang="en">
    61. <head>
    62.     <meta charset="UTF-8">
    63.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    64.     <title>Document</title>
    65. </head>
    66. <body>
    67.  
    68. </body>
    69. </html>    
    --- Добавлено ---
    вот база
    --- Добавлено ---
    база
    --- Добавлено ---
    база
    --- Добавлено ---
    d
    --- Добавлено ---
    только переименовать архив в .7z
    --- Добавлено ---
    а вот сами фильмы
     

    Вложения:

    • testhome (1).zip
      Размер файла:
      908 байт
      Просмотров:
      1
    • testhome (3).zip
      Размер файла:
      947 байт
      Просмотров:
      1
    • movies.zip
      Размер файла:
      2,3 КБ
      Просмотров:
      1
  25. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Посмотрю, да. Чуть позже напишу.