Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2011, 11h29   #1
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
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 :
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 :
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 11h46   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
utilise addslashes
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 13h19   #3
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 13h24   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
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 :
console.log('D\'AVINO Isabelle');
va rendre : D'AVINO Isabelle
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 13h29   #5
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 16h14   #6
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Vous êtes trop TOP TOP vous deux
Mais que je suis bête pas besoins de le faire sur l'affichage !
Code :
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 16h21   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
oublie pas de faire un quote sur $pseudo, et un foreach pour parcourir ton statment
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 17h45   #8
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
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)
Citation:
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 :
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 :
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 20h58   #9
Membre Expert
 
Inscription : septembre 2010
Messages : 1 244
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 244
Points : 1 566
Points : 1 566
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.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/10/2011, 23h01   #10
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
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 :
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 :
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 19h36   #11
Membre Expert
 
Inscription : septembre 2010
Messages : 1 244
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 244
Points : 1 566
Points : 1 566
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...
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/10/2011, 09h55   #12
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h48.


 
 
 
 
Partenaires

Hébergement Web