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 :

[PHP-JS] étrange autocompletion capricieuse


Sujet :

Langage PHP

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut [PHP-JS] étrange autocompletion capricieuse
    Bonjour,

    Je fais de l'autocompletion sur un champ dans mon formulaire.

    Je fais l'autocompletion sur l'id de la table et cela fonctionne bien.

    Je change dans mon php de chargement de ma page d'autocompletion la contenu de ma requete.

    Je passe de ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = "SELECT DISTINCT id_maj
    		FROM ".$prefixe_table."`maj_etat_civil`
    		WHERE id_maj like '$debut%'
    		AND `id_trt`>0 AND `id_trt`<5
    		ORDER BY id_maj";
    Le test de mon programme d'autocompletion donne ceci
    <options>
    <br/>
    <b>Notice</b>
    : Use of undefined constant DB_FETCHMODE_ARRAY - assumed 'DB_FETCHMODE_ARRAY' in

    <b>
    c:\program files\easyphp1-8\www\gestelle\admin\ajaxmajeurs.php
    </b>
    on line
    <b>25</b>
    <br/>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option>
    <option>10</option>
    </options>
    à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = "SELECT DISTINCT maj_nom
    		FROM ".$prefixe_table."`maj_etat_civil`
    		WHERE maj_nom like '$debut%'
    		AND `id_trt`>0 AND `id_trt`<5
    		ORDER BY maj_nom";
    Dans ce cas, Le test de mon programme d'autocompletion donne cela


    <options>
    <br/>
    <b>Notice</b>
    : Use of undefined constant DB_FETCHMODE_ARRAY - assumed 'DB_FETCHMODE_ARRAY' in

    <b>
    c:\program files\easyphp1-8\www\gestelle\admin\ajaxmajeurs.php
    </b>
    on line
    <b>25</b>
    <br/>
    <option/>
    <option>Aa</option>
    <option>Aaa</option>
    <option>ABED</option>
    <option>ACARY</option>
    <option>ACHACHE</option>
    <option>ACHARD</option>
    <option>ACHARLES</option>
    <option>ACHART</option>
    <option>ADDA</option>
    </options>
    Le changement simple du champ de sélection, fait que l'affichage du résultat de mon autocompletion ne fonctionne plus.

    Le type de champ qu'il soit "int" ou "varchar" importe peu me semble-t-il.

    Merci pour vos lumières

  2. #2
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    euh...je vois pas le probleme
    tes 2 listes semblent complétées non?
    Je n'ai pas compris ton souci...

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oui mon problème est que ce n'est pas l'autocompletion qui ne fonctionne pas, mais le simple changement de champ dans la requête fait que son affichage dans le formulaire ne fonctionne plus

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Déjà...

    Probleme :
    Citation Envoyé par lodan
    Use of undefined constant DB_FETCHMODE_ARRAY - assumed 'DB_FETCHMODE_ARRAY' in
    Solution : http://fr3.php.net/manual/fr/languag...es.array.donts

    Edit : je ne vois pas non plus ton probleme a part ca... c'est pas clair du tout

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci Fkadnad,

    Mon code était incomplet sur le post, mais il y avait bien sûr ceci juste après la définition de la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Initialisation de la lecture avec génération d'un tableau ayant le nom du champ comme index
    $db->setFetchMode(DB_FETCHMODE_ARRAY);
    $requete = $db->getAll($req);
    // Message d'erreur
    if (PEAR::isError($requete))
    {
        die($requete->getMessage());
    }
    C'est de l'accès PEAR. Le message d'erreur est bien géré.
    Pour ce qui est de l'assume sur "DB_FETCHMODE_ARRAY", j'ai juste mis des "'" et je n'ai plus de message.

    Pour le reste effectivement, je ne vois pas ce qui change pour que le résultat que l'on voit ne s'affiche pas sous prétexte d'un simple changement de nom dans la requête.

    Merci

  6. #6
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    mais le simple changement de champ dans la requête fait que son affichage dans le formulaire ne fonctionne plus
    à ce moment là, donne le code php correspondant à la création de ton champs de sélection STP
    tu as un <option/> qui traine dans le second exemple qui n'apparaît pas dans le premier...sinon, je vois pas

  7. #7
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Voici le code :

    La partie javascript d'appel de l'autocompletion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script type="text/javascript">
    window.onload = function(){initAutoComplete(document.getElementById('table'),
    document.getElementById('champ-texte'),document.getElementById('bouton-submit'))};
    </script>
    La partie html de saisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<form name="maj" id="table" action="{$current_page}" method="post">
    	<p>
    			<label for="majeur" title="Veuillez choisir majeur">Majeur :</label>
                <input type="text" name="champ-texte" id="champ-texte" size="30" autocomplete="off" value="{$user_dossiers.id_maj|getMajeur}"
                title="Veuillez choisir le Majeur" onfocus="this.className='focus';" onblur="this.className='normal';">
    			<a href="#" class="aide" title="Saisissez le début du nom, puis choisissez.">
    			<img src="{#prefixe_site#}images/icon_help.gif" alt="Saisissez le début du nom, puis choisissez."></a>
    		</p>
    Le <option/> c'est pour un enregistrement à blanc dans ma base, je l'ai supprimé et il n'apparaît plus.

  8. #8
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    et tu n'as pas une erreur javascript qui apparaît (outils/console javascript sous firefox)?
    c'est vrai que c'est bizarre...

  9. #9
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Non, la console javascript reste vide

  10. #10
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    La différence, est dans la longueur de chaque ligne de résultat et dans le type.

    Du fait que l'on passe lorsque c'est "id_maj", il se pourrait que l'on ne passe pas lorsque c'est "maj_nom". Ce qui est peu probable compte tenu du résultat de l'exécution du php seul.

    Mais il ne faut rien négliger.

    Dès que je mets un "echo" dans mon programme, le contrôleur "xml" se met en rogne.

    Voici mon php d'autocompletion

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    header('Content-Type: text/xml;charset=utf-8');
    echo(utf8_encode("<?xml version='1.0' encoding='UTF-8' ?><options>"));
     
    if (isset($_GET['debut'])) {
        $debut = utf8_decode($_GET['debut']);
    } else {
        $debut = "";
    }
    $debut = strtolower($debut);
     
    // Description de la requête de recherche de la table
    $req = "SELECT DISTINCT id_maj
    		FROM ".$prefixe_table."`maj_etat_civil`
    		WHERE id_maj like '$debut%'
    		AND `id_trt`>0 AND `id_trt`<5
    		ORDER BY id_maj";
    // Initialisation de la lecture avec génération d'un tableau ayant le nom du champ comme index
    $db->setFetchMode('DB_FETCHMODE_ARRAY');
    $requete = $db->getAll($req);
    // Message d'erreur
    if (PEAR::isError($requete))
    {
        die($requete->getMessage());
    }
     
    function generateOptions($debut,$requete) {
        $MAX_RETURN = 10;
        $i = 0;
        foreach ($requete as $element) {
            if ($i<$MAX_RETURN && substr($element[0], 0, strlen($debut))==$debut) {
     
                echo(utf8_encode("<option>".$element[0]."</option>"));
                $i++;
            }
        }
    }
     
    generateOptions($debut,$requete);
     
    echo("</options>");
    ?>
    Je reste dans l'étrange

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

Discussions similaires

  1. [2.x] [Routage] app_dev.php : bogue étrange
    Par jabaroff dans le forum Symfony
    Réponses: 6
    Dernier message: 31/03/2013, 04h35
  2. Silverlight et Php : comportement étrange
    Par boudit dans le forum Silverlight
    Réponses: 4
    Dernier message: 12/07/2011, 11h10
  3. erreur php très étrange suite changement serveur
    Par taka10 dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2007, 15h18
  4. Php: str_replace étrange...
    Par Abused dans le forum Langage
    Réponses: 13
    Dernier message: 23/02/2006, 16h24
  5. [Cookies] Quand PHP rhyme avec étrange... .
    Par JSuper_Kitten dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2005, 23h46

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