Mise d'une BDD par un fichier XML

Signaler
Messages postés
69
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
24 mai 2011
-
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour,
J'ai réalisé (avec l'aide de "neige" d'ailleurs) un fichier .php permettant d'insérer ou de modifier une table de ma BDD selon un fichier XML régulièrement modifié.
Le souci est que je n'ai toujours pas trouvé le moyen de supprimer les lignes obsolètes de ma table.

<?php



//-------------------------------------------------------------------    



//désactiver magic_quotes



if (get_magic_quotes_gpc()) {
$input array(&$_GET, &$_POST, &$_COOKIE, &$_ENV, &$_SERVER);while (list($k,$v) each($input)) {

foreach ($v as $key => $val) {

if (!is_array($val)) {$input[$k][$key] = stripslashes($val);continue;}
$input[] =& $input[$k][$key];}

}

unset($input);}
//-------------------------------------------------------------------



//start--------------------------------------------------------------





session_start();require_once('classes/all_adm_fns.php');//changement du level du raport d'erreur a E_ALL 

//pour detecter la plupart des variables non initialisées

error_reporting(E_ALL);//-------------------------------------------------------------------



//--------------------------------------------------------------------



//Verifier si le super admin est connécté



if( !empty($_SESSION['valid_admin']) )
{
$valid_admin = $_SESSION['valid_admin'];}
if( !check_valid_all() )
{
redirect( "index.php" );exit;}
//--------------------------------------------------------------------



//-------------------------------------------------------------------



error_reporting(E_ALL);
mysql_connect('...) or die('Erreur de connexion '.mysql_error());mysql_select_db('...');
//////////////////////Wizzimmo



function prepare_string(SimpleXMLElement $sxe) {
return mysql_real_escape_string(utf8_decode((string) $sxe));
}

if (file_exists('exemple_wizzimmo.xml')) 
{
$Agences_xml = simplexml_load_file('exemple_wizzimmo.xml');

foreach ($Agences_xml->Agence as $Agence){print "Nom d'agence : ";

////////////////// Vérification///////////////
var_dump($Agence->CodeAgenceInterne);
print " 
\n";
print "N° téléphone: {$Agence->Telephone1_Agence} 
\n";
print "email: {$Agence->EMAIL_Agence} 
\n";
print "Référence annonce client : {$Agence->Annonce->Reference} 
\n";
print "Type d'annonce : {$Agence->Annonce->TypeAnnonce} 
\n";
print "Date Modification : {$Agence->Annonce->DateModification} 
\n";
print "Code postal : {$Agence->Annonce->CodePostal} 
\n";
print "Ville : {$Agence->Annonce->Ville} 
\n";
print "titre : {$Agence->Annonce->Titre} 
\n";
print "Ann : {$Agence->Annonce->Texte} 
\n";
print "Prix : {$Agence->Annonce->Prix} 
\n";
print "Surf habitable: {$Agence->Annonce->Surf_Hab} 
\n";
print "Nb Pieces : {$Agence->Annonce->NbPieces} 
\n";
print "Département : {$Agence->Annonce->CodePostal} 
\n";
print "Les photos : 
\n";
var_dump($Agence->Annonce->URL_Photo);
print " 
\n";
var_dump($Agence->Annonce->URL_Photo[1]);
print " 
\n";
var_dump($Agence->Annonce->URL_Photo[2]);
print " 
\n";
var_dump($Agence->Annonce->URL_Photo[3]);
print " 
\n";
var_dump($Agence->Annonce->URL_Photo[4]);
print " 
\n";
////////////////// Vérification///////////////

///////////////////Spécificité catégories ////////////////////////////////

if((string)$Agence->Annonce->TypeAnnonce == "VENTE" ) 
{$Typeann= "72";
}
else
{
$Typeann = "71";}

///////////////////////Spécificités constantes///////////////////////////
$password = 'imoconseil201025';
$sta = '2';
$conf = '1';
$val = '1';
$ra ='0';
$re ='1'; ///// à voir plus tard
$time = time();
$ipadresse = '79.91.192.30'; ///// à voir plus tard
$rand = '';

///////////////////////Spécificité tag agence////////////////////////////
$nom = prepare_string($Agence->CodeAgenceInterne);
$telag = (string)$Agence->Telephone1_Agence;
$mail = prepare_string($Agence->EMAIL_Agence);

///////////////////////Spécificité tag agence->annonce///////////////////
$ref = (string)$Agence->Annonce->Reference;
$vil = prepare_string($Agence->Annonce->Ville);
$cod = (string)$Agence->Annonce->CodePostal;
$de = (string)$Agence->Annonce->CodePostal;
$titre = prepare_string($Agence->Annonce->Titre);
$desc = prepare_string($Agence->Annonce->Texte);
$pri = (string)$Agence->Annonce->Prix;
$surf = (string)$Agence->Annonce->Surf_Hab;
$nbpiece = (string)$Agence->Annonce->NbPieces;
$pho1 = (string)$Agence->Annonce->URL_Photo;
$pho2 = (string)$Agence->Annonce->URL_Photo[1];
$pho3 = (string)$Agence->Annonce->URL_Photo[2];
$pho4 = (string)$Agence->Annonce->URL_Photo[3];
$pho5 = (string)$Agence->Annonce->URL_Photo[4];

/////////////////////// Mysql annonces //////////////////////////// 
$sql1 "SELECT ref_annonce_client, soc_nom FROM annonces WHERE ref_annonce_client'$ref'";
$query1 = @mysql_query($sql1);
$result1 = result_to_array($query1,2);

////////////////////vérification
print " 
\n";
echo "Ref : ".$result1[0][0];
print " 
\n";
echo "Nom : ".$result1[0][1];
print " 
\n";
print " 
<hr />\n";
////////////////////Fin vérification

if( ($result1[0][0] == $ref) && ($result1[0][1] == $nom) )
{
mysql_query("UPDATE annonces SET id_reg='$re', id_dep=LEFT('$de',2), id_cat='$Typeann',     email='$mail',     ville='$vil',     code_pos='$cod',     status='$sta',     soc_nom='$nom', nom='$nom', tel='$telag',     titre='$titre',     radio='$ra',     ann='$desc',     prix='$pri', Surface='$surf',     Piéces='$nbpiece', random_code='$rand', confirm='$conf', valid='$val', url_pho1='$pho1', url_pho2='$pho2' ,url_pho3='$pho3' , url_pho4='$pho4', url_pho5='$pho5' WHERE ref_annonce_client='$ref' AND nom='$nom'");
}
else
{
mysql_query("INSERT INTO annonces (ref_annonce_client,     id_reg,     id_dep,     id_cat,     email,     password,     ville,     code_pos,     status,     soc_nom,     soc_siren,     type,     nom,     tel,     titre,     radio,     ann,     prix,     Kilométrage,     Année_Modéle,     Cylindrée,     Surface,     Piéces,     Capacité,     random_code,     confirm,     valid,     date,     tel_cache,     ip, url_pho1, url_pho2 ,url_pho3 , url_pho4, url_pho5 )VALUES('$ref',     '$re',     LEFT('$de',2),     '$Typeann',     '$mail ',     '$password',     '$vil',     '$cod',     '$sta',     '$nom',     '',     '1',     '$nom',     '$telag',     '$titre',     '$ra',     '$desc',     '$pri',     '',     '',     '',     '$surf',     '$nbpiece',     '',     '$rand',     '$conf',     '$val',     '$time',     'N',     '$ipadresse', '$pho1', '$pho2', '$pho3', '$pho4', '$pho5')")

or die("Erreur MySQL : ".mysql_error());
}

/////////////////////// FIN Mysql annonces //////////////////////////// 


} //////////////fin foreach


} //////////////fin file_exist
else 
{
exit('Echec lors de l\'ouverture du fichier XML.');
}

?>

9 réponses

Messages postés
69
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
24 mai 2011

Est-ce que quelqu'un aurait une petite idée pour que les lignes obsolètes de la Table soient suppriméee à l'exécution du script?

Merci.
Messages postés
69
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
24 mai 2011

Est-ce que quelqu'un aurait une petite idée pour que les lignes obsolètes de la Table soient suppriméee à l'exécution du script?

Merci.
Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
Bonjour,

Une solution consisterai à avoir un champ de "controle" ( genre isInXml )
que tu met à false au début de ton script ( un simple update )

Tu ajoute à tes requéte Insert et Update se qu'il faut pour que isInXml passe à True.

En fin de script; tu efface tout les enregistrement qui ont isInXml à false.

c'est une solution, il peut y en avoir d'autre.
Messages postés
69
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
24 mai 2011

Merci pour ta réponse, effectivement ce serait pas mal.
Y aurait-il une solutions qui permette de ne pas changer ma ma Table?
Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
Il pourrais y en avoir une mais comme je n'est pas la structure de ta table;

Je vois les champs 'status' 'valid' 'date'

à quoi cela correspond t'il ??
Messages postés
69
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
24 mai 2011

Voila :
'status' >> particulier ou prof. valeurs 1 ou 2
'valid' >> affichage ou non de l'annonce valeurs 1 ou 0
'date' >> date la mise en ligne (format time())
Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
Une autre question :

dans ton fichier XML, tu as toutes les annonces à afficher avec la date de mise en ligne ??

Si c'est le cas, tu peut utiliser ce champs pour ton contrôle.
Messages postés
69
Date d'inscription
vendredi 25 janvier 2008
Statut
Membre
Dernière intervention
24 mai 2011

je vais essayer ça.
Merci Lyle56.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Ou alors stocker le champ de contrôle dans une table temporaire dont les deux champs seraient : le champ de contrôle et l'ID de la table en question.
La procédure est la même mais ne nécessite pas de modifier la table.
Seul bémol : les performances qui s'en trouvent dégradées ; mais ça ne doit pas être important, puisqu'il s'agit d'une action d'administration, pas d'une action effectuée à chaque chargement de page.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)