Champs Cochés et Combobox

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Champs Cochés et Combobox

par Photographiquement Vôtre » 23 janv. 2008, 17:24

Finallemnt je suis passé par PHP car je n'y arrivais pas

Merci de votre aide

par d0m » 23 janv. 2008, 16:47

En javascript, le type tableau a un attribut pour savoir ça.
Une simple recherche google avec les mots clé javascript taille tableau et la réponse est là.
Prends le temps de chercher

par Photographiquement Vôtre » 23 janv. 2008, 16:30

Et comment connait t-on la taille ?

par d0m » 23 janv. 2008, 16:22

il faut déjà mettre l'instruction

Code : Tout sélectionner

return false;
en dehors de la boucle for.

le principe est le suivant :
- tu va chercher les cases à cocher
- si il ya au moins une case à cocher c'est à dire la taille du tableau est supérieur à 0 alors tu renvoie true
- sinon tu renvoie false

Même pas besoin de boucle for en fait, il suffit de tester la taille.

par Photographiquement Vôtre » 23 janv. 2008, 16:16

Non je passe à la page indiquée dans le formulaire.

Et je n'ai pas de message en bas à gauche !

par d0m » 23 janv. 2008, 16:04

Je ne sais pas si je t'ai bien compris mais j'ai fait cela sans grand effet
C'est à dire? rien affiché en alerte?
pas d'erreur javascript?
Sous IE par exemple tu as en bas de la fenêtre à gauche un point d'exclamation qui s'affiche avec erreur javascript.
tu cliques dessus et il t'affiche le message d'erreur avec la ligne concernée.

par Photographiquement Vôtre » 23 janv. 2008, 15:51


Dans ta boucle for tu fais un test sur "i<tableauCases" or tableauCases est un tableau contenant tes cases (elements['selection[]']) .. il te faut tester non pas le tableau, mais la taille de celui-ci.

En cas d'erreur javascript, test tes valeurs, colle des alert de partout, regarde celles qui sont exécutés et celles qui ne le sont pas, ça permet de facilement identifier les lignes qui posent problème :)
Je ne sais pas si je t'ai bien compris mais j'ai fait cela sans grand effet :
<head>

<script>

function verifierCases(formulaire)

{
var lignes = document.forms['form_tuto'].elements['nombre'].value;
var tableauCases = document.getElementById('form_tuto').elements['selection[]'];

for(i=0;i<lignes-1;i++){ 
    
    if(tableauCases[i].checked) 
    alert (tableauCases[i]);
      return true; 
  } 
  alert (tableauCases[i]);
  return false; 

}

</script>

</head
>

par Ryle » 23 janv. 2008, 15:12

Puisque tu as opté pour la solution javascript, je déplace dans le forum adéquat :)

par d0m » 23 janv. 2008, 15:04

Je ne t'ai pas donné un script tout prêt à l'emploi, il a surement des erreurs de syntaxe, etc
Maintenant à toi de debugguer la fonction javascript avec des alert bien placé pour voir ce qui s'execute et ce qui ne s'execute pas. De plus ton navigateur indique surement les erreurs javasript de la page lorsque tu cliques sur le bouton.

par Ryle » 23 janv. 2008, 15:03

Le script n'a pas nécessairement besoin d'être déclaré dans le head (c'est vrai que c'est plus propre). Il peut être n'importe où dès le moment où il a bien été déclaré au moment où on y fait appel :)

Dans ta boucle for tu fais un test sur "i<tableauCases" or tableauCases est un tableau contenant tes cases (elements['selection[]']) .. il te faut tester non pas le tableau, mais la taille de celui-ci.

En cas d'erreur javascript, test tes valeurs, colle des alert de partout, regarde celles qui sont exécutés et celles qui ne le sont pas, ça permet de facilement identifier les lignes qui posent problème :)

par Photographiquement Vôtre » 23 janv. 2008, 14:51

OK je vais la mettre en Head

Le pb justement est que je n'ai pas de message et que j'arrive directement sur la page valid_envoi_newsletter

par d0m » 23 janv. 2008, 14:16

Les fonctions javascript il faut les mettre dans le <head> du document HTML.

Ensuite il n'y a pas juste de fonctions javascript qui juste "ne marchent pas". Ta page renvoi surement une erreur javascript qui aide à comprendre d'où vient le problème.

De toute façon il ne faut pas juste compter sur le javascript, il faut une vérification php au cas où le javascript est désactivé.

par Photographiquement Vôtre » 23 janv. 2008, 14:03

OK Ryle j'ai essayé ta méthode mais cela ne marche pas

J'ai du merdé quelque part
<html>
<body>

<?php

include ("../Connexion/connection_news.php");	  

if(isset($_POST['soumettre']))  
{ 

if ( isset($_POST["sujet"])  && isset($_POST["message"])  )  
    {  
        $sujet = htmlspecialchars(stripslashes($_POST["sujet"]), ENT_QUOTES); 
        $message  = htmlspecialchars(stripslashes($_POST["message"]), ENT_QUOTES); 
 
 		  //$sujet = $_POST["sujet"]; 
 		  echo "$message";
 		 
 	      //$message  = $_POST["message"]; 

        if(empty($sujet))
        	{
	        echo "<h3 align=center><strong>Vous devez remplir le sujet</h3>";
	        }     
        
        if(empty($message)) 
        	{
	        echo "<h3 align=center><strong>Vous devez remplir le message</h3>";
	        echo '<p align="center"><a href="javascript:history.back(-1)">Retourner sur la Page Message</a></p>'; 
	        }         
          
        else 
        	{ 
	        
// 
			$sql= "SELECT abonneId, abonneEmail FROM tblabonne WHERE abonneStatut=1" ;

			$result = mysql_query($sql) or exit ('Erreur SQL !'.$result.'<br>'.mysql_error());
			
?>	

<script>

function verifierCases(formulaire){ 
  
  var tableauCases=document.getElementById('form_tuto').elements['selection[]']
  for(i=0;i<tableauCases;i++){ 
    
    if(tableauCases[i].checked) 
      return true; 
  } 
  
  
  return false; 
} 

</script>
		
			<form id="form_tuto" action="valid_envoi_newsletter.php" method="post" onsubmit="verifierCases(this)">>
 				<table align="center">
 					<tr>
 					<td><input type="text" size="44" name="sujet"  value="<? echo $sujet; ?>" ></td> 
 					
 					</tr>
 					<tr>
 					<td><input type="text"  name="corps" id="corps" rows="10"   cols="10" value="<? echo $message; ?>" ></td> 
 					</tr> 
 					<tr>	
<?php 				
		
//on met les valeurs de la table
			while ($valeur = mysql_fetch_array($result))
				{  		
?>
				<td><input type="checkbox" name="selection[]" value=<? echo " $valeur[abonneEmail]"; ?> ><? echo " $valeur[abonneEmail]"; ?></td> 
				
					</tr>
<?php
//fin du while
				}		
?>		


<tr>
	<td><input type="submit" value="envoi" name="envoi"></td> 
</tr>	
	</table>
</form>

<?php



//fin du else                 
        } 
         
        
        
//Fin Isset Sujet et Message        
    } 
//Fin Isset Soumettre        
}     
?> 

</body>
</html
>

par Ryle » 23 janv. 2008, 13:39

La fonction que d0m t'a indiqué est, comme il l'a spécifié, une fonction Javascript ........ :x

par Photographiquement Vôtre » 23 janv. 2008, 13:23

Merci

J'ai essayé mais cela ne marchait pas.

J'ai rajouté des acolades mais cela bne marche toujours pas

Mon code :
<html>
<body>


<?php

function verifierCases(formulaire)
{ 
  var tableauCases = formulaire.selection; 
  for(i=0;i<tableauCases;i++)
  	{ 
    //si la case est cochée on renvoie vrai au formulaire qui se soumet alors 
    if(tableauCases[i].checked)
    	{ 
        return true; 
  		} 
  	else
  		{
	  //on arrive ici donc aucune des cases n'a été cochée. le formulaire ne sera pas soumis 
  return false; 
		}
	}
} 



include ("../Connexion/connection_news.php");	  

if(isset($_POST['soumettre']))  
{ 

if ( isset($_POST["sujet"])  && isset($_POST["message"])  )  
    {  
        $sujet = htmlspecialchars(stripslashes($_POST["sujet"]), ENT_QUOTES); 
        $message  = htmlspecialchars(stripslashes($_POST["message"]), ENT_QUOTES); 
 
 		  //$sujet = $_POST["sujet"]; 
 		  echo "$message";
 		 
 	      //$message  = $_POST["message"]; 

        if(empty($sujet))
        	{
	        echo "<h3 align=center><strong>Vous devez remplir le sujet</h3>";
	        }     
        
        if(empty($message)) 
        	{
	        echo "<h3 align=center><strong>Vous devez remplir le message</h3>";
	        echo '<p align="center"><a href="javascript:history.back(-1)">Retourner sur la Page Message</a></p>'; 
	        }         
          
        else 
        	{ 
	        
// 
			$sql= "SELECT abonneId, abonneEmail FROM tblabonne WHERE abonneStatut=1" ;

			$result = mysql_query($sql) or exit ('Erreur SQL !'.$result.'<br>'.mysql_error());
			
?>			
			<form id="form_envoi_newsletter" action="valid_envoi_newsletter.php" method="post" onsubmit="verifierCases(this)">>
 				<table align="center">
 					<tr>
 					<td><input type="text" size="44" name="sujet"  value="<? echo $sujet; ?>" ></td> 
 					
 					</tr>
 					<tr>
 					<td><input type="text"  name="corps" id="corps" rows="10"   cols="10" value="<? echo $message; ?>" ></td> 
 					</tr> 
 					<tr>	
<?php 				
		
//on met les valeurs de la table
			while ($valeur = mysql_fetch_array($result))
				{  		
?>
				<td><input type="checkbox" name="selection[]" value=<? echo " $valeur[abonneEmail]"; ?> ><? echo " $valeur[abonneEmail]"; ?></td> 
				
					</tr>
<?php
//fin du while
				}		
?>		


<tr>
	<td><input type="submit" value="envoi" name="envoi"></td> 
</tr>	
	</table>
</form>

<?php



//fin du else                 
        } 
         
        
        
//Fin Isset Sujet et Message        
    } 
//Fin Isset Soumettre        
}     
?> 

</body>
</html>