Page 1 sur 2
Champs Cochés et Combobox
Posté : 23 janv. 2008, 12:17
par Photographiquement Vôtre
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
Posté : 23 janv. 2008, 12:30
par d0m
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)">
Posté : 23 janv. 2008, 12:32
par Ryle
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

Posté : 23 janv. 2008, 13:23
par Photographiquement Vôtre
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>
Posté : 23 janv. 2008, 13:39
par Ryle
La fonction que
d0m t'a indiqué est, comme il l'a spécifié, une fonction
Javascript ........

Posté : 23 janv. 2008, 14:03
par Photographiquement Vôtre
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
>
Posté : 23 janv. 2008, 14:16
par d0m
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é.
Posté : 23 janv. 2008, 14:51
par Photographiquement Vôtre
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
Posté : 23 janv. 2008, 15:03
par Ryle
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

Posté : 23 janv. 2008, 15:04
par d0m
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.
Posté : 23 janv. 2008, 15:12
par Ryle
Puisque tu as opté pour la solution javascript, je déplace dans le forum adéquat

Posté : 23 janv. 2008, 15:51
par Photographiquement Vôtre
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
>
Posté : 23 janv. 2008, 16:04
par d0m
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.
Posté : 23 janv. 2008, 16:16
par Photographiquement Vôtre
Non je passe à la page indiquée dans le formulaire.
Et je n'ai pas de message en bas à gauche !
Posté : 23 janv. 2008, 16:22
par d0m
il faut déjà mettre l'instruction
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.