Désactiver la sélection d'un texte [Résolu]

Signaler
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007
-
GanJasTeR
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007
-
Bonjour.

J'aimerais obliger les visiteurs de mon site à rentrer un code de confirmation se trouvant sur la page d'inscription.
Généralement ce code est une image créee dynamiquement en PHP.

Pour faire simple j'ai pensé qu'un texte étant impossible de sélectionner donc de copier était beaucoup plus facile à réaliser.

J'ai une ébauche :)
Toute personne ayant déjà voulu faire ca à déja vu ce code :p

function disableselect(e){
   return false
  }
  function reEnable(){
   return true
  }
  document.onselectstart=new Function ("return false")
  if (window.sidebar){
   document.onmousedown=disableselect
   document.onclick=reEnable
  }

Mon problème est que ce code désactive la sélection de tout le texte de ma page or j'aimerais qu'il s'occupe d'un texte spécifique.

Vous allez me dire de mettre ce texte dans un div et de remplacer document par document.getElementById mais cela ce marche pas il ne reconnais pas l'id que je lui donne.

Si quelqu'un a une solution je suis preneur :)
Merci ^^

15 réponses

Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
tu n'as pas du comprendre ce que j'ai écrit
( mais je ne me comprend pas parfois moi-même, alors .... )
je me cite :

met l'ordre javascript après la balise ( ou la balise avant si tu préfères :-)) )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 <head>
  <title>Titre</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" media="screen" type="text/css" title="code" href="code.css" />
 </head>
 
<form method="post" action="">

</form>
 
  <script type="text/javascript">
  function disableselect(e){
   return false
  }
  function reEnable(){
   return true
  }
  document.getElementById("code_pass").onselectstart=new Function ("return false")
  if (window.sidebar){
   document.getElementById("code_pass").onmousedown=disableselect
   document.getElementById("code_pass").onclick=reEnable
  }
  </script>

 
</html>

ou

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 <head>
  <title>Titre</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" media="screen" type="text/css" title="code" href="code.css" />
 </head>
 
<form method="post" action="">

</form>
 
 
</html>




<hr />                                    Cordialement                Bul        
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
Bonjour,

    °     ce code désactive la sélection de tout le texte de ma page ,
           j'aimerais qu'il s'occupe d'un texte spécifique.

                 onselectstart sur l'élement pas sur le document.
   °      il ne reconnais pas l'id
                 franchement aucune raison... mais sans le moindre petit
                 bout de code :


<hr />                                Cordialement               Bul    
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

   onselectstart sur l'élement pas sur le document.




Voudrais tu dire document.getElementById("").onselectstart ?
Cela ne marche pas non plus.
En effet je n'ai pas montré tout le code car il comporte pas mal de PHP et j'ai pensé que sur ce forum ce n'était pas approprié. Enfin le voici

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <script type="text/javascript">
  function disableselect(e){
   return false
  }
  function reEnable(){
   return true
  }
  document.getElementByName("codepass").onselectstart=new Function ("return false")
  if (window.sidebar){
   document.getElementByName("codepass").onmousedown=disableselect
   document.getElementByName("codepass").onclick=reEnable
  }
  </script>
 </head>
 
 <?php
 function random($car) {
  $string = "";
  $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  srand((double)microtime()*1000000);
  for($i=0; $i<$car; $i++) {
   $string .= $chaine[rand()%strlen($chaine)];
  }
  return $string;
 } 
 $_SESSION['codepass'] = random(8);
 echo'';
 ?>
 
</html>

Il s'agit de la page code.src.php que j'inclu dans la page membres.php dont voici un extrait :

  . '<tr><td><label>Mail :</label></td><td></td></tr>'
  . '<tr><td colspan="2">'
  require('includes/code.src.php')
  .'<tr><td><label>Code :</label></td><td></td></tr>';

Voilà si le problème parait plus expliqué tant mieu
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

Désolé j'ai copier coller sans penser au fait qu'il s'agissait d'une version du même problème dans le fond mais pas dans la forme :)

Voici la partie modifiée dans le fichier code.src.php (juste avant les fermetures et </html> :

 $_SESSION['codepass'] = random(8);
 echo'
<?php echo $_SESSION['codepass']; ?> />';

Désolé pour le double post :)
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
il vaudrait mieux donner la page htmml générée que le php,
mais déjà tu utilise
document.getElementByName


utilise document.getElementById("id_voulu") en mettant dans la balise



<hr />                                    Cordialement                Bul            
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
on peut aussi mettre onselectstart dans cette balise
"input text", directement...
<hr />                                Cordialement        Bul        
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

Non cela ne marche toujours pas. J'ai tout insérer sur une seule page ; voici ma page de récupération de mot de passe :

function pass(){
 open_table('Récupération de votre pass');
 ?>
 <script language="Javascript 1.2">
  <!--
  function disableselect(e){
   return false
  }
  function reEnable(){
   return true
  }
  document.getElementById("codepass").onselectstart=new Function ("return false")
  if (window.sidebar){
   document.getElementById("codepass").onmousedown=disableselect
   document.getElementById("codepass").onclick=reEnable
  }
  //-->
  </script>
 <?php
 session_register("codepass");
 if(isset($_POST['lostpass'])){
  echo $_SESSION['codepass'];
 }
 else{
  echo''
  . 'Pour récupérer votre mot de passe, rentrez votre adresse mail et copiez les 8 caractères dans le champ prévu à cet effet.

'
  . '<form method="post" action="membres.php?act=pass" onsubmit="return(verif_code(this))">'
  . ''
  . '----
<label>Mail :</label>, , '
  . '----
';
  $_SESSION['codepass'] = random(8);
  ?>" /><?php
  echo'----, <label>Code :</label></td>, '
  . '----
'
  . '
</form>';
 }
 close_table(); 
}

Voila je pense que cette tentative est logiquement forcée de marcher...mais non :)
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
j'insiste : mais la page générée ! pas le php !



on ne sait pas ce que contiennent les variables, la base de données...

et pour ici, malgré tout, tu tente d'accéder à un élément qui n'existe pas encore.
n'oublies pas que le html,javascript... interprète les lignes de la page
les unes après les autres, en séquence de la 1ère à la dernière.
quand tu fais document.getElementById... la balise n'est pas encore créée.
met l'ordre javascript après la balise ( ou la balise avant si tu préfères :-)) )
<hr />                                    Cordialement                Bul        
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
il faut lire "les navigateurs interprètent le html/javascript..."
<hr />                                            Cordialement                Bul            
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

Bon j'ai fait une page a par en html contenant le problème simplifié :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 <head>
  <title>Titre</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" media="screen" type="text/css" title="code" href="code.css" />
  <script type="text/javascript">
  function disableselect(e){
   return false
  }
  function reEnable(){
   return true
  }
  document.getElementById("code_pass").onselectstart=new Function ("return false")
  if (window.sidebar){
   document.getElementById("code_pass").onmousedown=disableselect
   document.getElementById("code_pass").onclick=reEnable
  }
  </script>
 </head>
 



<form method="post" action="membres-pass.html">

</form>
 




 
</html>

Verdict cela ne fonctionne toujours pas :)
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
il y a bien aussi l'attribut unselectable="on"
( dans la balise ) mais exclusif IE je crois.
<hr />                                    Cordialement            Bul        
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
30
j'ai oublié de dire aussi :
et que se passe-t-il pour les utilisateurs qui interdisent JavaScript ?
ce n'est pas à négliger : ils sont plus nombreux que ceux qui utilisent
FireFox par exemple ( enfin, aujourd'hui )
<hr />                                            Cordialement              Bul            
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

Merci beaucoup les deux marchent et désolé de ne pas avoir été rapide à la compréhension
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

Et bien pour ces rares élus ils pourront copier coller le code de confirmation ^^

Ce n'est pas dramatique le principe est d'éviter que des bots spam mon site au niveau des inscriptions.

Donc tant qu il y a le code tout va bien après impossible à sélectionner est un bonus pour montrer que le webmaster à réfléchi (et s'est fait aidé merci encore ;) )

Merci :)
Messages postés
27
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
31 mai 2007

Et bien pour ces rares élus ils pourront copier coller le code de confirmation ^^

Ce n'est pas dramatique le principe est d'éviter que des bots spam mon site au niveau des inscriptions.

Donc tant qu il y a le code tout va bien après impossible à sélectionner est un bonus pour montrer que le webmaster à réfléchi (et s'est fait aidé merci encore ;) )

Merci :)