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 :

Envoyer un code javascript avec apostrophes [PHP 5.1]


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Envoyer un code javascript avec apostrophes
    Bonjour,
    Dur dur de formuler mon titre,
    Un php (appelé par AJAX en autocomplémentation)
    renvoie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nom="D'AVINO Isabelle"
    $java="<li  onClick=\"Capter('".$nom."');\">".$nom."</li>";
    echo $java;
    je recois bien dans la liste de choix, D'AVINO Isabelle
    mais si je clic dessus aucune action
    le code reçu est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li  onClick="Capter('D'AVINO Isabelle');">D'AVINO Isabelle</li>
    j'ais testé plusieurs syntaxes mais impossible de trouver
    auriez vous une solution ?
    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    utilise addslashes

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    utilise addslashes
    Merci de ta réponse,

    Oui mais dans AJAX un php fait un echo qui reviens directement dans javascript, lequel l'envoie dans le DIV !
    alors l'utilisateur aura le slashe ... si non c'était tout simple

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par christele_r Voir le message
    Merci de ta réponse,

    Oui mais dans AJAX un php fait un echo qui reviens directement dans javascript, lequel l'envoie dans le DIV !
    alors l'utilisateur aura le slashe ... si non c'était tout simple
    t'es sur ?, parce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log('D\'AVINO Isabelle');
    va rendre : D'AVINO Isabelle

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par christele_r
    alors l'utilisateur aura le slashe
    Oui, c'est d'ailleurs précisément le but
    L'antislash est un caractère d'échappement en JavaScript aussi
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Invité
    Invité(e)
    Par défaut
    Vous êtes trop TOP TOP vous deux
    Mais que je suis bête pas besoins de le faire sur l'affichage !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    if(strlen($pseudo) >0)
      {
      $LeBuf="";
      $req = $bdd->query('SELECT nompren FROM apod_cli WHERE nompren  LIKE "'.$pseudo.'%" LIMIT 10');
       while ($row = $req->fetch())
        {
        $rowx2=addslashes($row['nompren']);
        $rowx=$row['nompren'];
        $LeBuf .="<li  onClick=\"Capter('".$rowx2."');\">".$rowx."</li>";
        }
      echo $LeBuf;
      }
    ?>
    ainsi echo $leBuf va afficher $rowx sans antislash
    mais dans la commande Javascript il y sera ($rowx2)
    Et en prime lors du clic javascript va me renvoyer le nom nettoyé de son slash c'est trop beau !
    Mille merci stealth35 et bovino
    Christele

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    oublie pas de faire un quote sur $pseudo, et un foreach pour parcourir ton statment

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    oublie pas de faire un quote sur $pseudo, et un foreach pour parcourir ton statment
    A oui, la sécuritée !! tu as bien raison
    Mais ton lien me dit (en plus php.net c'est la bible)
    Si vous utilisez cette fonction pour construire des requêtes SQL, vous êtes vivement invités à utiliser PDO::prepare() pour préparer les requêtes SQL avec des paramètres liés au lieu d'utiliser PDO::quote() pour interpréter les entrées utilisateur dans la requête SQL. Les requêtes préparées avec des paramètres liés sont non seulement plus portables, plus souples et plus sécuritaires, mais bien plus rapides à exécuter que d'interpréter les requêtes, étant donné que les côtés client et serveur peuvent mettre en cache une version compilée de la requête.
    Q'en penses-tu ? mais tu parles sans doute des préparations, variable par variable, avant l'exec ? genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $prep->bindValue(1, 'item 1', PDO::PARAM_STR);
    $prep->bindValue(2, 12.99, PDO::PARAM_FLOAT);

    Et pourquoi le foreach pourquoi

    Alors j'ajouterais la récente discution sur le VRAIS PREPARE
    Mode sans émulation (vrai requête préparée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $dbh = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root');
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
     
    $stmt = $dbh->prepare('SELECT * FROM `exemple` WHERE `id` > :id');
    $stmt->execute(array('id' => 1));

    J'en profites lachement, que vaut'il mieux ?
    faire un fetchAll et foreach
    ou un fetch et while
    ça ce serait sympa de me dire votre avis.

    Christele
    Dernière modification par Invité ; 12/10/2011 à 00h49.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par christele_r Voir le message
    que vaut'il mieux ?
    faire un fetchAll et foreach
    ou un fetch et while
    ça ce serait sympa de me dire votre avis.

    Christele
    C'est suivant tes besoins. fetch et while te permet de créer un tableau de récupération totalement sur mesure. Si pas besoin, autant utiliser fetchAll qui par ailleurs possède aussi des options pour personnaliser le résultat.

    Sinon entre requêtes préparées ou non, c'est un vaste sujet.

    Par construction les requêtes préparées sont plus sécurisées, cela dit difficile de trouver un exemple où l'utilisation de quote pose un problème de sécurité.

    Niveau rapidité les requêtes préparées sont optimisées pour faire de multiples requêtes où seules les variables changent (exemple updates multiples). Pour une seule requête avec paramètre utilisateur, on ne gagne rien en rapidité à utiliser des requêtes préparées, c'est même un poil plus long.

    Donc dans ton cas, utiliser des requêtes préparées serait surtout utile en termes de portabilité (si tu voulais changer de type de bdd tu n'aurais pas à modifier ton code - ou moins de chances d'avoir à le faire - si le driver de ta nouvelle base de données n'acceptait pas la fonction quote).

    Après chacun a ses habitudes. Certains utilisent systématiquement des requêtes préparées, d'autre panachent quote et requêtes préparées si requêtes multiples.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    C'est suivant tes besoins.etc..
    Merci a toi d'avoir pris le temps de répondre si complétement.
    En fait j'avais un peut l'intuition de cela, Donc j'en reste a mon bon vieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //====mysql===========
    while ($row=mysql_fetch_array($result)) 
    //===PDO=======
    while ($donnees = $req->fetch())
    vaiment une question de routine !

    Pour ce qui est du vrais PREPARE, il y a tout de même une vrais protection,
    et dis-t'on surtout avec le vrais prépare qui au regard des logs SQL garantie la séparation requette donnée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    $dbh = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root');
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    Merci beaucoup a toi
    Christele
    Dernière modification par Invité ; 12/10/2011 à 23h16.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    PDO::ATTR_EMULATE_PREPARES est par défaut sur true pour préserver les performances (mise en cache des requêtes préparées) et compatibilité avec les drivers actuels courants. Pour tirer avantage de mettre sur false il faut des drivers récents mais tu pourrais avoir des problèmes de portabilité sur certains serveurs mutualisés.
    Ma position est de laisser les réglages par défaut en attente de plus de documentation sur le sujet (par prudence quand je ne suis pas sûr je ne touche à rien). D'ailleurs logiquement ce paramètre sera sans doute à false par défaut dans les futures versions quand tout sera prêt pour pouvoir en bénéficier sans problème.
    Tu auras peut-être plus de précisions si tu poste un sujet dédié à cette question dans le forum PDO...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci a toi, tu as raison je vais ouvrir le débat sur ce sujet.
    En attendant tu me donnes déjas une sérieuse information !
    A++ Christele

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

Discussions similaires

  1. code javascript avec mozilla firefox
    Par jesslegende dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2011, 15h35
  2. Envoyer un tableau javascript avec AJAX
    Par matteli dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 18/10/2008, 15h20
  3. Code javaScript avec IExplorer OU FireFox
    Par fatenatwork dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/03/2008, 14h02
  4. Code javaScript avec IExplorer OU FireFox
    Par fatenatwork dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/03/2008, 14h50

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