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 :

Erreur Undefined offset dans un tableau


Sujet :

Langage PHP

  1. #21
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Affichage
    Pour pouvoir les afficher dans une page html !

    Langues parlées : echo $langues

    donnera :

    Langues parlées : français, allemand et russe

  2. #22
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut La solution 2 (le retour)
    Voilà la fonction terminée :

    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
    24
    25
    26
    27
    28
    <?php
    //Paramètre de la fonction : $id_langue et le nom de la table
    require_once 'connectbdd.php';
    $id_langue = ('acd');
    $table = ('langues');
    $langue = donne($id_langue,$table);
     
    function donne($id_langue,$table) {   
    $lg_chaine = strlen($id_langue);
    $tab = array();
    for($i = 0 ; $i < $lg_chaine ; $i++) {
    $resultat = mysql_query('SELECT nom_langue FROM ' . $table . ' WHERE langue_id = "' . ($id_langue[$i]) . '"')
    or die('Erreur de sélection dans la base de données '.mysql_error());
    $row =  mysql_fetch_array($resultat);
    $tab[$i] = $row[0];
    }
     
    $lg_tab = count ($tab);
     
    // Concaténation des variables du tableau
    // Exemple : avec id_langue = ('acd') $langues = 'français, allemand et russe'
    if ($lg_tab == 1) {$langues = $tab[0];} // si id_langue ne contient qu'une seule lettre
     
    else {$langues = (implode(", ", array_slice($tab,0,count($tab) - 1)) . ' et ' . $tab[count($tab) - 1]);}
     
    return $langues;
    }
    ?>

  3. #23
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    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
    <?php
    require_once 'connectbdd.php';
    $ids = array('a', 'c', 'd');
    $langues = donne($ids);
     
    function donne($ids) {
        $params = implode(',', $ids);
        $sql = "SELECT nom_langue FROM langues WHERE langue_id IN ($params)";
        $resultat = mysql_query($sql) or die('Erreur de sélection dans la base de données '.mysql_error());
        $noms = array();
        while($row =  mysql_fetch_array($resultat)) $noms[] = $row[0];
        // Ici la suite de la fonction qui est en cours d'écriture ! Le but
        // étant de renvoyer une chaîne $langues qui sera égale à 
        // "français, allemand et russe" dans le cas ou id_langue = ('acd')
        return $myString;
    }
    ?>
    Plusieurs choses :
    - la requête étant très spécifique, passer le nom de la table en paramètre me semble superflu.
    - La gestion des paramètres en tableau est plus simple et plus claire.
    - La gestion des paramètres en tableau permet de faire une seule requête, donc une économie substancielle des performances.

    --- edit ---
    Et avec la réponse du saboteur dans ton autre sujet, ta fonction sera finie.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  4. #24
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Suite...
    La requête n'est pas spécifique !

    Le nom de la table est passé en paramètre car j'ai le même problème avec la table 'régions' ou il y a 22 régions !

    Attention tu modifies mon paramètre id_langue = ('acd')
    tu en fais : $ids = array('a', 'c', 'd');

    l'id_langue passé en paramètre n'est pas un tableau mais une chaîne de caractères !

    Du coup tu me poses une nouvelle colle ! Transformer id_langue qui est une chaîne ('acd') en tableau ('a', 'c', 'd')!

    Tu me dis : "La gestion des paramètres en tableau permet de faire une seule
    requête, donc une économie substancielle des performances."

    Oui j'avais vu que tu ne fais qu'un seul SELECT. Effectivement le temps de traitement devrait en être sensiblement raccourci.
    Je vais essayer de l'adapter... Merci encore (To be continued)...

    Un petit coup de main pour la transformation de id_langue en tableau ?

  5. #25
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par pasc06 Voir le message
    Un petit coup de main pour la transformation de id_langue en tableau ?
    D'où provient cette chaîne de caractères ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #26
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Une table
    D'une autre table de ma base de données qui est remplie par un formulaire. Les champs "langues" et "régions" sont renseignés grâce à des listes à choix multiples.

    En fait j'ai fait ça car au départ j'avais créé 8 champs pour les langues (id_langue_1, id_langue_2, etc) et 22 champs pour les régions (id_region_1, id_region_2, etc). Donc 30 champs en tout, mais les temps d'écriture dans la base était du coup devenus excessivement longs...

    Alors j'ai eu l'idée de supprimer les 30 champs et les remplacer par 2. Ca a effectivement accéléré les temps d'écriture dans ma base.

    Donc par exemple dans ma base le champ langues peut avoir pour valeur 'abh', et le champ régions 'acghiklm'. J'ai choisi des lettres car pour le champ régions après le nombre 10 le découpage devenait difficile ! J'aurais par exemple le champ regions égal à 1241113141822 ! Heureusement le nombre de régions françaises est inférieur au nombre de lettres de l'alphabet !

    Il me restait ensuite à 'décortiquer' ces chaînes de caractères à l'aide d'une fonction pour les afficher sous la forme : français, anglais et allemand

    ou alors : Alsace, Bourgogne, Bretagne et Ile-de-France

    Il y avait peut-être sans doute une autre manière de procéder mais je suis débutant je fais avec ce que je peux !

    Un petit coup de main pour la transformation de id_langue en tableau ?
    Je voudrais tester ta méthode

  7. #27
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Du coup, si c'est stocké directement en chaîne, peut-être que ta méthode peut le faire.
    Sinon, pour la transformation en tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $myString = 'acd';
    $myTableau = explode('', $myString);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. ERREUR Undefined offset dans une boucle
    Par xounet dans le forum Langage
    Réponses: 7
    Dernier message: 08/05/2014, 11h08
  2. Réponses: 2
    Dernier message: 05/05/2008, 22h19
  3. ERREUR D INSERE DANS UN TABLEAU A PARTIR DE JTextField
    Par fatimazahrazaidi dans le forum JDBC
    Réponses: 1
    Dernier message: 06/04/2008, 18h15
  4. Réponses: 1
    Dernier message: 28/01/2008, 16h33
  5. erreur Undefined offset
    Par wbagg2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/12/2005, 14h16

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