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 :

Insertion occurence Chaine de caracteres dans base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Insertion occurence Chaine de caracteres dans base de données
    Bonjour à tous,

    En recherche depuis plusieurs jours, je me tourne vers vous et vos compétences d'expert.

    Voilà mon problème.
    Je cherche à insérer les occurrences d'une chaine de caractère dans une table.

    La 1ère occurrence sur la ligne 1, la 2ème occurrence sur la ligne 2, et ainsi de suite.
    Sachant que l'insertion doit se faire en fonction des "ref" et par ligne.

    Exemple concret:
    J'ai ma table avec les infos suivante

    id | Ref | cotation
    .... ..... ........
    11 4586 20_5
    12 4586 3_8

    13 8756
    14 8756 10_3
    15 8756

    16 7423 12_3
    17 7423 4_2
    .... ..... ........


    Et j'ai ma chaine de caractère qui m'est fournit comme cela :
    ref => 8756
    cotation => 1_4,10_5,3_16

    la 1ere occurrence "1_4" doit aller sur la ligne 13 et remplir le champ vide cotation,
    la 2ème occurrence "10_5" doit aller sur la ligne 14 et modifier le champ cotation,
    la 3ème occurrence "3_16" doit aller sur la ligne 15 et remplir le champ vide cotation.

    Et évidement les ID de la table change en permanence,
    je ne peux donc pas m'appuyer sur le champ ID mais uniquement sur le champ "ref".

    J'ai essayé plusieurs formule avec foreach, for, while, et autre.

    J'arrive à envoyer toute la chaine dans le champ cotation mais elle se répète sur toutes les lignes,
    J'arrive à envoyer la 1ère occurrence dans le champ cotation mais elle se répète sur toutes les lignes,
    J'arrive à envoyer la dernière occurrence dans le champ cotation mais elle se répète sur toutes les lignes.

    Je n'arrive pas à dispatcher la 1ère occurrence sur la ligne 1, la 2ème sur la ligne 2 et ainsi de suite.

    Avec votre expertise, avez vous une orientation pour m'aider à faire cela.

    Je vous remercie tous d'avance.

    Coyote_064
    (php 5.6 / mysql 5)

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Solution n°1 s'il est nécessaire de conserver les id : Tu lis tous les id existant pour la reference concernée, et pour chaque valeur de cotation, tu fais un UPDATE d'un id.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ref = 8756;
    $cotations = '1_4,10_5,3_16';
    $cotations = explode($cotations, ',');
     
    $selectRef = $pdo->prepare('SELECT id FROM tatable WHERE Ref = ? ORDER BY id');
    $updateCotation =  $pdo->prepare('UPDATE tatable SET cotation = ? WHERE id = ?');
     
    $selectRef->execute(array($ref));
     
    foreach ($cotations as $cotation_value) {
        if ($row = $selectRef->fetch(PDO::FETCH_ASSOC)) {
               $updateCotation->execute(array($cotation_value, $row['id']));
        }
    }
    Solution n°2 : puisque les id semblent ne pas avoir d'importance puisque tu nous dis qu'ils changent, tu effaces tout et tu réecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ref = 8756;
    $cotations = '1_4,10_5,3_16';
    $cotations = explode($cotations, ',');
     
    $deleteRef= $pdo->prepare('DELETE FROM tatable WHERE Ref = ?');
    $insertCotation =  $pdo->prepare('INSERT INTO tatable (ref, cotation) VALUES (? , ?)');;
     
    $selectRef->execute(array($ref));
     
    foreach ($cotations as $cotation_value) {
        $inserteCotation->execute(array($ref, $cotation_value));
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    MERCI MERCI MERCI Mr "sabotage".

    Toi tu es un génie !!!!!!

    Ca faisait 4 jours que je galérais sur cette formule.
    J'arrivais pas à imbriquer correctement une sous-requête dans une requête.

    J'ai juste modifier
    $cotations = explode($cotations, ',');
    avec
    $cotations = explode(",", $cotations);
    et j'ai réadapté le reste du code par rapport à mon code.

    Franchement encore MERCI sabotage.
    Si tu habites dans le pays basque, je te paie une bière.

    Coyote_064

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous et à Sabotage si tu es dans le coin.

    J'ai parlé un peu vite et j'ai rouvert le sujet.
    Pour préciser, j'utilise la solution 1 qui répond mieux à mes besoins.

    Quand je note à la main la chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $cotations = '3_6,3_7,4_6,4_7';
    echo $cotations; affiche => 3_6,3_7,4_6,4_7
    L'update de la table marche parfaitement.


    Maintenant j'ai trouvé la possibilité d'aller chercher dynamiquement la chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $cotations = '';
    foreach($recup_chaine as $o) {
    $cotations .= $o.',';
    }
    $cotations = substr($cotations , 0, -1);
    echo $cotations; affiche => 3_6,3_7,4_6,4_7
    Mais là il y a un bug lors de l'update.

    Exemple avec la chaine recupérée en dynamique:

    si cotations dynamique = 3_6,3_7,3_8,3_9 pas de soucis pour l'update

    si cotations dynamique = 3_6,3_7,4_6,4_7 il enregistre uniquement 4_6,4_7 et me zappe 3_6,3_7

    Chercher l'erreur ?????
    En manuel la 1ere valeur de la cotation ne pose pas de problème, mais en dynamique c'est la dernière cotation qui prend le dessus.

    Si quelqu'un à une info je suis preneur.

    Merci à tous
    Coyote064

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    D'ou vient $recup_chaine ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Re,

    Merci Sabotage pour les balises "Code", je penserai à les mettre maintenant.

    D'ou vient $recup_chaine ?

    Je sélectionne mes cotations sur un tableau en javascript et post le résultat sur la meme page

    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
     
     
    $recup_chaine = $_POST['cotation'];
     
    $cotation = '';
    foreach($recup_chaine as $o) {
    $cotation .= $o.',';
    }
     
    $cotation = substr($cot, 0, -1);  // dynamique
     
    //$cotation = '3_6,3_7,3_8,3_9,3_10'; // manuelle
     
    echo $cotation ;
    $cotation = explode(',', $cot);
    Si cela te permet de mieux comprendre.

    Merci

    Coyote_064

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas du tout a quoi sert ce code : tu as un tableau, tu en fais une chaine avec des virgules et tu exploses la chaine pour en refaire un tableau ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Re,

    le probleme et que je recupère les cotations avec $_POST['cotation'],

    si j'appelle directement $_POST['cotation']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $_POST['cotation'];
    j'ai "array" en résultat

    alors qu'avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $recup_chaine = $_POST['cotation'];
    $cotation = '';
    foreach($recup_chaine as $o) {
    $cotation .= $o.',';
    }
    $cotation = substr($cot, 0, -1);  // dynamique
    echo $cotation;
    j'ai bien ma chaine 3_6,3_7,3_8,3_9,3_10

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ref = 8756;
    $cotations = $_POST['cotation'];
     
    $selectRef = $pdo->prepare('SELECT id FROM tatable WHERE Ref = ? ORDER BY id');
    $updateCotation =  $pdo->prepare('UPDATE tatable SET cotation = ? WHERE id = ?');
    ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    re,

    J'ai déja essayé avec ce que tu préconises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $cotations = $_POST['cotation'];
    mais j'ai le même problème

    si cotations dynamique = 3_6,3_7,3_8,3_9 pas de soucis pour l'update
    si cotations dynamique = 3_6,3_7,4_6,4_7 il enregistre uniquement 4_6,4_7 et me zappe 3_6,3_7

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Oula,

    je viens de comprendre où cela bug.
    En fin de compte c'est pas mon import qui merde.

    C'est le $_POST['cotation'] que je récupère qui merde
    quand les cotations ont la même première valeur pas de soucis 1_1,1_2 (ok)
    par contre quand la 1ere valeur est différente ça bug 1_1,2_1 (pris en compte uniquement 2_1 )

    Il faut que je revoie mon script qui poste les cotations
    ou que je revoie le traitement des infos du $_POST['cotation'].

    Je tiendrai informé le forum

    coyote_064

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Re,

    j'ai trouvé le problème, cela venait de ma chaine de caractères importée.
    Une sal.... de faute de frappe.

    Merci encore pour votre aide

    coyote_064

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

Discussions similaires

  1. Chaine de caracteres Et base de données
    Par Invité dans le forum JDBC
    Réponses: 1
    Dernier message: 08/05/2012, 12h00
  2. remplacer les occurences d'un caractere dans une chaine par un autre
    Par lity7 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 14/03/2008, 13h02
  3. Chercher une chaine de caracteres dans toute ma base
    Par miltonis dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/09/2007, 18h33
  4. [MySQL] Insertion et affichage UTF-8 dans base de données
    Par DeezerD dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/08/2007, 22h39
  5. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 10h09

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