On m'a demandé d'analyser un fichier simple qui est stocké sous forme de fichier XML, les données doivent alors être sauvegardées dans un mysql.Analyser XML avec php et l'enregistrer dans mysql
Cependant, je n'ai absolument aucune idée de ce qu'il faut faire et après avoir regardé en ligne tous les exemples donnés semblent trop compliqués pour mon problème ou pas la bonne solution. Le fichier XML ressemble à ce
games_scores.xml
<gesmes:Letter>
<gesmes:subject>Reference Scores</gesmes:subject>
-
<gesmes:Sender>
<gesmes:name>Game Information Scores</gesmes:name>
</gesmes:Sender>
-
<Cube>
-
<Cube time="2010-10-13">
<Cube scores="GameA1" value="1.5803"/>
<Cube scores="GameA2" value="21.35"/>
............etc
<Cube scores="GameA15" value="135"/>
</Cube>
</Cube>
</gesmes:Letter>
alors je dois sauver à mysql existant, c'est semble
CREATE TABLE IF NOT EXISTS `scrore_table` (
`scrore_id` int(11) NOT NULL auto_increment,
`scrore_title` varchar(32) collate utf8_bin NOT NULL default '',
`scores` varchar(15) collate utf8_bin NOT NULL default '',
`decimal_place` char(1) collate utf8_bin NOT NULL,
`value` float(15,8) NOT NULL,
`date_updated` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`currency_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; ;
INSERT INTO `scrore_table` (`scrore_id`, `scrore_title`, `scores`, `decimal_place`, `value`, `date_updated`) VALUES
(1, 'Game Class A0', 'GameA0', '2', 1.00000000, '2010-04-06 22:00:54'),
(2, 'Game Class A1', 'GameA1', '2', 1.58030000, '2010-04-06 22:00:54'),
(3, 'Game Class A2', 'GameA2', '2', 21.3503000, '2010-04-06 22:00:54'),
..............................etc
(15, 'Game Class A15', 'GameA15', '2', 135, '2010-04-06 22:00:54');
directions à cette question que j'ai script php en suivant:
<?php
class Scores_Converter {
var $xml_file = "http://192.168.1.112/gamescores/games_scores.xml";
var $mysql_host, $mysql_user, $mysql_pass, $mysql_db, $mysql_table;
var $scores_values = array();
//Load convertion scores
function Scores_Converter($host,$user,$pass,$db,$tb) {
$this->mysql_host = $host;
$this->mysql_user = $user;
$this->mysql_pass = $pass;
$this->mysql_db = $db;
$this->mysql_table = $tb;
$this->checkLastUpdated();
$conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);
$rs = mysql_select_db($this->mysql_db,$conn);
$sql = "SELECT * FROM ".$this->mysql_table;
$rs = mysql_query($sql,$conn);
while($row = mysql_fetch_array($rs)) {
$this->scores_values[$row['scores']] = $row['value'];
}
}
/* Perform the actual conversion, defaults to 1.00 GameA1 to GameA3 */
function convert($amount=1,$from="GameA1",$to="GameA3",$decimals=2) { return(number_format(($amount/$this->scores_values[$from])*$this->scores_values[$to],$decimals));
}
/* Check to see how long since the data was last updated */
function checkLastUpdated() {
$conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);
$rs = mysql_select_db($this->mysql_db,$conn);
$sql = "SHOW TABLE STATUS FROM ".$this->mysql_db." LIKE '".$this->mysql_table."'";
$rs = mysql_query($sql,$conn);
if(mysql_num_rows($rs) == 0) {
$this->createTable();
} else {
$row = mysql_fetch_array($rs);
if(time() > (strtotime($row["Update_time"])+(12*60*60))) {
$this->downloadValueScores();
}
}
}
/* Download xml file, extract exchange values and save the values in database */
function downloadValueScores() {
$scores_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
$scores_file = substr($this->xml_file,strpos($this->xml_file,"/"));
$fp = @fsockopen($scores_domain, 80, $errno, $errstr, 10);
if($fp) {
$out = "GET ".$scores_file." HTTP/1.1\r\n";
$out .= "Host: ".$scores_domain."\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$buffer .= fgets($fp, 128);
}
fclose($fp);
$pattern = "{<Cube\s*scores='(\w*)'\s*value='([\d\.]*)'/>}is";
preg_match_all($pattern,$buffer,$xml_values);
array_shift($xml_values);
for($i=0;$i<count($xml_values[0]);$i++) {
$exchange_value[$xml_values[0][$i]] = $xml_values[1][$i];
}
$conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);
$rs = mysql_select_db($this->mysql_db,$conn);
foreach($exchange_value as $scores=>$value) {
if((is_numeric($value)) && ($value != 0)) {
$sql = "SELECT * FROM ".$this->mysql_table." WHERE scores='".$scores."'";
$rs = mysql_query($sql,$conn) or die(mysql_error());
if(mysql_num_rows($rs) > 0) {
$sql = "UPDATE ".$this->mysql_table." SET value=".$value." WHERE scores='".$scores."'";
} else {
$sql = "INSERT INTO ".$this->mysql_table." VALUES('".$scores."',".$value.")";
}
$rs = mysql_query($sql,$conn) or die(mysql_error());
}
}
}
}
/* Create the scores table */
function createTable() {
$conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);
$rs = mysql_select_db($this->mysql_db,$conn);
$sql = "CREATE TABLE ".$this->mysql_table." (`scrore_id` int(11) NOT NULL, `scrore_title` varchar(32) collate utf8_bin NOT NULL default '', `scrores` char(12) NOT NULL default '', `decimal_place` char(1) collate utf8_bin NOT NULL default '2', `value` float(15,8) NOT NULL,`date_updated` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY(currency)) ENGINE=MyISAM";
$rs = mysql_query($sql,$conn) or die(mysql_error());
$sql = "INSERT INTO ".$this->mysql_table." VALUES(1,'','GameA0','2',1,now())";
$rs = mysql_query($sql,$conn) or die(mysql_error());
$this->downloadValueScores();
}
}
?>
puis avec ce script mysql table/requête créé ressembler à:
INSERT INTO `scrore_table` (`scrore_id`, `scrore_title`, `scrores`, `decimal_place`, `value`, `date_updated`) VALUES
(1, 'Game Class A0', 'GameA0', '2', 1.00000000, '2010-10-24 00:27:01');
mais la base de données non Populate automatique, cela semble downloadValueScores fonction() fonctionnent pas correctement
J'ai essayé le fixer et je pense que c'est la direction que je dois aller mais je n'ai aucune idée. aussi je suis désolé, je suis nouveau à PHP.
Toute aide ou pointeurs seraient grands et merci beaucoup
Le code semble être PHP4. Pouvez-vous utiliser PHP5 dans votre solution? – Gordon
Salut Gordon, merci pour vos informations de version php. En fait, je ne sais pas si ce code est PHP4, parce que je ne connais pas le différent, pourriez-vous s'il vous plaît laissez-moi savoir à quoi ressemble PHP5 adapté à mon code? – user485783