Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème Insertionflux xml [ Base de données / MySQL ] (richardjul)

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é 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 impossible modifier quantité du dernier article d'un panier [ par oceane751 ] bonjour à tous, mon probleme est le suivant : j'ai mon panier, et je ne peux modifier que la quantite du 1er article et pas les autresà quoi ceci est rajouter une ligne à mon tableau en cliquant sur un bouton [ par Deis94 ] Voila jai un petit souci et je bricole pas mal pour men sortir (suffit de jeter un coup d'oeilà mon script )en considérant que je suis dans un tableau Pb de Parse Error en PHP [ par CChargy ] Bonjour,J'ai fait cette page PHP, qui affiche un formulaire de réservation de stage. Voici le code :Nouvelle page 1</t


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.