Page 1 sur 1

Valider les boutons radio

Posté : 02 nov. 2007, 15:36
par rabiet
Bonjour,

Dans le code ci-après, je souhaiterais valider les boutons radio pour obliger l'utilisateur à cocher un bouton.

Je ne souhaite pas pré-cocher un bouton, et j'aimerais qu'il y ait une alerte javascript
echo"<script language=\"javascript\">alert(\"Vous devez faire un choix pour voter.\");";
Comment puis-je faire ?

D'avance merci pour vos réponses.
<?php
// Vérifier la provenance - Initialisation du referer
if( !isset( $_SERVER['HTTP_REFERER'] ) ) {
    $_SERVER['HTTP_REFERER'] = "" ; 
}
// Remplissage du tableau d'url authorisée
$a_allowed_url[] = "http://www.rabiet.fr/vote/index.php";
$a_allowed_url[] = "http://www.rabiet.fr/vote/result.php";
$a_allowed_url[] = "http://www.rabiet.fr/vote/";

// Si le referer n'est aucune des pages autorisées
if ( !in_array($_SERVER['HTTP_REFERER'], $a_allowed_url) )
{
    // Redirection
    header("Location:http://www.rabiet.fr");
	exit;
} 

$Identifiant = isset($_POST['Identifiant']) ? $_POST['Identifiant'] : '';
$vote_choix = isset($_POST['vote_choix']) ? $_POST['vote_choix'] : '';
 
if ($Identifiant == "")
	//controle Identifiant non vide
if (empty($Identifiant))
{
echo"<script language=\"javascript\">alert(\"Vous devez saisir votre code pour accèder au vote!\");";
echo"window.history.go(-1);</script>";
}
{
	// Connexion à la BD
	include("_conn.php");
$result = mysql_query("SELECT vote_flag,vote_key FROM vote_emargement WHERE vote_key = '". addslashes($_POST["Identifiant"]) ."'");
$count = mysql_num_rows($result); 
 
// Si l'utilisateur n'est pas trouvé dans la base de données
if($count <= 0)
{
	// Redirection vers la page index.php
	header("location: index.php");
	exit;
}
// Vérifie que l'identifiant n'a pas déjà voté 
else{
$row = mysql_fetch_assoc($result);
$vote_flag = $row['vote_flag'];

   if($vote_flag == 1)   // Si vote_flag n'est pas de type int ajouter des ' autour de la valeur
   {
   echo"<script language=\"javascript\">alert(\"Vous avez déjà voté. Vous ne pouvez plus accèder au vote.\");";
   echo"window.history.go(-1);</script>";
   } 
} 

}

// Les options du formulaire
$options = array(
    'Option 1',
    'Option 2',
    'Option 3'
);
 
echo "<p align='center'>Identifiant : <b>".$Identifiant."</b> vérifié</p><br />";
echo "<p align='center'>Choisissez une option : ".$vote_choix."</p><br />";
 
?>
 
<center>
 <form name="form1" action="valid.php" method="POST">
    <?php
    foreach ($options as $v) {
        if ($v == $vote_choix) {
            echo '<input type="radio" name="vote_choix" value="' . $v . '" checked/>' . $v . '<br/>';
        } else {
            echo '<input type="radio" name="vote_choix" value="' . $v . '"/>' . $v . '<br/>';
        }
    }
   ?>

	<input type="hidden" name="Identifiant" 
      value="<? echo $Identifiant; ?>">
	<p>&nbsp;</p>
	<input type="submit" value="Voter" onSubmit="return test(this.vote_choix)" >
</form>
</center>

Posté : 02 nov. 2007, 15:55
par d0m
tu peux le faire à 2 niveaux :

niveau client : utiliser du javascript
Tu peux pour cela lorsque tu clique sur le bouton de soumission demander l'action d'une fonction javascript
<input type="submit" value="Voter" onSubmit="return test(this.vote_choix)">

Code : Tout sélectionner

function test(){ var ok = false; //autre tests .... var tableauRadio = document.getElementsByName('vote_choix'); if(tableauRadio.length == 1) if(formulaire.modele_id.checked==true) ok = true; else{ for(i=0;i<tableauRadio.length;i++) if(formulaire.vote_choix[i].checked==true) ok = true; } .... return ok; }
niveau serveur : PHP
Après la soumission du formulaire, un retour sur cette même page si aucun bouton n'a été selectionné.
Pour la validation tu renvoie sur la même page. Tu test si il y a bien une valeur dans $_POST['vote_choix'].
Si oui => tu traites
Sinon => tu réaffiches le formulaire avec un message.

Posté : 02 nov. 2007, 17:08
par lux
niveau serveur : PHP
Après la soumission du formulaire, un retour sur cette même page si aucun bouton n'a été selectionné.
Pour la validation tu renvoie sur la même page. Tu test si il y a bien une valeur dans $_POST['vote_choix'].
Si oui => tu traites
Sinon => tu réaffiches le formulaire avec un message.
Cette solution devrait être la première à être mise en place, on sait pas si le browser a Java activé ou non. Il faut toujours vérifier les données envoyées vers le serveur, entre autre si une valeur est envoyée ou pas. Je commencerais donc par la 8-)
(Imaginons que tu ne mettes pas cette protection, un utilisateur ne coche aucun bouton et a Java d'inactivé, il va avoir un paquet de messages d'erreurs pasque ton script n'a pas marché, ou voir pire il risque de faire des dégats ...)
La solution Javascript c'est du Bonus je trouve :P