Contrôle données sur un formulaire[résolu]

Petit nouveau ! | 6 Messages

02 juin 2012, 22:34

Bonjour,

je veut vérifier si l'âge correspond bien à un nombre, qu'il est entier et positif le problème c'est que si j'ai bien compris mon formulaire renvoie tout en type chaîne de caractères alors je fais comment si je veut vérifier qu'on m'envoie bien un nombre et non pas "salut" à la place par exemple? c'est possible?
<?php 
if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {

	$affiche_formulaire = true;

}

else if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	// tableau qui contiendra le récap de tout ce que la personne a posté
	$message_recapitulatif = array();

	// chaque erreur sera stockée comme élément de ce tableau :
	$message_erreur = array();

	// test si age n'existe pas
	if (!isset ($_POST['age']) ) {
		
		$message_erreur[] = 'Vous n\'avez pas entré votre age, veuillez remplir le formulaire';
			
	}
	// test si age n'est pas une chaine
	
	// test si age est une chaine vide
	
	// test si age n'est pas un nombre
	else if (!is_string ($_POST['age']) ) {
		
		$message_erreur[] = 'Chaîne de caractères interdites';

	}
	
	// test si age n'est pas entier
	
	// test si age n'est pas positif
	else if (!is_int ($_POST['age']) || $_POST['age'] < 13 ) {
		
		$message_erreur[] = 'Vous êtes trop jeune';
		ceil ($_POST['age']);
		
	}
	// ok
	else {
		
		$age = trim($_POST['age']);
		$message_recapitulatif[] = 'Age : ' . $age . ' ';
	}
	
	
	if (empty($message_erreur)) {
		
		$confirmation = 'Envoi OK';									// si le tableau d'erreur est vide 
		$affiche_formulaire = false;								// alors on fabrique un message de confirmation
																	// le formulaire ne sera pas réaffiché
	}																// sinon 
																	// on fabrique un message d'erreur
	else {
		
		$affiche_formulaire = true;
		$affiche_erreur = implode(' , ', $message_erreur);
		print_r ($affiche_erreur);
		
	}																	// on reaffiche le formulaire 
	
}



?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulaire</title>
</head>

<body>


<!-- affichez le message -->

<!-- si on affiche le formulaire ... 
 faire le if -->
<?php 
if ($affiche_formulaire == true) {
  echo '<form action="index.php" method="post">
  
	  <table cellpadding="10" border="1">
  
  <tr>
	<th>Age</th>
	<td><input type="text" name="age" /></td>
  </tr>
  
  <tr>
  <th>Rien oublié?</th>
  <td><input type="submit" value="Envoyer" /></td>
  </tr>
  </table>
  
  </form>';

}

else {

echo implode (' ',$message_recapitulatif);
echo $confirmation;
	
}
?>
</body>
</html>
Modifié en dernier par sens01 le 02 juin 2012, 22:58, modifié 1 fois.

Invité
Invité n'ayant pas de compte PHPfrance

02 juin 2012, 22:56

salut, plusieurs solutions

http://www.php.net/manual/fr/function.intval.php

http://www.php.net/manual/fr/function.ctype-digit.php

tu peux aussi caster ta var et la tester

Code : Tout sélectionner

$var = (int)$var;
:D

Petit nouveau ! | 6 Messages

02 juin 2012, 22:58

Super merci :D

ViPHP
xTG
ViPHP | 7331 Messages

02 juin 2012, 22:58

Regardes plutôt du côté de filter, c'est encore ce qui se fait de mieux.
http://fr2.php.net/filter

Car intval ou autre c'est un cast, pas une vérification.