2
1

Пытаюсь выполнить домашнее задание. Делаю всё как в видео. Не получается (в базе так и остались фильмы, сериалов нет). После "сотой попытки изменить код" в базе появились сериалы, но каким-то образом исчезли фильмы:) Потом ещё менял код, но фильмы и сериалы только чередовались, и не хотели вставать вместе. Вот сделал полую копию первой части, но результата это не принесло...

<?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/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) {
		$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) {
			$rating = $movie->imdb->attributes()['rating'];
		} else {
			$rating = null;
		}

		insert($title, $title_orign, $year, $rating, $post, 1);

	}

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

	//2 парсер - сериалы:


	
	//echo count($xml);
	function insert($name, $desc, $year, $rating, $poster, $category_id) {

		$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;
		}

		$xml2 = simplexml_load_file("xml/serials.xml") or die ("Error: Cannot create object");

		return $result;
	}

	foreach ($xml as $movie_key => $movie) {
		$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) {
			$rating = $movie->imdb->attributes()['rating'];
		} else {
			$rating = null;
		}

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



	echo "<pre>";
	print_r($xml2);
	echo "</pre>";
?>

Кирилл Лучко
5 years ago






у вас функция insert единая для обох парсеров - должна вызываться с параметром category_id = 1 для фильмов, и =2 для сериалов. Т.е. 2-ю функцию insert нужно удалить.

дальше у вас 2 блока - 1-й и 2-й парсер - они одинаковые и будут отличаться 2-мя сроками

$xml = simplexml_load_file("xml/movies.xml") or die("Error: Cannot create object");

- здесь название xml - меняется

insert($title, $title_orign, $year, $rating, $post, 1);

- здесь номер категории меняется

Кирилл Лавров
5 years ago

нужно функцию function insert - убрать второй раз - функция 1 раз вначале задается и дальше к ней обращаемся с разными параметрами. Для этого и есть функция, чтобы не дублировать код повторяющийся.

для второго парсера будет строка для загрузки файла

$xml2 = simplexml_load_file("xml/serials.xml") or die ("Error: Cannot create object");

и дальше поскольку у вас переменная называется $xml2 - соответвенно с ней и нужно работать, т.е. указать ее во втором парсере вместо $xml

foreach ($xml2 as $movie_key => $movie) {

Вадим Семенов
5 years ago

Удалил, как вы и говорили второй insert, но страница в браузере говорит об ошибке в строке 82, а в базе появляются только сериалы... Может я просто чего-то не понял... Чуть позже удалил другой 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/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) {
		$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) {
			$rating = $movie->imdb->attributes()['rating'];
		} else {
			$rating = null;
		}

		insert($title, $title_orign, $year, $rating, $post, 1);

	}

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

	//2 парсер - сериалы:


	
	//echo count($xml);
	function insert($name, $desc, $year, $rating, $poster, $category_id) {

		$mysqli->set_charset('utf8');


		$result = false;

		if($mysqli->query($query)) {
			$result = true;
		}

		$xml2 = simplexml_load_file("xml/serials.xml") or die ("Error: Cannot create object");

		return $result;
	}

	foreach ($xml as $movie_key => $movie) {
		$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) {
			$rating = $movie->imdb->attributes()['rating'];
		} else {
			$rating = null;
		}

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



	echo "<pre>";
	print_r($xml2);
	echo "</pre>";
?>
Кирилл Лучко
5 years ago

в заросе к файлу с сериалами в цикле foreah не изменено имя переменной с $xml ра $xml2

student_vee_CYy6
3 years ago

4 ответов