Парсване на ХМЛ и качването му в база данни

sirdude

Registered
PHP:
<?php
$d=array();
$parser=xml_parser_create_ns();

//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
	case "CITIZEN":
	echo "-- Citizen --<br />";
	break;
	case "ID":
	echo "id: ";
	break;
	case "CITIZEN_NAME":
	echo "Name: ";
	break;
	case "GENDER":
	echo "Gender: ";
	break;
	case "CITIZENSHIP":
	echo "Citizenship: ";
	break;
	case "RESIDENCE":
	echo "Location: ";
	break;
	case "REGION":
	echo "Region: ";
	break;
	case "COMBAT":
	echo "Combat Skill: ";
	break;
	case "MARKSMANSHIP":
	echo "Infantry: ";
	break;
	case "FIRSTAID":
	echo "Medic: ";
	break;
	case "PILOTING":
	echo "Pilot: ";
	break;
	case "TACTICS":
	echo "Tank: ";
	break;
	case "FORUMID":
	echo "forumid: ";
	break;
	case "BUILDING":
	echo "Construction Skill: ";
	break;
	case "MANUFACTURING":
	echo "Manufacturing Skill: ";
	break;
	case "GATHERING":
	echo "Gatherer Skill: ";
	break;
	case "HEALTH":
	echo "Health: ";
	break;
	case "HAPPY":
	echo "Happiness: ";
	break;
	case "ATHLETICS":
	echo "Atletics: ";
	break;
	case "SPEED":
	echo "Speed: ";
	break;
	case "STAMINA":
	echo "Stamina :";
	break;
	case "STRENGTH":
	echo "Strength: ";
	break;
	case "INTELLIGENCE":
	echo "Intelect: ";
	break;
	case "DEVOTION":
	echo "Devotion: ";
	break;
	case "XP":
	echo "xp: ";
	break;
	case "LEVEL":
	echo "Level: ";
	break;
	case "PATRIOTISM":
	echo "Patriotism: ";
	break;
	case "NETWORTH":
	echo "Networth: ";
	break;
	case "LINK":
	echo "Profile link: ";
	break;
	case "PARTY_NAME": 
	echo "Political Party: ";
	break;
	case "LAST_LOGIN":
	echo "Last login: ";
	break;
	case "BORN":
	echo "Born: ";
	break;
		
    }
  }

//Function to use at the end of an element
function stop($parser,$element_name)
  {
  echo "<br />";
  }

//Function to use when finding character data
function char($parser,$data)
  {
  echo $data;
  }
  
//Specify element handler
xml_set_element_handler($parser,"start","stop");

//Specify data handler
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen("http://api.vnations.net/citizens/id/7606","r");


//Read data
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) and $d=explode("<br />",nl2br($data)) or
die (sprintf("XML Error: %s at line %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }
print_r($d); [b]//тук показвам за да видя дали правилно е счупен стринга на множество от arrays[/b]
$con = mysql_connect("localhost","#######","#######");
	if (!$con)
	  {
	  die('Could not connect: ' . mysql_error());
	  }

	mysql_select_db("vnations", $con);
	
	{
	$sql="INSERT INTO citizens (id, forumid, citizen_name, gender, building, gathering, manifacturing, citizenship, residence, region, health, happy, athletics, intelligence, speed, stamina, strength, marksmanship, firstaid, piloting, tactics, devotion, xp, level, patriotism, networth, link, party_name, login, born)
	VALUES ('.$d.')"; [b]//тук се опитвам да не изреждам всички елементи на $d аррей, а да стане с толкова малко писане има ли правилен синтаксис за магията ми ?[/b]
	}
	if (!mysql_query($sql,$con))
	  {
	  die('Error: ' . mysql_error());
	  }
	mysql_close($con);
//Free the XML parser
xml_parser_free($parser);

?>
Връща ми Error: Column count doesn't match value count at row 1
Благодаря предварително.
 
PHP:
VALUES ('$d[0]','$d[1]','$d[2]','$d[3]','$d[4]','$d[5]','$d[6]','$d[7]','$d[8]','$d[9]','$d[10]','$d[11]','$d[12]','$d[13]','$d[14]','$d[15]','$d[16]','$d[17]','$d[18]','$d[19]','$d[20]','$d[21]','$d[22]','$d[23]','$d[24]','$d[25]','$d[26]','$d[27]','$d[28]','$d[29]','$d[30]','$d[31]','$d[32]','$d[33]')";

Сега даже си поиграх на ръка да ги набера всички.... и все още ми казва
'Error: Column count doesn't match value count at row 1'
 
Аз го бях оправил в таблицата ама не и в кода. Оправих го.
Въпреки това пак вади същата грешка
 
StormBreaker каза:
Изписал си 30 имена на полета, а добавяш 33 стойности

Даже 34, като се почне от 0 да се брои. Автора в VALUES ги остави до $d[29]
 

Back
Горе