Page 1 sur 1

php et les tableaux

Posté : 31 oct. 2007, 16:14
par venus02
Bonjour,

J'ai un souci et j'espère que quelqu'un saura m'aider.
Je stocke des info XML dans une BDD via mysql. Mon souci se situe lorsque je dois faire un tableau de tableau.

Bout de code XML :
<text>
      <body>
         <entry n="1">
            <form>
               <orth>À</orth>
            </form>
            <gramGrp>
               <pos>préposition</pos>
               <gen>adjectif</gen>
        <gen>féminin</gen>
            </gramGrp>
         </entry>
       <entry>
            <form>
               <orth>À, AU</orth>
            </form>
            <gramGrp>
               <pos>préposition</pos>
               <tns>futur</tns>
            </gramGrp>
         </entry>
         <entry>
            <form>
               <orth>AÏE DONC, voir : HAYE DONC</orth>
            </form>
            <gramGrp>
               <pos>adverbe</pos>
                <pos>nom</pos>
                <number>pluriel</number>
            </gramGrp>
         </entry>
      </body>
   </text>

je souhaite insérer ces élements dans une table. J'arrive à les récupérer mais j'ai une ligne en plus par exemple :
ligne 1 : préposition
ligne2 : préposition adjectif
ligne3 : préposition féminin
La ligne supplémentaire étant la ligne 1.

Bout de code php :
for($i=0;$i<sizeOf($posValue);$i++)
				for($p=0;$p<sizeOf($genValue);$p++)
				
				{
				
				if (sizeOf($genValue[$p])==0) {
				
				
  
  $requete=mysql_db_query($db,"insert into code (codeId, entryId,pos,  tns, mood) Values('','$num_entry','$posValue[$i]','$tnsValue','$moodValue')",$db_link) 
					or die (" Erreur n".mysql_errno()."    Probl&egrave;me d'enregistrement dans la base, table code ".mysql_error());
}


else {$requete=mysql_db_query($db,"insert into code (genre) values('$genValue[$p]')", $db_link);}	
	}
	
	
				$posValue=array();
				$genValue=array(array());
si quelqu'un a une idée, je suis preneuse. Merci d'avance

Posté : 31 oct. 2007, 16:43
par Truc
Salut,

Le bout de script est incomplet et donc incompréhensible :?

Mais tu as un fichier xml as tu regardé les fonctions simplexml ?

script complet

Posté : 31 oct. 2007, 17:08
par venus02
Ci-joint le script complet :
<?php
header('Content-Type: text/html; charset=utf-8');
// Fichier à analyser
$file = "code.xml";

// variable de la profondeur du parcours de l'arbre
$depth = array();

// Etat de la pile de parcours du document XML
$stack = array();


//... Ouverture de la base de donnes...
require("login.php");
$db_link = mysql_connect($MySQL_Host,$MySQL_User,$MySQL_Passwd) 
	or die("Impossible de se connecter : " . mysql_error());
$requete=mysql_db_query($db,"SET NAMES utf8;",$db_link);  

// Valeur d'un dernier élément lu
$globaldata ="";
$entreeCourante="";
$orthValue ="";
$posValue=array();
$genValue=array(array());
$numberValue=array(array(array()));
$subcValue=array(array(array(array())));
$tnsValue="";
$moodValue="";
$nb_code="";
$isn="";
$geoValue=array();
$authorValue=array();
$titleValue=array();







// Fonction associée à l’événement début d’élément
function startElement($parser, $name, $attrs)
{
	global $depth;
	global $stack;
	global $entreeCourante	;
	global $globaldata;
	global $isn;
	
	
//	print "<br/>";
	for ($i = 0; $i < $depth[$parser]; $i++)
	{
//		print "&nbsp;&nbsp;&nbsp;";
	}
	array_push($stack,$name);
	
	$depth[$parser]++;
//	print "Début de l'élément : ".$name."\n -- ";
	
//	print "profondeur : ".$depth[$parser]." -- Attributs de l'élément : ";
	
	//affichage des attributs de l'élément
	switch ($name){
	case "entry":
	while (list($key,$val)=each($attrs))
	{
	$isn=$val;
	}
	$entreeCourante="";
	break;
	
	}
	
}

// Fonction associée à l’événement fin d’élément
function endElement($parser, $name)
{
	global $depth;
	global $stack;
	global $globaldata;
	global $entreeCourante;
	global $orthValue;
	global $isn;
	global $posValue;
	global $genValue;
	global $numberValue;
	global $subcValue;
	global $tnsValue;
	global $moodValue;
	global $geoValue;
	global $authorValue;
	global $titleValue;
	global $db;
	global $db_link;
global $nb_code;

	for ($i = 0; $i < $depth[$parser]-1; $i++) {
	}
//	print "Fin de l'élément : '".$name."' avec la valeur :".$globaldata." -- ";
//	print "profondeur : ".$depth[$parser]." ";


	$globalData2=$globaldata;
// on supprime toutes les tabulations, les retours charriotset on double les quotes
	$globalData2=str_replace("'", "''",$globalData2);
	$globalData2=str_replace("\t", "",$globalData2);
	$globalData2=str_replace("\n", "",$globalData2);
// On supprime tous les espaces devant la chaine de caractères.
	while (substr($globalData2,0,1)==" ") $globalData2=substr($globalData2,1,strlen($globalData2)-1);
// On supprime tous les espaces insérés dans la chaine de caractères, dus à un saut à la ligne dans les données
	$globalData2=str_replace("  ","@",$globalData2);
	$globalData2=str_replace("@@","#",$globalData2);
	$globalData2=str_replace("##","@",$globalData2);
	$globalData2=str_replace("@@","#",$globalData2);
	$globalData2=str_replace("##","@",$globalData2);
	$globalData2=str_replace("@@","#",$globalData2);
	$globalData2=str_replace("##","@",$globalData2);
	$globalData2=str_replace("@@","#",$globalData2);
	$globalData2=str_replace("##","@",$globalData2);
	$globalData2=str_replace("@"," ",$globalData2);
	$globalData2=str_replace("#"," ",$globalData2);


	$entreeCourante.=$globalData2."</".$name.">";
	$depth[$parser]--;
	
	switch ($name) {
		
		case "orth":
				$orthValue=$globalData2;
			break;
			case "pos":
				$posValue[]=$globalData2;
			break;
			case "gen":
			$genValue[]=$globalData2;
			break;
			case "number":
			$numberValue[]=$globalData2;
			break;
			case "subc":
			$subcValue[]=$globalData2;
			break;
			case "tns":
			$tnsValue=$globalData2;
			break;
			case "mood":
			$moodValue=$globalData2;
			break;
			case "usg":
			$geoValue[]=$globalData2;
			break;
			case "author":
			$authorValue[]=$globalData2;
			break;
			case "title":
			$titleValue[]=$globalData2;
			break;
		case "entry":
		 $isn=$isn;
				$entreeCourante=str_replace("&","&",$entreeCourante);		
				$requete=mysql_db_query($db,"insert into entry Values('','$isn','$orthValue')",$db_link) 
					or die (" Erreur n".mysql_errno()."    Probl&egrave;me d'enregistrement dans la base, table entry ".mysql_error());	
				$num_entry=mysql_insert_id();
				$isn="";
				
				
				for($i=0;$i<sizeOf($geoValue);$i++)
				{
									$requete=mysql_db_query($db,"insert into usg Values('','$num_entry','$geoValue[$i]')",$db_link) 
					or die (" Erreur n".mysql_errno()."    Probl&egrave;me d'enregistrement dans la base, table usg ".mysql_error());
				}
				
				$geoValue = array();
			
				
				for($i=0;$i<sizeOf($authorValue);$i++)
				for($i=0;$i<sizeOf($titleValue);$i++)
				{
									$requete=mysql_db_query($db,"insert into bibl Values('','$num_entry','$authorValue[$i]','$titleValue[$i]')",$db_link) 
					or die (" Erreur n".mysql_errno()."    Probl&egrave;me d'enregistrement dans la base, table bibl ".mysql_error());
				}
				
				$authorValue = array();
				$titleValue=array();
			
			
			
			
				for($i=0;$i<sizeOf($posValue);$i++)
				for($p=0;$p<sizeOf($genValue);$p++)
				
				{
				
				if (sizeOf($genValue[$p])==0) {
				
				
  
  $requete=mysql_db_query($db,"insert into code (codeId, entryId,pos,  tns, mood) Values('','$num_entry','$posValue[$i]','$tnsValue','$moodValue')",$db_link) 
					or die (" Erreur n".mysql_errno()."    Probl&egrave;me d'enregistrement dans la base, table code ".mysql_error());
}


else {$requete=mysql_db_query($db,"insert into code (genre) values('$genValue[$p]')", $db_link);}	
	}
	
	
				$posValue=array();
				$genValue=array(array());
				$numberValue=array(array(array()));
				$subcValue=array(array(array(array())));
				$tnsValue="";
				$moodValue="";
			break;	
				

			
				
				
				
				
				
break;


			
			
		
			
		

		

		default:
	}
	$globaldata="";
	
	array_pop($stack);
	}
	


// Fonction associée à l’événement données textuelles
function characterData($parser, $data)
{

global $globaldata;

$globaldata = $globaldata.$data;

}

// Fonction associée à l’événement de détection d'un appel d'entité externe
function externalEntityRefHandler($parser,
								  $openEntityNames,
								  $base,
								  $systemId,
								  $publicId)
{

if ($systemId)
{ if (!list($parser, $fp) = new_xml_parser($systemId))
{

printf("Impossible d'ouvrir %s à %s\n",
				   $openEntityNames,
				   $systemId);
return FALSE;

}

while ($data = fread($fp, 4096))
{

if (!xml_parse($parser, $data, feof($fp)))
{

printf("Erreur XML : %s à la ligne %d lors du traitement de l'entité %s\n",
			   xml_error_string(xml_get_error_code($parser)),
			   xml_get_current_line_number($parser),
			   $openEntityNames);

xml_parser_free($parser);

return FALSE;

}

}

xml_parser_free($parser);

return TRUE; } return FALSE;

}

// Fonction de création du parser et d'affectation
// des fonctions aux gestionnaires d'événements
function new_xml_parser($file)
{

global $parser_file;

//création du parseur
$xml_parser = xml_parser_create();

//Activation du respect de la casse du nom des éléments XML
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, "UTF-8");

//Déclaration des fonctions à rattacher au gestionnaire d'événement
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");

//Ouverture du fichier
if (!($fp = @fopen($file, "r"))) { return FALSE; }
//Transformation du parseur en un tableau
if (!is_array($parser_file))
{ settype($parser_file, "array"); }
$parser_file[$xml_parser] = $file;

return array($xml_parser, $fp);

}

// Appel à la fonction de création et d'initialisation du parseur
if (!(list($xml_parser, $fp) = new_xml_parser($file)))
{ die("Impossible d'ouvrir le document XML"); }
// Traitement de la ressource XML
while ($data = fread($fp, 4096))
{

if (!xml_parse($xml_parser, $data, feof($fp)))
   { die(sprintf("Erreur XML : %s à la ligne %d\n",
			  xml_error_string(xml_get_error_code($xml_parser)),
			  xml_get_current_line_number($xml_parser)));
   }
}

// Libération de la ressource associée au parser
xml_parser_free($xml_parser);

echo "<br/>g&eacute;n&eacute;ration des tables terminées";

	
function unhtmlentities ($string) {
   $trans_tbl =get_html_translation_table (HTML_ENTITIES );
   $trans_tbl =array_flip ($trans_tbl );
   return strtr ($string ,$trans_tbl );
}
	
	
// On Met maintanant à jour le contenu de chaque  entry...
//	$file="../dico/pf.xml";

	$count=0;
	$dom = new DomDocument;
	$dom->load($file);
	$entriesList = $dom->getElementsByTagName('entry');
	foreach ($entriesList as $entry) {
		$count++;
		$entryXml = $dom->saveXML($entry);
		$entryXml=addslashes($entryXml) ;
		$requete=mysql_db_query($db,"UPDATE entry SET  entryValue='$entryXml' WHERE entryId=".$count."",$db_link) ;
	}


	
	mysql_close($db_link);

?>