begin process at 2012 02 15 09:37:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Problème Insertionflux xml


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème Insertionflux xml

mercredi 23 janvier 2008 à 13:33:40 | Problème Insertionflux xml

richardjul

Bonjour,
j'ai réalisé un script qui doit récupérer des annonces de job sur un flux xml, et me les injecter dans ma BDD Mysql pour ensuite les afficher sur notre site. Je fais des tests sur un serveurs de dev. et la tout se passe pour le mieux, les infos sont bien récupérées, et insérée dans la base comme il se doit.
Problème! dès que je met en prod. mon script sur l'hébergeur (Nexenservices), il se passe qqe chose d'étonnant, qqs uns des contenus des variables que je dois stocker se trouve couper, par exemple je dois stocker Luxembourg sur une annonce, et sur 10 au total dans le flux il va me couper la première lettre pour un "uxembourg" et les 2 premières pour une autre "embourg", alors que les 8 autres sont traitées normalement! le plus étonnant c que sur le dev. ça fonctionne très bien! Il me fait la même sur des ref que 'ai hyper besoin pour faire des tries et des tests.

J'ai fait des echo des valeurs que je veux insérer et ça donne ça :

En local :

369211
Ingénieurs Support Application Server H/F
Luxembourg
CSC Computer Sciences
http://clk.atdmt.com/UMC/go/fnnseefc0060000127umc/direct/01/?href=http://emploi.efinancialcareers.lu/job-4000000000356083.htm
efinancialcareers

369215
Ingénieurs Système Solarix et AIX H/F
Luxembourg
CSC Computer Sciences
http://clk.atdmt.com/UMC/go/fnnseefc0060000127umc/direct/01/?href=http://emploi.efinancialcareers.lu/job-4000000000356087.htm
efinancialcareers

369222
Database Specialists H/F
Luxembourg
CSC Computer Sciences
http://clk.atdmt.com/UMC/go/fnnseefc0060000127umc/direct/01/?href=http://emploi.efinancialcareers.lu/job-4000000000356094.htm
efinancialcareers

etc.......

et celui en ligne :
Le premier nickel :
369079
Database Specialists H/F
Luxembourg
CSC Computer Sciences
http://clk.atdmt.com/UMC/go/fnnseefc0060000127umc/direct/01/?href=http://emploi.efinancialcareers.lu/job-4000000000355951.htm
efinancialcareers

le second c ma ref qui est incomplète (elles font toujours 6caractères)

2008-01-05
9079
Responsable de gestion des applications H/F
Luxembourg
CSC Computer Sciences
http://clk.atdmt.com/UMC/go/fnnseefc0060000127umc/direct/01/?href=http://emploi.efinancialcareers.lu/job-4000000000355951.htm
efinancialcareers

et ça c deans les derniers, et tous ceux entre sont bien!!!
2007-11-05
351254
Chargé(e) de Missions Organisation (BPL)
embourg
N.C.
http://clk.atdmt.com/UMC/go/fnnseefc0060000127umc/direct/01/?href=http://emploi.efinancialcareers.lu/job-4000000000338084.htm
efinancialcareers

Comment puis-je faire pour régler ce problème ou je me prend la tête depuis plusieurs jours?

Mon script php :

<?php
mysql_connect("monhebergeur.com", "monlogin, "MDP") or die("Impossible de se connecter");
//mysql_connect("localhost", "root", "") or die("Impossible de se connecter");
mysql_select_db("farvest") or die("pas possible de trouver la base");

$file = "http://www.efinancialcareers.lu/syndication/Itone/eFCjobs.xml";
//$file = "eFCjobs.xml";
global $fournisseur;
$find_fournisseur = explode ("/", $file);
$fournisseur2 = $find_fournisseur[2];
$fournisseur1 = explode (".", $fournisseur2);
$fournisseur = $fournisseur1[1];

if(isset($file)) {
$titre = "";
$date = "";
$ref = "";
$lieu = "";
$entreprise = "";
$curtag = "";

/** fonction startElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function startElement($parser, $name, $attrs) {
global $curtag, $date, $titre, $lieu, $url, $entreprise, $ref ;
$curtag = $name;

if ($name == "DATE") $date = "";
if ($name == "TITRE") $titre = "";
if ($name == "URL") $url = "";
if ($name == "ENTREPRISE") $entreprise = "";
if ($name == "ref") $ref = "";
if ($name == "Lieu") $lieu = "";
}

/** fonction endElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function endElement($parser, $name) {
global $curtag, $date, $titre, $lieu, $url, $entreprise, $ref, $fournisseur ;

$curtag = "";

if ($name == "LIEU") {

//Formatage des entrées pour la BDD
$date = addslashes($date);
$date2 = explode("/",$date);       
$date_finale = $date2[2]."-".$date2[1]."-".$date2[0];

$titre1 = addslashes($titre);
//$titre1=utf8_decode($titre);

$url1 = addslashes ($url);
//$url1=utf8_decode($url);

$entreprise1 = addslashes ($entreprise);
//$entreprise1=utf8_decode($entreprise);

$lieu1 = addslashes ($lieu);

//Affichage des entrées titre et entreprise enregistré dans la base
echo $date_finale;
echo "<br>";
echo "<strong style=\"color:blue\">".$ref."</strong>";
echo "<br>";
echo $titre1;
echo "<br>";
echo $lieu1;
echo "<br>";
echo $entreprise1;
echo "<br>";
echo $url1;
echo "<br>";
echo $fournisseur;
echo "<br><br>";

// on regarde si la ref existe déjà
$req_ref = "SELECT ref_xml FROM itone_jl_jobposting WHERE ref_xml='$ref'";
$rech_ref = mysql_query($req_ref) or die('Erreur SQL !'.$req_ref.'<br>'.mysql_error());

//on selectionne la ref la plus petite
$req_ref_min = "SELECT Min(ref_xml) AS RefMin FROM itone_jl_jobposting";
$rech_ref_min = mysql_query($req_ref_min) or die('Erreur SQL !'.$req_ref_min.'<br>'.mysql_error());
$res_ref_min = mysql_fetch_array($rech_ref_min);
$ref_min = $res_ref_min["RefMin"];

//Mise à jour des fournisseurs existants
$itone = ITOne;
$req_ref_maj = "UPDATE itone_jl_jobposting SET fournisseur_flux='$itone' WHERE fournisseur_flux=''";
$req_maj_query = mysql_query($req_ref_maj) or die('Erreur SQL ! '.$req_ref_maj.'<br>'.mysql_error());


//echo "<strong style=\"color:blue\">".$fournisseur."</strong>";

//Si la nouvelle ref est plus grande que les dernières on l'insere
if($ref > $ref_min && (strlen($ref))>=6)
    {
    echo "<strong style=\"color:red\">Plus grand que la plus petite, et ref supérieur à 6</strong>";
    // on compte le nombre de résultats
    $nb_ref = mysql_num_rows($rech_ref);
    if($nb_ref==0)  // la ref n'existe pas, on l'insere
        {     //echo "<strong style=\"color:red\">Plus grand que la plus petite, et ref supérieur à 6, INSEREE </strong><br>";
           /$query = "INSERT INTO itone_jl_jobposting(created,title,location,URL_flux,company,ref_xml,fournisseur_flux) VALUES('".$date_finale."','".$titre1."','".$lieu1."','".$url1."','".$entreprise1."','".$ref."','".$fournisseur."')";
            $result = mysql_query($query) or die('Erreur SQL !'.$query.'<br>'.mysql_error());
        }
    }
}
}

/** fonction characterData, déclenchée lorsque le parseur rencontre des caractères, à l'intérieur d'un noeud XML **/
function characterData($parser, $data) {
global $curtag, $date, $titre, $lieu, $url, $entreprise, $ref, $tab_ref, $last_ref ;
if ($curtag == "DATE")
$date .= $data;
//echo $date;
if ($curtag == "TITRE")
$titre .= $data;
//echo $url;
if ($curtag == "LIEU")
$lieu = $data;
//echo $lieu;
if ($curtag == "URL")
$url .= $data;
//echo $titre;
if ($curtag == "ENTREPRISE")
$entreprise .= $data;
//echo $entreprise;
if ($curtag == "REF"){
$ref = $data;


}
}


/** crée un nouveau parseur **/
$xml_parser = xml_parser_create();

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);

/** enregistre les trois fonctions ci dessus **/
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("Impossible d'ouvrir l'URL...");
}

while ($data = fread($fp, 50)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("erreur XML: %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
mysql_close();

}

?>

MERCI tout plein si qq'un a la solution... THANKS

PS: je ne suis pas encore un boss en dev mais j'espère le devenir!


Julien RICHARD
Developpeur
Groupe AXORYS
mercredi 23 janvier 2008 à 13:58:13 | Re : Problème Insertionflux xml

codefalse

Administrateur CodeS-SourceS
Tu utilise quelles versions de Php en prod et distrib ?

Tu devrait utiliser simple_xml, c'est plus facile de traiter du xml avec ca :
http://fr.php.net/simple_xml
jeudi 24 janvier 2008 à 09:43:40 | Re : Problème Insertionflux xml

richardjul

Salut codefalse,
sur mon dev : PHP Version 5.2.1

et online ils nexen est sur PHP Version 4.4.7-0.nexen.0,
Je sais pas trop pourquoi il y a .nexen.0...

Sinon je ne sais pas si il y a un rapport mais il y a la même libXML Version 2.6.27...

Ce serait dommage que je ne puisse pas trouver une petite astuce pour l'utiliser, quelle serait le moyen de l'adapter pour php4?
Quelle partie du code PHP5 interpreterait-il mieux ?

Je vais regarder simple_xml, je te remercie codefalse..

Julien RICHARD
Adjoint Multimedia
Groupe AXORYS
jeudi 24 janvier 2008 à 10:56:26 | Re : Problème Insertionflux xml

codefalse

Administrateur CodeS-SourceS
Je suppose que .nexen.0 signifie qu'ils ont fait des modifications sur le code php pour l'adapter à leur usage, voila pourquoi.
Peut-être que dans ton usage, tu utilise des fonctions faite à partir de php5 (ou implémentant des propriété mise à partir de php5) ce qui peux causer ce bogue. Vu que chez toi ca marche et pas chez eux !

Fait attention aux fonctions que tu utilise ! :)
jeudi 24 janvier 2008 à 11:16:19 | Re : Problème Insertionflux xml

richardjul

Ok merci pour tes réponses,
je vais reprendre mon code en tenant compte des différences de versions...

thanks.

Julien RICHARD

jeudi 24 janvier 2008 à 11:36:42 | Re : Problème Insertionflux xml

richardjul

Bon et bien ce ne sera encore pas la solution car mon hébergeur est sous PHP4, et L'extension SimpleXML requiert PHP 5.
donc quelqu'un aurait-il une astuce svp?

Merci beaucoup



Julien RICHARD
Adjoint Multimedia
Groupe AXORYS
jeudi 24 janvier 2008 à 11:59:03 | Re : Problème Insertionflux xml

codefalse

Administrateur CodeS-SourceS
En php4 tu à Dom :
http://fr2.php.net/manual/fr/ref.domxml.php
jeudi 24 janvier 2008 à 16:22:18 | Re : Problème Insertionflux xml

richardjul

Voilà j'ai trouvé,
il fallait respecter l'ordre des balises et dans la conditions de la fonction endElement tester le dernier item parcouru, donc bien faire gaffe à l'ordre des items du xml!!

le script fonctionnel est le suivant :

<?php
mysql_connect("adress", "login", "MDP") or die("Impossible de se connecter");
//mysql_connect("localhost", "root", "") or die("Impossible de se connecter");
mysql_select_db("DB") or die("pas possible de trouver la base");

//ORDRE item FLUX  : titre  DATE  lieu  URL  entreprise  ref

$file = "adress du flux.xml";
global $fournisseur;
$find_fournisseur = explode ("/", $file);
$fournisseur2 = $find_fournisseur[2];
$fournisseur1 = explode (".", $fournisseur2);
$fournisseur = $fournisseur1[1];

if(isset($file)) {
$titre = "";
$ref = "";
$curtag = "";
/** fonction startElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function startElement($parser, $name, $attrs) {
global $curtag, $titre, $date, $lieu, $url, $entreprise, $ref;
$curtag = $name;

if ($name == "TITRE") $titre = "";
if ($name == "DATE") $date = "";
if ($name == "LIEU") $lieu = "";
if ($name == "URL") $url = "";
if ($name == "ENTREPRISE") $entreprise = "";
if ($name == "REF") $ref = "";
}

/** fonction endElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function endElement($parser, $name) {
global $curtag, $titre, $date, $lieu, $url, $entreprise, $ref, $fournisseur ;

$curtag = "";

if ($name == "REF") {

//Formatage des entrées pour la BDD
$titre1 = addslashes($titre);
//$titre1=utf8_decode($titre);

$date = addslashes($date);
$date2 = explode("/",$date);       
$date_finale = $date2[2]."-".$date2[1]."-".$date2[0];

$lieu1 = addslashes ($lieu);

$url1 = addslashes ($url);
//$url1=utf8_decode($url);

$entreprise1 = addslashes ($entreprise);
//$entreprise1=utf8_decode($entreprise);

//Affichage des entrées titre et entreprise enregistré dans la base
/* echo $titre1;
echo "<br>";
echo $date_finale;
echo "<br>";
echo $lieu1;
echo "<br>";
echo $url1;
echo "<br>";
echo $entreprise1;
echo "<br>";
echo "<strong style=\"color:blue\">".$ref."</strong>";
echo "<br>";
echo $fournisseur;
echo "<br>";  */

$query = "INSERT INTO matable(created,title,location,URL_flux,company,ref_xml,fournisseur_flux) VALUES('".$date_finale."','".$titre1."','".$lieu1."','".$url1."','".$entreprise1."','".$ref."','".$fournisseur."')";
$result = mysql_query($query) or die('Erreur SQL !'.$query.'<br>'.mysql_error());


}
/** fonction characterData, déclenchée lorsque le parseur rencontre des caractères, à l'intérieur d'un noeud XML **/
function characterData($parser, $data) {
global $curtag, $titre, $date, $lieu, $url, $entreprise, $ref;

if ($curtag == "TITRE")
$titre .= $data;

if ($curtag == "DATE")
$date .= $data;

if ($curtag == "LIEU")
$lieu .= $data;

if ($curtag == "URL")
$url .= $data;

if ($curtag == "ENTREPRISE")
$entreprise .= $data;

if ($curtag == "REF"){
$ref .= $data;

}
}

/** crée un nouveau parseur **/
$xml_parser = xml_parser_create();

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);

/** enregistre les trois fonctions ci dessus **/
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("Impossible d'ouvrir l'URL...");
}

while ($data = fread($fp, 50)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("erreur XML: %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
}


xml_parser_free($xml_parser);
mysql_close();

}

?>

Merci bien

Julien RICHARD

jeudi 24 janvier 2008 à 16:33:58 | Re : Problème Insertionflux xml

codefalse

Administrateur CodeS-SourceS
Réponse acceptée !
Content pour toi que ca marche :)

Tu veux bien valider ta derniere réponse histoire d'indiquer que c'est bon ? merci à toi :)


Cette discussion est classée dans : mysql, xml, echo, ref, if


Répondre à ce message

Sujets en rapport avec ce message

comment supprimer le paiement et confirmer chaque inscription manuellement [ par asmina22 ] salutj'ai un script sur lequel je veux apporter des modifications:comment supprimer les options de payment et ouvrir les enregistrement sur la base de XML dynamique avec php [ par kingsaiz ] voila je fais un xml à la volée avec une page php Resultat du xml avec mon code php <parameters bigframeheight ="410" bigframewidth ="500" noofcolum récupérer un fichier de la BD MYSQL [ par mao54 ] salutj'ai des fichier stockés dans la base de donnée et j'ai une methode de recherche qui affiche ces resultats dans un tableau.je souhaite dans la co insérer contenu xml dans bdd mysql [ par indutec ] Bonjour à tous, Voilà, j'aimerais encoder le contenu d'un fichier xml, que je ne génère pas, vers une base de données mysql. Pour l'instant, il m'enc insérer contenu xml dans bdd mysql [ par indutec ] Bonjour, Je souhaite insérer le contenu d'un fichier xml externe dans une base de données sur mon serveur. Pour l'instant, il me génère une erreur Comment faire disparaitre des bannieres une fois cliqué [ par stomy95 ] Bonjour a tous , voila je suis débutant en webmastering et je voudrais savoir comment fait on pour faire disparaitre des banniere une fois cliqué par probleme formuliare [ par jinin ] Bonjours à Tous, j'ai fait un script php pour un formulaire d'inscription dans dans ma base données avec envoie d'email <div align="center" style="w probléme avec mes fonction mysql [ par jinin ] Salut j'ai essayer de faire une script qui affiche page par page des article que moi l'admin je poste sur ma partie index de mon site voici mes erreur probléme :formulaire d'inscription [ par adilboy2007 ] Bonjour à tous, je suis nouveau sur le forum et je me permet de poster ce sujet car j'ai besoin d'aide en php. je viens de crée un formulaire d'inscri


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,231 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales