Не добавляется запись из xml в бд, что делаю неправильно?

0

Уже задавал этот вопрос, но он так и до конца и не решился. По совету Сергея Никонова я проверил функцию insert и она, как предполагалось не работает. Уже перегреб весь интернет (что в рамках моих знаний и умений),но ответа так и не нашел. Что мне делать? Обучение остановилось, так как я не могу внести в БД информацию. Как мне это сделать, чтобы продолжить обучение!?

<?php
	

	function insert($name, $desc, $year, $rating, $poster, $category_id) {
		$mysqli = new mysqli('localhost', 'root', '', 'kinomonster');
		
		if(mysqli_connect_errno()) {
			print_f('Соединение не установлено');
			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_files/movies.xml") or die("Ошибка: не могу создать объект");

	

	//echo count($xml);

	$title = null;
	$title_orign = null;
	$post = null;
	$rating = null;
	$year = null;

	foreach ($xml as $movie_key => $movie) {
		$title = $movie->title_russian;
		$title_orign = $movie->title_orignal;
		$year = $movie->year;

		foreach ($movie->poster->big->attributes() as $poster_key => $poster) {
			$post = $poster;
		}

		if($movie->imdb) {
			$rating = $movie->imdb->attributes()['rating'];
		}

		insert($title, $title_orign, $year, $rating, $post, $category_id);
	}

	echo "<pre>";
	print_r($xml);
	echo "</pre>";



?>
php
mysql

6 ответов

6

Здравствуйте, Евгений

Скачайте исходный код к уроку. Справа сверху вкладка Файлы:

https://fructcode.com/ru/courses/php-and-mysql/video-parse-xml-to-mysql/

В папке \SEND\source\kinomonster лежат файлы к данному уроку. Просто скопируйте их в вашу папку настроенного вами веб-сервера (папка xml и index.php). В файле index.php задайте параметры подключения к вашей базе данных, в строчке:

$mysqli = new mysqli('localhost', 'root', '', 'kinomonster');

Запустите скрипт из index.php в браузере. Данные их XML должны вставится в таблицу movie. 

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

Если все равно не вставляются данные в таблицу movie, удалите в базе данных вашу таблицу movie. Для удаления таблицы movie выберите в phpmyadmin таблицу movie (нажав на название таблицы movie с левой стороны правой кнопкой мыши один раз) и перейдите на вкладку Operations и внизу справа вы должны увидеть ссылку Delete the table (DROP), она красного цвета. Нажмите на нее для того, чтобы таблица movie удалилась. Затем нажмите на название вашей базы данных (с левой стороны) в phpmyadmin, предполагаю, что ее название как в уроках kinomonster и перейдите во вкладку SQL и вставьте код в окно (Run SQL query/queries on database kinomonster):

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `movie` (
  `id` int(5) NOT NULL,
  `name` varchar(255) NOT NULL,
  `descriptions` text NOT NULL,
  `year` int(4) NOT NULL,
  `rating` float(3,1) NOT NULL,
  `poster` varchar(255) NOT NULL,
  `add_date` datetime NOT NULL,
  `category_id` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `movie` ADD PRIMARY KEY (`id`);


ALTER TABLE `movie` MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=111;
COMMIT;

Затем нажмите на кнопку Go (она внизу справа). Вставленный код в окно SQL - это скрипт, который создает структуру базы данных movie автоматически.

Далее перезагрузите phpmyadmin в браузере и запустите скаченный исходный код из урока, о котором я говорил ранее. Данные из XML будут вставлены в таблицу movie.

0

Это то, что нужно?

<?xml version="1.0" encoding="UTF-8"?>

<!-- - phpMyAdmin XML Dump - version 4.9.2 - https://www.phpmyadmin.net - - Хост: 127.0.0.1 - Время создания: Янв 23 2020 г., 15:19 - Версия сервера: 10.4.10-MariaDB - Версия PHP: 7.3.12 -->

-<pma_xml_export xmlns:pma="https://www.phpmyadmin.net/some_doc_url/" version="1.0">

<!-- - Structure schemas -->

0

Спасибо, все заработало после того, как перенес ваши файлы в свою папку. Просто интересно, в чем была моя ошибка?

1

Дамп базы данных приложите сюда, посмотрю что не так.

0

student_G5tXuoBG - добавив дополнительную проверку в 

if($movie->imdb) {
$rating = $movie->imdb->attributes()['rating'];
} else {
$rating = null;
}

здесь мы ещё добавили else, то есть, в if мы говорим чтобы $movie перешёл в imdb, нашёл там atribute rating, и вставил его, если таковой есть, а если рейтинга в imdb нету, то просто присваиваем ему значение null,(то есть $rating = null(также в коде мы её указывали выше); переменной мы присвоили значение 0 и если рейтинга в imdb нет, то просто в таблице выводится 0, вместо рейтинга)

0

Спасибо)) у меня также заработало. Не могу понять также в чём было ограничение?

Sign up or Log in to write an answer