8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un souci avec mon formulaire.
J'ai bien défini la classe "rouge" dans ma feuille de style.
Voici mon problème :
- en toute première fois du passage du formulaire, ce texte ne peut pas être en rouge
- aux autres passages suivants, si la case n'est pas cochée, je voudrais qu'il devienne rouge.
Pouvez-vous m'aider ?
Grand merci d'avance.
JYves
<input type="checkbox" name="cgv" id="cgv" value="on" style="margin-left:1px;">
<label class="<?php echo ((isset($_POST['cgv'])) AND ($_POST['cgv']!="on"))?'rouge':''; ?>">
J'accepte les <a href="conditions.php">conditions générales de vente</a></label>
Salut,

Ton problème est, au passage, assez mal expliqué.... Smiley decu
Essaye de remplacer ton "AND" par "&&".
Ta condition me parait également fausse...
Tu mets la classe "rouge" seulement si le POST "cgv" est positionné et égal à "on" ? C'est pas l'inverse ?

Autre remarque, dans le cas où la classe "rouge" n'est pas donné au label, tu auras l'attribut class qui sera vide (class=""). C'est un peu crado... Tu devrais t'y prendre autrement et écrire l'attribut classe uniquement si sa valeur est égale à "rouge" (soit class="rouge" soir rien !).
Modifié par JuJu57 (08 Jun 2011 - 10:44)
Merci pour ton intervention.
Mais pour le test ce n'est pas == mais != qui y est mis.

Quelles sont les différences entre && et AND ?
N'est-ce pas la même chose ?

Ce que je veux,
c'est mettre en rouge :
- quand le $_POST "cgv" a été positionné
ET
- n'est pas égal à "on" ?
Sinon
- il doit être noir (classe noir bien sûr déterminée dans les styles CSS !)

A l'aide svp
Modifié par jytest (08 Jun 2011 - 11:44)
<label 


<?php 
if (isset($_POST['cgv']) AND $_POST['cgv']!="on" ) {
  echo ' class="rouge" '; 
} 
?>

 >

Modifié par PiR2 (08 Jun 2011 - 13:56)
ou en structure ternaire :

echo (isset($_POST['cgv']) AND $_POST['cgv']!="on")  ? ' class="rouge" ':'';
Désolé mais cela ne fonctionne pas...
Pourquoi ?

A croire que isset sur checkbox n'est pas possible !
Modifié par jytest (08 Jun 2011 - 14:15)
jytest a écrit :
Désolé mais cela ne fonctionne pas...
Pourquoi ?

A croire que isset sur checkbox n'est pas possible !


Une case à cocher non cochée n'est pas transmise dans le POST ou le GET, la variable correspondante n'est pas créée dans le tableau des $_GET ou $_POST.
L'extension url_param de firefox est bien pratique dans ce cas pour le détecter, on voit que la variable n'est pas transmise.
Mais comme le test isset s'en assure cela devrait fonctionner ; moi en local sans case à cocher mais en simulant cela fonctionne...

echo (isset($_GET['cgv']) AND $_GET['cgv']!="on") ? 'toto':'';

si cgv n'est pas tranmise dans l'url ou si cgv est transmis et ne vaut pas on, le script n'affiche rien comme attendu.
Il doit nous manquer un élément du problème.
Voici le code dans l'intégralité.
A savoir que cette page s'appelle espace.php.
Allez-vous pouvoir m'aider ?


<?php
        // test isset sur toutes les variables ici //
	if (($_POST['cgv']=="on")) {
	// test sur la validité de l'adresse email
			$atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
			$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';		   
			$regex = '/^'.$atom.'+'.'(\.'.$atom.'+)*'.'@'.'('.$domain .'{1,63}\.)+'.$domain.'{2,63}$/i';  
			if (preg_match($regex, $email1)) {
	// si l'adresse email est valide, on part vers compte.php
				header("Location: php/compte.php");
			} else {
				$_POST['email1']="";
				$_POST['email2']="";
			}
	}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

</head>

<body>

<div id="site">
<div id="visuel">
    <form action="espace.php" method="post" name="myform" id="formulaire">
    <table border="0" cellspacing="0" style="vertical-align:middle" width="355">
    	<tr>
        	<td>&nbsp;</td>
        	<td colspan="3" class="italique">
        	  <input type="checkbox" name="cgv" id="cgv" value="on" style="margin-left:1px;">
              <label <?php echo (isset($_POST['cgv']) AND $_POST['cgv']!="on")?'class="rouge"':''; ?>>J'accepte les <a href="conditions.php">conditions générales de vente</a></label></td>
       	</tr>
    	<tr>
        	<td>&nbsp;</td>
        	<td>
          	<label for="envoi"></label>
            <input type="submit" name="envoi" id="envoi" value=" Valider " style="vertical-align:middle; font-size:11px; height:18px; background-color:#f29400; color:#FFFFFF;">
            </td>
            <td align="right">
            <label for="erase"></label>
          	<input type="reset" name="erase" id="erase" value=" Effacer " style="vertical-align:middle; font-size:11px; height:18px; background-color:#a6a6a6; color:#FFFFFF;">
            </td>
        	<td>
            </td>
        </tr>
    </table>
    </form>
</div>
</div>

</body>
</html>

Modifié par jytest (08 Jun 2011 - 15:54)
Dans ton cas tu n'as même pas besoin de tester la valeur de ta case à cocher au niveau du span.
Par contre il faut ajouter la condition en début de script php pour ne pas avoir d'erreur d'offset.
De même $pays = $_POST['pays']; sans vérif va engendrer une erreur. Pas de champ pays.
Sinon comme ça c'est maintenant OK.


<?php 
    if (isset($_POST['cgv']) && ($_POST['cgv']=="on")) { 
    // test sur la validité de l'adresse email 
            $pays = $_POST['pays']; 
            $atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]'; 
            $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';            
            $regex = '/^'.$atom.'+'.'(\.'.$atom.'+)*'.'@'.'('.$domain .'{1,63}\.)+'.$domain.'{2,63}$/i';   
            if (preg_match($regex, $email1)) { 
    // si l'adresse email est valide, on part vers compte.php 
                header("Location: php/compte.php"); 
            } else { 
                $_POST['email1']=""; 
                $_POST['email2']=""; 
            } 
    } 
    
?> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
 
</head> 
 
<body> 
 
<div id="site"> 
<div id="visuel"> 
    <form action="espace.php" method="post" name="myform" id="formulaire"> 
    <table border="0" cellspacing="0" style="vertical-align:middle" width="355"> 
        <tr> 
            <td>&nbsp;</td> 
            <td colspan="3" class="italique"> 
              <input type="checkbox" name="cgv" id="cgv" value="on" style="margin-left:1px;"> 
              <label <?php echo (isset($_POST['cgv']) == false)?' class="rouge" ':''; ?> >J'accepte les <a href="../../../Program Files/Site NEW creaprint/conditions.php">conditions générales de vente</a></label></td> 
           </tr> 
        <tr> 
            <td>&nbsp;</td> 
            <td> 
              <label for="envoi"></label> 
            <input type="submit" name="envoi" id="envoi" value=" Valider " style="vertical-align:middle; font-size:11px; height:18px; background-color:#f29400; color:#FFFFFF;"> 
            </td> 
            <td align="right"> 
            <label for="erase"></label> 
              <input type="reset" name="erase" id="erase" value=" Effacer " style="vertical-align:middle; font-size:11px; height:18px; background-color:#a6a6a6; color:#FFFFFF;"> 
            </td> 
            <td> 
            </td> 
        </tr> 
    </table> 
    </form> 
</div> 
</div> 
 
</body> 
</html> 
Pour éviter des malentendus sur $pays, je l'ai supprimé...
Mais mon problème est toujours présent.
A l'aide, svp.

Revoici le code :


<?php 
    // test isset sur toutes les variables ici // 
    if (($_POST['cgv']=="on")) { 
    // test sur la validité de l'adresse email 
            $atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]'; 
            $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';            
            $regex = '/^'.$atom.'+'.'(\.'.$atom.'+)*'.'@'.'('.$domain .'{1,63}\.)+'.$domain.'{2,63}$/i';   
            if (preg_match($regex, $email1)) { 
    // si l'adresse email est valide, on part vers compte.php 
                header("Location: php/compte.php"); 
            } else { 
                $_POST['email1']=""; 
                $_POST['email2']=""; 
            } 
    } 
?> 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
 
</head> 
 
<body> 
 
<div id="site"> 
<div id="visuel"> 
    <form action="espace.php" method="post" name="myform" id="formulaire"> 
    <table border="0" cellspacing="0" style="vertical-align:middle" width="355"> 
        <tr> 
            <td>&nbsp;</td> 
            <td colspan="3" class="italique"> 
              <input type="checkbox" name="cgv" id="cgv" value="on" style="margin-left:1px;"> 
              <label <?php echo (isset($_POST['cgv']) AND $_POST['cgv']!="on")?'class="rouge"':''; ?>>J'accepte les <a href="conditions.php">conditions générales de vente</a></label></td> 
           </tr> 
        <tr> 
            <td>&nbsp;</td> 
            <td> 
              <label for="envoi"></label> 
            <input type="submit" name="envoi" id="envoi" value=" Valider " style="vertical-align:middle; font-size:11px; height:18px; background-color:#f29400; color:#FFFFFF;"> 
            </td> 
            <td align="right"> 
            <label for="erase"></label> 
              <input type="reset" name="erase" id="erase" value=" Effacer " style="vertical-align:middle; font-size:11px; height:18px; background-color:#a6a6a6; color:#FFFFFF;"> 
            </td> 
            <td> 
            </td> 
        </tr> 
    </table> 
    </form> 
</div> 
</div> 
 
</body> 
</html>

Modifié par jytest (08 Jun 2011 - 15:59)
le bon code


<?php 
  $pb ='' ;
  if(isset($_POST['envoi'])) {
    if (isset($_POST['cgv']) && ($_POST['cgv']=="on")) { 
    // test sur la validité de l'adresse email 
            $pays = $_POST['pays']; 
            $atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]'; 
            $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';            
            $regex = '/^'.$atom.'+'.'(\.'.$atom.'+)*'.'@'.'('.$domain .'{1,63}\.)+'.$domain.'{2,63}$/i';   
            if (preg_match($regex, $email1)) { 
    // si l'adresse email est valide, on part vers compte.php 
                header("Location: php/compte.php"); 
            } else { 
                $_POST['email1']=""; 
                $_POST['email2']=""; 
            } 
    } else {
      $pb = ' class="rouge" ';
    }
  }  
    
?> 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
 
</head> 
 
<body> 
 
<div id="site"> 
<div id="visuel"> 
    <form action="espace.php" method="post" name="myform" id="formulaire"> 
    <table border="0" cellspacing="0" style="vertical-align:middle" width="355"> 
        <tr> 
            <td>&nbsp;</td> 
            <td colspan="3" class="italique"> 
              <input type="checkbox" name="cgv" id="cgv" value="on" style="margin-left:1px;"> 
              <label <?php echo $pb ?> >J'accepte les <a href="../../../Program Files/Site NEW creaprint/conditions.php">conditions générales de vente</a></label></td> 
           </tr> 
        <tr> 
            <td>&nbsp;</td> 
            <td> 
              <label for="envoi"></label> 
            <input type="submit" name="envoi" id="envoi" value=" Valider" style="vertical-align:middle; font-size:11px; height:18px; background-color:#f29400; color:#FFFFFF;"> 
            </td> 
            <td align="right"> 
            <label for="erase"></label> 
              <input type="reset" name="erase" id="erase" value=" Effacer " style="vertical-align:middle; font-size:11px; height:18px; background-color:#a6a6a6; color:#FFFFFF;"> 
            </td> 
            <td> 
            </td> 
        </tr> 
    </table> 
    </form> 
</div> 
</div> 
 
</body> 
</html> 

Modifié par PiR2 (08 Jun 2011 - 15:59)
Oui, mais...
Quand un champ n'est pas rempli (ex: pays),
le code doit d'office décocher cgv...
et donc de mettre le label en rouge...
(à partir du 2e passage)

Or actuellement, avec ton code,
il ne se met pas en rouge...

J'ai apprécié ton test sur 'envoi',
j'y avais pas pensé.

Peux-tu encore un peu m'aider
avec ce cas spécial ?
Modifié par jytest (08 Jun 2011 - 18:57)
Merci à toi PiR2 !
j'ai trouvé...
J'ai exploité le isset sur le bouton envoi et voilà ce que cela donne :


<?php
	if (isset($_POST['envoi'])) {
  		$pb ='';
		if (trim($_POST['email1'])!=trim($_POST['email2'])) {
			$_POST['email1']="";
			$_POST['email2']="";
		}
		
		if ((strlen(trim($_POST['nom']))>0) AND (strlen(trim($_POST['prenom']))>0)
			AND (strlen(trim($_POST['adresse']))>0) AND (strlen(trim($_POST['cpostal']))>0)
			AND (strlen(trim($_POST['localite']))>0) AND (strlen(trim($_POST['tel']))>0)
			AND (strlen(trim($_POST['email1']))>0) AND (strlen(trim($_POST['email2']))>0)
			AND ($_POST['cgv']=="on")) {
				$pays = $_POST['pays'];
				$atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
				$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';		   
				$regex = '/^'.$atom.'+'.'(\.'.$atom.'+)*'.'@'.'('.$domain .'{1,63}\.)+'.$domain.'{2,63}$/i';  
				if (preg_match($regex, $email1)) {
					header("Location: php/compte.php");
				} else {
					$_POST['email1']="";
					$_POST['email2']="";
				}
		} else { 
			$pb = 'class="rouge"';
		}
	}
?>

Modifié par jytest (08 Jun 2011 - 19:05)