добрый день только учусь, заранее извиняюсь если что то нетак. Суть проблемы: настроил экспорт из файла в базу данных параметров, но в файле есть одно необязательное поле (оно заполнено не у всех объектов) как результат товары у которых это поле не заполнено не вносятся в базу данных, я добавил исключение что если это поля нет считать его null, всеравно неработает однако если прописать правило что если это поле не заполнено счтать его 0 или 1 то все работает но важно передать именно параметр null вот код Код (Text): <?php function insert($name, $desc, $year, $rating, $poster, $category_id) { $mysqli = new mysqli('localhost', 'mysql', 'mysql', 'test2'); if (mysqli_connect_errno()) { print_r('соединение не установлено'); exit(); } $mysqli->set_charset('utf8'); $query = "INSERT INTO movie VALUES (null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')"; $result = false; if ($mysqli-> query($query)) { $result = true; } return $result; } $xml = simplexml_load_file("xml/movies.xml") or die ("Error: Cannot create object"); // echo count($xml); $title = null; $title_orign = null; $post = null; $rating = null; $year = null; foreach ($xml as $movie_key => $movie) { // echo $movie->title_russian.'<br>'; это равно строке ниже $title = $movie->title_russian; $title_orign = $movie->title_original; $year = $movie->year; foreach ($movie->poster->big->attributes() as $poster_key => $poster) { $post = $poster; } if ($movie->imdb) { // echo $movie->imdb->attributes()['rating']; $rating = $movie->imdb->attributes()['rating']; } else { $rating = null; } insert($title, $title_orign, $year, $rating, $post, 1); } echo "<pre>"; print_r ($xml); echo "</pre>"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html> при добавлении в базу данных происходит добавление фильмов только с рейтингом там где рейтинг не указан они не вносятся в базу данных тоесть правило else { $rating = null; } почему то неработает хотя если указать else { $rating = 0; } то все фильмы вносятся в базу данных хоть и 0 рейтингом. как сделать чтобы правиль else { $rating = null; } заработало
что то случилось со вчера модерацию сообщение не проходит --- Добавлено --- сейчас еще раз добавлю --- Добавлено --- вот вставил
Справа на скринах иконки в виде карандаша "изменить". Там выберите значение по умолчанию "как определено", а под ним будет поле, оставьте его пустым. В строке Код (Text): $query = "INSERT INTO movie VALUES (null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')"; null замените на '' Код (Text): $query = "INSERT INTO movie VALUES ('', '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')"; Соответственно и в этой части кода тоже Код (Text): $title = null; $title_orign = null; $post = null; $rating = null; $year = null;
Потому, что "как определено" пустое значение допустимо у текстовых полей. У INT и FLOAT нужно что-то проставить.
поставил 0.0 все сохранилось Код (Text): $query = "INSERT INTO movie VALUES ('', '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')"; тут все заменил Код (Text): $title = null; $title_orign = null; $post = null; $rating = ''; $year = null; заменил так вообще неработает, нет добавления
Так вам только для одного поля надо было? Забыл со вчера. Кроме изменений в структуре тогда ничего не надо. Верните как было. А еще лучше перефразируйте вопрос. Что-то я начал читать более вдумчиво - ничего непонятно.
при добавлении в базу данных происходит добавление фильмов только с рейтингом там где рейтинг не указан они не вносятся в базу данных тоесть правило Код (Text): else { $rating = null; } //почему то неработает !!! важно - хотя если указать else { $rating = 0; } то все фильмы вносятся в базу данных хоть и 0 рейтингом. извините если что то непонятно вроде расписал как мог суть проблемы: при добавлении в базу данных происходит добавление фильмов только с рейтингом там где рейтинг не указан они не вносятся в базу данных тоесть правило Код (Text): else { $rating = null; } почему то неработает (в базу не добавляются фильмы без рейтинга) хотя если указать Код (Text): else { $rating = 0; } то все фильмы вносятся в базу данных правильно с 0 рейтингом. но нужно внесьте именно параметр null что данное поле было пустое проблема в том проблема что у меня будут с 0 те у которых небыло рейтинга вообще и с таким же 0 те у кого рейтинг 0, потом их отличить не получится а null подставленный вроде как и должен был помочь
Теперь понятно. По структуре таблицы, в поле rating нельзя добавить NULL, и нельзя его игнорировать при добавлении, так как по умолчанию не должно оставаться пустым. Нужно либо что-то передавать, либо изменить структуру.
хм а какие варианты исправления есть ? почему null в это поле вообще нельзя отправить? просто как то же это делается что если есть данные то заполняются если нет то нет, типо необязательное поле
Делается. Но вы так ячейки настроили. Выполните Код (Text): SHOW CREATE TABLE `movie` и в развернутом отображении посмотрите. У вас будет что-то вроде Код (Text): `rating` float NOT NULL,
Код (Text): CREATE TABLE `movie` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `description` text NOT NULL, `year` int NOT NULL, `rating` float NOT NULL DEFAULT '0', `poster` varchar(255) NOT NULL, `add_date` datetime NOT NULL, `category_id` tinyint NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=605 DEFAULT CHARSET=utf8 вот ответ а как сделать не not null а разрешить присваивать null или null пол умолчанию если данные не поступали ?
вот пометил , всеравно добавляются только те у которых есть рейтинг. там где его нет, недобавлены в базу данных
Возможно, проблема в значении по умолчанию. Или типе данных вообще. Значение так же установите в NULL, а не "как определено", или "Нет" если не получится.
Сейчас вот сделал таблицу Код (Text): movie CREATE TABLE `movie` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` text NOT NULL, `year` int(11) NOT NULL, `rating` float DEFAULT NULL, `poster` varchar(255) NOT NULL, `add_date` datetime NOT NULL, `category_id` tinyint(4) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1236 DEFAULT CHARSET=utf8 замечательно всё вставляется. Вот так например Код (Text): INSERT INTO `altcoin`.`movie` (`id` , `name` , `description` , `year` , `rating` , `poster` , `add_date` , `category_id` ) VALUES ('1238', 'test', 'descr', '2020', NULL , '', '2021-03-19 11:53:49', '120' ) Или так Код (Text): INSERT INTO `altcoin`.`movie` (`id` , `name` , `description` , `year` , `poster` , `add_date` , `category_id` ) VALUES ('1240', 'test', 'descr', '2020', '', '2021-03-19 11:53:49', '120' )
может все удалить и попробовать с 0 создать ? может где то повредилась база данных? потому что только что заметил что tinyint(4) - длина символов не сохраняется в базе данных. тоесть вводишь символы пишешь сохранить а там ничего нет при повторном редактировании
создал новую таблицу всеравно результат такой же. ума не приложу что нетак. вы можете глянуть в тимвивере?
сам скрипт Код (Text): <?php function insert($name, $desc, $year, $rating, $poster, $category_id) { $mysqli = new mysqli('localhost', 'mysql', 'mysql', 'testhome'); if (mysqli_connect_errno()) { print_r('соединение не установлено'); exit(); } $mysqli->set_charset('utf8'); $query = "INSERT INTO movie VALUES (null, '$name', '$desc', '$year', '$rating', '$poster', Now(), '$category_id')"; $result = false; // скрипт поиска ошибки if ($mysqli-> query($query)) { $result = true; } // if( $mysqli->query($query) or die( $mysqli->error ) ) { // $result = true; // } return $result; } $xml = simplexml_load_file("xml/movies.xml") or die ("Error: Cannot create object"); // echo count($xml); $title = null; $title_orign = null; $post = null; $year = null; $rating = null; foreach ($xml as $movie_key => $movie) { // echo $movie->title_russian.'<br>'; это равно строке ниже $title = $movie->title_russian; $title_orign = $movie->title_original; $year = $movie->year; foreach ($movie->poster->big->attributes() as $poster_key => $poster) { $post = $poster; } if ($movie->imdb) { // echo $movie->imdb->attributes()['rating']; $rating = $movie->imdb->attributes()['rating']; } else { $rating = null; } insert($title, $title_orign, $year, $rating, $post, 1); } echo "<pre>"; print_r ($xml); echo "</pre>"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html> --- Добавлено --- вот база --- Добавлено --- база --- Добавлено --- база --- Добавлено --- d --- Добавлено --- только переименовать архив в .7z --- Добавлено --- а вот сами фильмы