Hallo Sitedeals,
Ik ben al een tijdje aan het rommelen met een php code die een XML uitleest en deze hoort op te slaan in de database. Nu had ik hem opgegeven moment aan de praat, toen moest er een tag worden toegevoegd. Daarna kreeg ik hem niet meer aan de praat. Ik ben benieuwd waar de fout zit, maar kom er niet uit. Waarschijnlijk is het iets kleins.
Hopelijk kunnen jullie mij helpen, ik denk namelijk dat ik eroverheen kijk.PHP Code:
<?php
include ('config.php');
// Data ophalen$url = "http://list.auto-commerce.nl/view/voertuigen_rssfeed.php?id=ac1358&aantal=999";$xml = @simplexml_load_file($url);
// Alle auto's verwijderen uit de databasemysql_query("TRUNCATE cars");
// Auto's ophalen en toevoegen in de dabaseforeach($xml->channel->item as $car){
$autoid = $car->autoid;
$model = $car->model;
$title = $car->title;
$category = $car->category;
$color = $car->color;
$enginecc = $car->enginecc;
$power = $car->power;
$carversion = $car->carversion;
$kilometers = $car->kilometers;
$manufacturedate = $car->manufacturedate;
$fuel = $car->fuel;
$transmission = $car->transmission;
$warranty = $car->warranty;
$type = $car->type;
$monthly = $car->monthly;
$price = $car->price;
$weight = $car->weight;
$options = $car->options;
$description = $car->description;
mysql_query("INSERT INTO cars (autoid, model, title, category, color, enginecc, power, carversion, kilometers, manufacturedate, fuel, transmission, warranty, type, monthly, price, weight, options, description) VALUES ('" . $autoid . "', '" . $model . "', '" . $title . "', '" . $category . "', '" . $color . "', '" . $enginecc . "', '" . $power . "', '" . $carversion . "', '" . $kilometers . "', '" . $manufacturedate . "', '" . $fuel . "', '" . $transmission . "', '" . $warranty . "', '" . $type . "', '" . $monthly . "', '" . $price . "', '" . $weight . "', '" . $options . "', '" . $description . "')");
foreach($car->image->children() as $photourl)
{
$sql = "SELECT foto FROM cars WHERE autoid = '" . $autoid . "'";
$query = mysql_query($sql);
$result = mysql_fetch_object($query);
$database_photos = $result->foto;
$uploaded_photos = $photourl;
if ($database_photos != "" || $uploaded_photos != "") $comma = ",";
else $comma = "";
$fotos = $database_photos . $comma . $uploaded_photos;
$query2 = "UPDATE cars SET foto='" . $fotos . "' WHERE autoid='" . $autoid . "'";
mysql_query($query2);
$count++;
echo "foto toegevoegd met count:<b>" . $count . "</b> en foto url<b>" . $photourl . "<br />";
}
}
// Het succes laten zienecho"<center><h1>De xml is succesvol uitgelezen en alle auto's zijn opgeslagen</h1></center>";
?>
Mvg,
- XML naar SQL
-
18-03-2015, 17:17 #1
- Berichten
- 73
- Lid sinds
- 16 Jaar
XML naar SQL
Laatst aangepast door Job Schneider : 18-03-2015 om 17:46
-
18-03-2015, 17:57 #2
- Berichten
- 73
- Lid sinds
- 16 Jaar
Re: XML naar SQL
Hm misschien ben ik niet helemaal duidelijk geweest in wat er fout gaat. Maar het script laad normaal, en geeft aan dat de xml succesvol is uitgelezen. Maar er verschijnt niks in mijn database. Het kan niet aan de config.php liggen aangezien er anderen scripts via deze code lopen die het wel gewoon doen. Maar bij deze de code:
PHP Code:<?
$con = mysql_connect("localhost","naam","ww");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("naam", $con);
mysql_query("SET CHARACTER SET utf8 ");
?>
Hoop hiermee wat duidelijker te zijn.
-
18-03-2015, 17:59 #3
- Berichten
- 1.290
- Lid sinds
- 13 Jaar
Re: XML naar SQL
Ik zou sowieso overwegen om PDO of Mysqli te gebruiken. Verder ben ik niet bekend met Mysql maar moet je het niet executen?
-
18-03-2015, 18:24 #4
- Berichten
- 73
- Lid sinds
- 16 Jaar
Re: XML naar SQL
Chiel Ob, bedankt voor je reactie!
Ik ben niet bekend met PDO of MySQLi. Voor zover ik weet is de truncate genoeg, hij leegt de database wel stel ik vul deze handmatig. Alleen vult die hem niet.
-
18-03-2015, 18:30 #5
- Berichten
- 1.290
- Lid sinds
- 13 Jaar
Re: XML naar SQL
Misschien slim om het eens met PDO te proberen, ik ben namelijk niet bekend met MySql.
Zo maak je een connectie dmv PDO:
PHP Code:$connectie = new PDO("mysql:host=<Hier de host>;dbname=<hier de dbname>", <hier de db username>, <hier het password>;
PHP Code:$toevoegen = $connectie->prepare('INSERT INTO naam(value1, description) VALUES (:value1, :description)');
$toevoegen->execute(array(':value1' => $value1, ':description' => $description ));
Met vriendelijke groet,
-
18-03-2015, 21:46 #664BitsWebhosting.EU
- Berichten
- 2.092
- Lid sinds
- 17 Jaar
Re: XML naar SQL
Als je nu gewoon de fout afvangt van je insert en die met mysql_error() toont, dat weet je waarschijnlijk al direct wat er fout gaat. Ik gok op een melding dat de columncount niet klopt of dat je ergens een enkele quote in een veld hebt staan (wat je overigens met PDO mooi kunt voorkomen.)
-
19-03-2015, 09:29 #7gast5581 Guest
Re: XML naar SQL
En ik zou je table is gaan herzien. bijna alles TEXT? Je reserveerd hierdoor veelte veel ruimte.
-
19-03-2015, 15:33 #8
- Berichten
- 73
- Lid sinds
- 16 Jaar
Re: XML naar SQL
Bedankt voor jullie reacties!
Raymond, inderdaad een goede om de sql te herzien maar deze was puur voor de opzet!
Ik heb een PDO in elkaar gezet maar ook deze krijg ik niet werkend:
PHP Code:<?
$xmlDoc = new DOMDocument();$xmlDoc->load("http://list.auto-commerce.nl/view/voertuigen_rssfeed.php?id=ac1358&aantal=999");$mysql_hostname = "localhost";$mysql_user = "USER";$mysql_password = "WACHTWOORD";$mysql_database = "USER";
$dbh = new PDO("mysql:dbname={$mysql_database};host={$mysql_hostname};port=3306", $mysql_user, $mysql_password);
$xmlObject = $xmlDoc->getElementsByTagName('item');$itemCount = $xmlObject->length;
for ($i=0; $i <= $itemCount; $i++){ $title = $xmlObject->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue; $autoid = $xmlObject->item($i)->getElementsByTagName('autoid')->item(0)->childNodes->item(0)->nodeValue; $sql = $dbh->prepare("INSERT INTO `itemsauto` (`title`, `autoid`) VALUES (?, ?)"); $sql->execute(array( $title, $autoid )); print "Gelukt: $title n<br/>";}
?>
PHP Code:<?php
$xmlDoc = new DOMDocument();$xmlDoc->load("http://list.auto-commerce.nl/view/voertuigen_rssfeed.php?id=ac1358&aantal=999");$mysql_hostname = "localhost";$mysql_user = "USER";$mysql_password = "WACHTWOORD";$mysql_database = "USER";
$dbh = new PDO("mysql:dbname={$mysql_database};host={$mysql_hostname};port=3306", $mysql_user, $mysql_password);
$xmlObject = $xmlDoc->getElementsByTagName('item');$itemCount = $xmlObject->length;
for ($i=0; $i <= $itemCount; $i++){ $title = $xmlObject->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue; $autoid = $xmlObject->item($i)->getElementsByTagName('autoid')->item(0)->childNodes->item(0)->nodeValue; echo $title . ' - ' . $autoid . '<br>';
?>
-
20-03-2015, 11:47 #9
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: XML naar SQL
Laad http://list.auto-commerce.nl/view/voertuigen_rssfeed.php?id=ac1358&aantal=999 eens in je browser. Krijg je net als mij een lege feed pagina te zien? Dan zou ik het probleem eerst bij de bron gaan zoeken, die feed dus.
Als ik "paginabron" kies in mijn browser blijkt de XML data er wel te zijn maar niet goed getoond te worden. Zou met de encoding te maken kunnen hebben van de output. Vraag de aanbieder van de feed hier dan eerst even naar te kijken. Grote kans dat de XML parser in je script helemaal niet in staat is op de juiste manier bij die data te komen zo.
-
20-03-2015, 14:35 #10
- Berichten
- 73
- Lid sinds
- 16 Jaar
Re: XML naar SQL
Bedankt voor je reactie je zal inderdaad denken dat het daar aanligt maar dat zou raar zijn want voorheen werkt die wel tot dat ik model toevoegde en sindsdien zit er ergens een fout. Er wordt wel een goede xml structuur mee gegeven zie: http://codebeautify.org/xmlviewer/ba291a
-
20-03-2015, 18:21 #11
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: XML naar SQL
De link die je geeft meldt: ParsererrorXML-parsefout: onjuist gevormd :p
De XML die je terugkrijgt is dus echt niet netjes vormgegeven. Duik maar eens in je feed, die bevat bijvoorbeeld het &-teken op sommige plekken waar die niet hoort te zitten. Daar struikelt je script over.
Hij komt bijvoorbeeld voor bij de optie Start & Stop in sommige <options></options> elementen van je feed. Die & zou door de aanbieder moeten worden omgezet naar &
Als ik bijvoorbeeld het volgende stukje code probeer op dit moment dan werkt het voor mij. Wat ik vooral even heb veranderd is alleen dat ik het aantal limiteer tot 5. Daardoor krijg ik (op dit moment) geen elementen terug met een & erin.
Ik heb ook het database gebeuren even eruit gehaald en tot slot ook in je for-loop van <= een < gemaakt omdat je anders een fout krijgt omdat het laatste <item> niet meer gevonden kan worden. $itemCount is namelijk 5 in dit voorbeeld maar je begint in je loop met $i bij 0 te tellen, dus zocht hij eerst ook nog een zesde (die er dus niet is).
PHP Code:<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("http://list.auto-commerce.nl/view/voertuigen_rssfeed.php?id=ac1358&aantal=5");
$xmlObject = $xmlDoc->getElementsByTagName('item');
$itemCount = $xmlObject->length;
for ($i=0; $i < $itemCount; $i++){
$title = $xmlObject->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$autoid = $xmlObject->item($i)->getElementsByTagName('autoid')->item(0)->childNodes->item(0)->nodeValue;
echo $title . ' - ' . $autoid . '<br>';
}
?>
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic