Champs Cochés et Combobox

Eléphant du PHP | 330 Messages

23 janv. 2008, 12:17

Bonjour,

J'ai un formulaire avec un combobox

$sql= "SELECT abonneId, abonneEmail FROM tblabonne WHERE abonneStatut=1" ;

			$result = mysql_query($sql) or exit ('Erreur SQL !'.$result.'<br>'.mysql_error());
			
?>			
			<form id="form_tuto" action="valid_envoi_newsletter.php" method="post">
 				<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="55" 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>
Je veux afficher un message d'erreur quand aucune case n'a été cochée

Comment faire

Merci d'avance
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

d0m
Mammouth du PHP | 1141 Messages

23 janv. 2008, 12:30

tu as en gros 2 manières mais elle sont complémentaires :
- méthode PHP :

il faut après soumission de ton formulaire vérifier si la variable $_POST['selection'] contient au moins une case, si c'est le cas traiter les informations comme dans ta page valid_envoi_newsletter.php

sinon, retourner au formulaire en affichant un message.
Le plus pratique étant à la validation du formulaire rediriger vers la page elle même, faire les vérification et si c'est bon rediriger via un header vers l'autre page.


-méthode javascript :

mettre une fonction javascript qui va vérifier si au moins une des case est cochée

Code : Tout sélectionner

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; } //on arrive ici donc aucune des cases n'a été cochée. le formulaire ne sera pas soumis return false; }
et appliquer cette fonction à la soumission du formulaire :

Code : Tout sélectionner

<form id="form_tuto" action="valid_envoi_newsletter.php" method="post" onsubmit="verifierCases(this)">

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2008, 12:32

En php, il te suffit de vérifier le contenu de $_POST['selection'] ... s'il n'est pas défini, c'est qu'aucune case n'a été cochée :)
En javascript, il faut boucler sur le tableau document.getElementById('form_tuto').elements['selection[]'] et tester chaque case une à une...

P'tite remarque sinon, au lieu de
<? echo " $valeur[abonneEmail]"; ?>
Utilise
<?php echo $valeur["abonneEmail"]; ?>
C'est nettement plus propre, compatible et sans risque d'erreur ou d'avertissement selon la config du serveur ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 330 Messages

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>
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2008, 13:39

La fonction que d0m t'a indiqué est, comme il l'a spécifié, une fonction Javascript ........ :x
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 330 Messages

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
>
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

d0m
Mammouth du PHP | 1141 Messages

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é.

Eléphant du PHP | 330 Messages

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
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

d0m
Mammouth du PHP | 1141 Messages

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2008, 15:12

Puisque tu as opté pour la solution javascript, je déplace dans le forum adéquat :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 330 Messages

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
>
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

d0m
Mammouth du PHP | 1141 Messages

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.

Eléphant du PHP | 330 Messages

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 !
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

d0m
Mammouth du PHP | 1141 Messages

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.