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

JavaScript Discussion :

erreur javascript pour modifier select avec tableau PHP


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut erreur javascript pour modifier select avec tableau PHP
    Bonjours, j'ai écrits une fonction PHP qui transmet un tableau à Javascript en le remplissant. Puis place dans un select(2) une partie du tableau quand le select(1) change. Cependant, Mon navigateur (Internet Explorer) m'indique une erreur :
    Ligne: 26
    Caractère: 11
    Erreur: 'randsr[...].length' a la valeur Null ou n'est pas un objet.
    Code: 0
    Ma fonction php :
    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
    function listrayonsrayon()
    {
     
    require("identsql.php");
    mysql_connect($dbhost,$dbuser,$dbpass) or die("La Connexion a échouée");
     mysql_select_db($dbbase) or die("La Base $dbbase n'existe pas");
      $requete="SELECT nom,rayon FROM m_srayon ORDER BY rayon ASC";
     $result=mysql_query($requete);
     $p=mysql_result($result , 0 , "rayon");
     $o=mysql_num_rows($result);
     $q=0;
     $r=0;
     for($i=0;$i<$o;$i++)
         {
        if(mysql_result($result , $i , "rayon")!=$p)
            {
            $q=0;
            $r++;
            $p=mysql_result($result , $i , "rayon");
            } 
        echo "\n randsr[".$r."][".$q."] ='".mysql_result($result , $i , "nom")."'; \n randr[".$r."] = '".mysql_result($result , $i , "rayon")."'; \n";
        $q++;
     
        }
    mysql_close();
    }
    Mon code javascript qui est entre mes balises head:
    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
    <script language="javascript">
    var randsr= new Array();
    var randr= new Array();
    <?php listrayonsrayon(); ?>
    function mlrsr()
    {
    var lavaleurr= document.getElementById('leraayon').options[document.getElementById('leraayon').selectedIndex].value;
    for (var i=0; i<randr.length; i++)
        {
        if(randr[i]==lavaleurr) lavaleurr = i;
        }
     
     
    for (i=0; i < randsr[lavaleurr].length; i++)
    { 
    document.getElementById('lesraayon').options[i] = new Option(randsr[lavaleurr][i]);
    }
    }
    </script>
    Et mes select du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <select name="leraayon" onchange="mlrsr()" id="leraayon">
              <?php listrayon() // creer des options et fonctionne bien?>
     
            </select>
     
    <select name="lesraayon" id="lesraayon">
            </select>
    Quand j'affiche la page dans mon navigateur et que j'affiche le code source il me donne :
    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
    <script language="javascript">
    var randsr= new Array();
    var randr= new Array();
     
     randsr[0][0] ='Pantalon'; 
     randr[0] = 'Coté Femme'; 
     
     randsr[1][0] ='Ballerines & Mocasins'; 
     randr[1] = 'Espace Chaussure'; 
     
     randsr[2][0] ='Pantalon'; 
     randr[2] = 'Espace Homme'; 
    function mlrsr()
    {
    var lavaleurr = document.getElementById('leraayon').options[document.getElementById('leraayon').selectedIndex].value;
    for (var i=0; i<randr.length; i++)
        {
        if(randr[i]==lavaleurr) lavaleurr = i;
        }
     
     
    for (i=0; i < randsr[lavaleurr].length; i++)
    { 
    document.getElementById('lesraayon').options[i] = new Option(randsr[lavaleurr][i]);
    }
    }
    </script>
    Je ne vois pas d'où vient l'erreur, PHP faire bien sont travail. Mais Javascript ...???

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    A oui ! J'allais oublier.
    Pour internet explorer la ligne 26 c'est celle ou il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    for (i=0; i < randsr[lavaleurr].length; i++)
    ...
    aidez-moi svp !!!

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    Je ne trouve pas le PB. Aidez-moi svp !!!

  4. #4
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    randsr semble avoir une seule dimension et non deux...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    Donc pour une déclaration à deux dimension je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var randsr = new Array()();
    Non ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    La syntaxe semble être bonne, maintenant la même erreur pour randr
    Erreur: 'randr.length' a la valeur Null ou n'est pas un objet.
    pourtant c'est bien un tableau à une dimension cette fois et est déclaré correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var randsr= new Array()();
    var randr= new Array();

  7. #7
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var randsr= new Array();
    randsr[0]= new Array();
    randsr[1]= new Array();
     
     
    ...
    var randr= new Array();

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    J'ai fais mes déclarations comme il faut. 'ai même optimisé le code. J'utilise un tableau au lieu de 2. Les valeurs de mon tableau à une dimensions sert d'indice pour mon tableau a deux dimension. Exemple : randsr["valeur_randr"].

    De plus, pour débogué javascript je viens de me pencher vers la console d'erreur de mozila (Internet explorer n'est pas très explcite pour cela).

    Bref, je me rends compte que maintenant il y a un beug avec certain caractères. J'ai enregistré dans un champ sur ma base de donnée MySQL "Coté Femme" à partir d'un formulaire. Quand je regarde dans phpMyAdmin, le "é" s'est transformé en "é" ( en entier ça fait "Coté Femme"). Dans Javascipt j'obtiens un autre résultat (un truc du genre "o\¤"). J'ai essayé des htmlentities etc.. mais rien n'y change. Donc j'ai modifier mon code et avoir un entier au lieu d'une chaine de caractère pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var lavaleurr = document.getElementById('leraayon').options[document.getElementById('leraayon').selectedIndex].value;
    Dans mon for en PHP j'ai maintenant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(mysql_result($result , $i , "rayon")!=$p)
      {
      $q=0;
      $r++;
      $p=mysql_result($result , $i , "rayon");
      }
      echo "\n"; 
     echo 'randsr["'.mysql_result($result , $i , "rayon").'"]['.$q.'] ="'.stripslashes(mysql_result($result , $i , 'nom')).'";';
     $q++;
    }
    et ma fonction javascript :
    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
    <script language="javascript">
    var randsr= new Array();
    randsr[0] = new Array();
     
    <?php listrayonsrayon(); ?>
    function mlrsr()
    {
    var lavaleurr = document.getElementById('leraayon').options[document.getElementById('leraayon').selectedIndex].value;
     
    for (i=0; i < randsr[lavaleurr].length; i++)
    { 
    document.getElementById('lesraayon').options[i] = new Option(randsr[lavaleurr][i]);
    }
    }
    </script>
    Pour info listrayonsrayon me donne
    randsr["1"][0] ="Pantalon";randsr["2"][0] ="Pantalon";
    Mozilla me dit que randsr['1'] n'est pas une propriété.
    Et quand j'appel mlrsr(), (depuis onchange="mlrsr()") il me dit que randsr[lavaleurr] n'est pas une proprièté (pour ie: 'randsr[...].length' a la valeur Null ou n'est pas un objet.).

    Que faire tellement je butte dessus depuis lundi, je suis à cours d'idée.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    Pa la peine de se casser la tête à lire tout le code. C'est un problème d'allocation de mon tableau Array que j'ai déclaré.
    Il ya pas une methode plus dynamique pour l'allocation de mon tableau ?
    Car dans mon cas on ne connait pas à l'avance la taille de la deuxieme dimension de mon tableau. il peux contenir 0, 1,2,... ou 100 valeurs à la fois.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    La solution que j'ai trouvé pour déclarer mon Array à 2 dimensions de façon PSEUDO dynamique est de faire un randsr[i] = new Array() avant chaque affectation de la deuxieme colonne dans mon for. Et la il ne me dit plus que "randsr[...].length est nul ou n'est pas un objet"

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

Discussions similaires

  1. [MySQL] aide pour connection mysql avec du php sur mon site web
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/09/2007, 00h30
  2. Initialisation Select avec Ajax (php)
    Par VooDooNet dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/08/2007, 09h45
  3. [PHP-JS] Javascript pour pop-up dans script php.. ?
    Par asmrct dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/01/2007, 15h16
  4. modifier option select avec tableau
    Par calitom dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/11/2006, 12h12
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h51

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