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

Langage PHP Discussion :

split string venant d'une BDD


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut split string venant d'une BDD
    Bonjours,

    Voila mon problème:

    J'ai besoin de slipt un chaine de caractère que je récupère d'un BDD qui est sous la forme "mot1 / mot2" car pour un exercice un étudiant doit rentrer par exemple le mot 1 ou 2 est avoir la bonne réponse.

    Le problème que j'ai ici c'est que lorsque que je split la string que j'ai créé moi à la main j'ai pas de problème et idem avec n'importe qu'elle variable qu'y ne vient pas de ma BDD.

    voila un exemple de test de mon code:

    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
    $id=$_SESSION["_{$i}"];
     
    $rep = $bdd->query("SELECT * FROM verbe WHERE id=$id");
    $d = $rep->fetch();
    $rep->closeCursor();
     
     
    $string= $d['traduction'];
    $tok = explode(' / ', $string);
    print_r($tok); // retourne Array ( [0] => moudre / opprimer ) 
     
     
    $string= "moudre / opprimer";
    $tok = explode(' / ', $string);
    print_r($tok); // retourne Array ( [0] => moudre [1] => opprimer )

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il est possible qu'il y ait des caractères échappés dans ta base. Comment sont insérées les données ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par neogeekmo Voir le message
    ... lorsque que je slip la string que j'ai créé moi à la main...
    C'est assez culotté...

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Que t'affiche le code: for ($i=0;$i<strlen($string);$i++) echo dechex(ord($string[$i])),' ';?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Celira Voir le message
    Il est possible qu'il y ait des caractères échappés dans ta base. Comment sont insérées les données ?
    Ca fait longtemps que j'avais fait cette table.
    J'avais fait un insertion de la table avec un fichier sql que j'avais modifié à la main en rajoutant le code sql que j'avais obtenu a partir d'un insertion d'un tableau (excel) avec phpmyadmin.

    (ouai c'était un peu gitan comme méthode j'avoue)

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    C'est assez culotté...
    un T est si vite oublié
    et le sans des lettres aussi x)

    Citation Envoyé par CosmoKnacki Voir le message
    Que t'affiche le code: for ($i=0;$i<strlen($string);$i++) echo dechex(ord($string[$i])),' ';?
    le truc c'est que le contenu de la variable change a chaque refresh de page car c'est un exo random mais je t'ai donné un code hexa d'un truc qui pose problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    67 c3 a2 63 68 65 72 c2 a0 2f 20 67 c3 a2 74 65 72
    ce qui donne en ascii

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    C'est bien ce que je soupçonnait, un de tes espaces n'est pas l'espace de la table ascii (U+0020 SPACE) mais un espace insécable (U+00A0 NO-BREAK SPACE) qui est codé sur deux octets en UTF-8: c2 a0.

    Donc en remplaçant l'espace insécable par un espace normal avant d'utiliser explode(' / ', $string) ça devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = str_replace("\xc2\xa0", ' ', $string);
    Le mieux serait de faire le remplacement pour tous les enregistrements de ta table une bonne fois pour toute (sauf si le ou les espaces insécables sont là pour une bonne raison).

    ce qui donne en ascii
    J'en doute, l'ascii ne contient pas ces caractères. C'est probablement de l'ISO8859-1.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    à ta place, je changerais la mise en forme : "chaine1|chaine2"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tok = explode('|', $string);
    Là, plus de souci d'espace, insécable ou pas.

    Ensuite, rien n'empêchera d'écrire des chaines composées de plusieurs mots : "chaine1|chaine2 contenant plusieurs mots"

    N.B. Le choix du caractère de séparation t'appartient...

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Donc en remplaçant l'espace insécable par un espace normal avant d'utiliser explode(' / ', $string) ça devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = str_replace("\xc2\xa0", ' ', $string);
    Le mieux serait de faire le remplacement pour tous les enregistrements de ta table une bonne fois pour toute (sauf si le ou les espaces insécables sont là pour une bonne raison).
    Merci et non je comprend pas vraiment pourquoi j'ai des espaces insécables d'ailleurs du coup je vais changer tout ca dans ma table.
    Merci de ton aide

    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    à ta place, je changerais la mise en forme : "chaine1|chaine2"
    Bah à la base j'avais mis " / " car je voulais que les péons qui allait faire l'exo donne toutes les réponses donc c'est plus facile de taper un slash qu'un pipe et les espaces pour que ca soit plus lisible. Mais avec du recul je me suis rendu compte que bah parfois tu as 3-4 réponses possibles du coup c'est un peu capillotracté par moment donc qu'une réponse ca passe large au final, donc ouai un / ou | c'est la même.
    Merci quand même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TextView de donnes venant d'une BDD
    Par profecie dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 16/10/2011, 14h32
  2. [FPDF] MultiCell et retour à la ligne dans texte venant d'une BDD
    Par jekif dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/07/2011, 12h44
  3. probléme d'affichage d'image venant d'une bdd
    Par jolina1987 dans le forum Langage
    Réponses: 4
    Dernier message: 17/03/2010, 09h55
  4. [MySQL] Mettre données venant d'une BDD dans "id" d'une balise html
    Par maryooman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/12/2009, 14h25
  5. [Conception] affichage image venant d'une bdd
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/06/2006, 09h18

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