IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème de copie de données.


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut Problème de copie de données.
    Bonjour à tous et à toutes,

    Voilà, je suis depuis plusieurs jours bloqué sur un problème vraiment très étrange. Mon patron veut changer le système des commentaires des produits sur son site.

    Je travaille sur 2 bases de données différentes, mon but est de récupérer tous les commentaires de la première base afin de les transférer sur la seconde. pour cela j'ai crée un script php permettant le transfert, mais certaines erreurs sont apparues et je ne sais que faire.

    En effet, il y a environ 400 enregistrements à transférer, mais seulement 40% d'entre eux sont transférés. Après avoir bien décortiqué le problème, cela vient de certains commentaires qui ne sont pas acceptés lorsque que le script php lance la requête insert. A chaque commentaire non accepté, son contenu contient un "é" dans la première base de données, ainsi il n'est pas copié dans l'autre.

    J'ai tout essayé, des fonctions php telles que htmlentities ou html_entity_decode, rien ne marche, à chaque fois les commentaires qui contiennent des "é" ne sont pas transférés.


    Si quelqu'un peut m'aider !!! je n'en peux plus de ne pas trouver.
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Points : 30
    Points
    30
    Par défaut
    et tu as quoi comme erreur de la part de sql?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    c'est bien ça le problème, il n'y a aucune erreur.

    en fait par exemple quand j'essaie de faire transférer manuellement ( par une requète directement sous mysql ) un commentaire qui n'a pas réussi à être transféré, là tout marche parfaitement, il se transfère.

    Mais le problème vient de mon script php enfin je pense, pourtant il est tout basique et il n'y a aucune erreur de syntaxe.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Points : 30
    Points
    30
    Par défaut
    peux tu mettre le bout de code qui génère la requête sql?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    require("../config.php");
     
     
    	// requete qui va chercher le premier enregistrement afin d'effectuer en suite la conversion //
    	$requete1 = mysql_query("select ID,TEXT from dev.BAVIS");
    	$data = mysql_fetch_assoc($requete1);
     
     
    	while ( $data != null ) 
    	{
     
    		$text_recup = $data['TEXT'];
    		$id_recup = $data['ID'];
     
    		$req = "insert into social.AVIS (IDAVIS, TEXTE)  values('$id_recup', '$text_recup')";				               
    		$sql2 = mysql_query($req);
     
    		// entrée suivante //
    		$data = mysql_fetch_assoc($requete1);
     
    	}


    voilà le script en question qui gère le transfert ( j'ai mis seulement deux champs pour que le script travaille plus vite )

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Premiere chose à vérifier : utilise-tu bien mysql_real_escapce_string() ?

    Si oui, c'est certainement un problème d'encodage des caractères...

    avant de récupérer tes commentaires, essaye de les forcer en UTF-8 (si la nouvelle est bien aussi en UTF8), de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SET NAMES 'utf8'");
    si ça ne marche toujours pas, récupère tes anciens commentaires et transmet les à la nouvelle avec un htmlentities(), de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    foreach ($oldCom AS $v) {
         $sql = "INSERT INTO maNewTable SET ";
         foreach ($v AS $key => $val) {
              $sql .= $key." = '".mysql_real_escape_string(htmlentities($val))."', ";
         }
         $sql = rtrim($sql, ', ');
         mysql_query($sql);
    }
    ?>
    NB : le mysql_real_escape_string() n'est normalement pas nécessaire avec le htmlentities() mais on ne sait jamais

    NB2 : comme je connais pas exactement les structures des 2 tables j'ai écrit ici un code exemple mais en réalité ce code ne fait qu'un réplica de la premiere table ;-)

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Vala avec ton code :


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    require("../config.php");
     
     
    	// requete qui va chercher le premier enregistrement afin d'effectuer en suite la conversion //
    	$requete1 = mysql_query("select ID,TEXT from dev.BAVIS");	
    	while ( $r = mysql_fetch_assoc(requete1) {
    	      $req = "INSERT INTO social.AVIS (IDAVIS, TEXTE)  VALUES ('".mysql_real_escape_string($r['ID'])."', '".mysql_real_escape_string(htmlentities($r['TEXT']))."')";				               
    		if (mysql_query($req)) {
                         echo "Enregistrement effectué.<br />";
                   	} else {
                         echo "Erreur d'enregistrement. <br />".mysql_error();
                    }
    	}

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    ok merci ça marche bien, tout s'est bien transféré, le problème venait de mysql_escape_string, je ne l'avais pas mis sur mon script de base.

    par contre petit soucis maintenant
    quand j'affiche un commentaire transféré qui ne se transférai pas avant

    j'ai des symbôles de la sorte

    é

    exemple =>
    J'ai adoré ce roman! C'est un véritable documentaire (avec tous ses travers...) écrit avec un grand sens de l'observation et du détail (ça sent le vécu!!!). Certains passages sont à mourrir de rire ;p

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    tu as bien mis htmlentities() ?? je ne pense pas sinon t'aurais pas ce problème :p

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    je viens de le rajouter et cela me donne ça maintenant

    J'ai ador&Atilde;&copy; ce roman! C'est un v&Atilde;&copy;ritable documentaire (avec tous ses travers...) &Atilde;&copy;crit avec un grand sens de l'observation et du d&Atilde;&copy;tail (&Atilde;&sect;a sent le v&Atilde;&copy;cu!!!). Certains passages sont &Atilde;&nbsp; mourrir de rire ;p

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    $re = mysql_query("select * from social.AVIS where IDAVIS = 2");
    	$d = mysql_fetch_assoc($re);
     
    	echo htmlentities($d['TEXTE']);

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    tu n'as pas mis de header/charset UTF8... essaye par exemple dans Firefox d'aller dans Affichage > Encodage des caractères > Unicode(UTF-8)

    Ta page devrait se recharger en affichant les bons caractères


    header PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Content-Type: text/html; utf-8');
    header('Content-type: text/html; charset=UTF-8');
    charset HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    PS : utiliser les header PHP sont suffisants

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    la page du site en question ou sont affichés les commentaires des produits est en charset iso

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    quand je fais ce que tu me dis, c'est à dire modifier dans firefox l'encodage, cela fait bugger pleins d'autres éléments de la page :s, et en plus ça ne change pas l'affichage des commentaires, ils sont tjs avec ces caractères illisibles ^^

    je suis dans une impasse il faut croire ...

    PS : les header non plus ne fonctionnent pas

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    en fait c'est bon tout marche il suffisait d'enlever le htmlentities devant la requete et de ne laisser que le mysql_escape


    Merci tu m'as bien bien aidé !!!
    à plus

Discussions similaires

  1. [XL-2003] Copie de données Internet (Problème de code)
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 81
    Dernier message: 12/11/2012, 19h49
  2. Problème de copie d'une base de données MySQL avec PHP
    Par rheem dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 15/10/2007, 14h52
  3. [VBA-E] Problème de copie de données
    Par JM_stp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2006, 00h33
  4. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo