vérification

Eléphant du PHP | 103 Messages

27 mai 2011, 12:43

Bonjour,

Je fais appel à vos connaissances PHP pour un problème qui est surement tout bête mais auquel je ne trouve pas de solution:

Voilà la ligne pour laquelle l'utilisateur doit rentrer des notes:
<td><input type="text" name="eval[<?php echo $donnees['id'];?>]" id="eval[<?php echo $donnees['id'];?>]" size="2" maxlength="1" tabindex="5"/></td>
Voilà ensuite la page qui fait le traitement:
if (!empty($_POST['eval']))
 {
  $eval=$_POST['eval'];
				
  foreach($eval as $element => $valeur)
   {
	// On se connecte à MySQL
						
	$bdd->exec('UPDATE l_met_scomp SET precedent='.$valeur.' WHERE id='.$element.'');
						
	header("Location: niveau_fct.php");
					
  }
 }
 else
 {
	echo 'Vous devez respecter la règle de saisie, remplir tous les champs et nombre entre 1 et 5';
 }
Ma requête s’exécute et les données s'enregistrent. Le problème que j'ai c'est que je ne sais pas comment faire la vérification que l'ensemble des champs aient été remplis et que l'utilisateur a bien saisi des nombres compris entre 1 et 5.

Merci

Silen.S.Sin
Invité n'ayant pas de compte PHPfrance

27 mai 2011, 13:21

Bonjour, je ne comprend pas bien ton code.
Que cherche tu réellement à faire? Juste vérifier avant l'envoi que cette case est remplis par un chiffre de 1 à 5?

Moi personnellement juste pour 1 à 5 je ne vérifierais pas... je mettrais soit des boutons radio, soit un select.

Eléphant du PHP | 103 Messages

27 mai 2011, 14:07

Oui je cherche juste à faire une vérification que tous les champs soient remplis et que ce soit avec une valeur comprise entre 1 et 5. Si c'est le cas alors la requête s’exécute et on met à jour la table, sinon on affiche un message d'erreur et on revient à la page précédente.

Eléphant du PHP | 92 Messages

27 mai 2011, 14:28

Hello,

Tu peux faire un truc comme ça :
<?php
if(isset($_POST['eval']) && !empty($_POST['eval']) && is_array($_POST['eval'])){
	$eval = $_POST['eval'];
	$evalQuery = array();
	$elementsInError = array();
	$templateQuery = "UPDATE l_met_scomp SET precedent=##VALEUR## WHERE id=##ELEMENT##";
	$toReplace = array("##VALEUR##", "##ELEMENT##");
	$hasError = false;
	foreach($eval as $element => $valeur){
		if(strlen($valeur) > 0 && trim($valeur) != ''){
			$replacements = array($valeur, $element);
			$sQuery = str_replace($toReplace, $replacements, $templateQuery);
			$evalQuery[] = $sQuery;
		}else{
			$elementsInError[] = $element;
			$hasError = true;
		}
	}
	if(!$hasError){
		foreach($evalQuery as $query){
			$bdd->exec($query);
		}
		header("Location: niveau_fct.php");
	}else{
		$elementList = implode(", ", $elementsInError);
		echo "Les éléments suivant n'ont pas été complétés : " . $elementList . "<br />";
		echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">Cliquez ici pour revenir sur la page précédente</a>';
	}
}
?>
Maintenant en faisant comme ça, l'utilisateur qui clique sur le lien "Cliquez ici pour revenir sur la page précédente", retournera bien sur la page précédente, mais le formulaire n'aura pas les valeurs qu'il aura renseigné avant...

Egalement à noter que ce script est sensible à l'injection SQL et que l'utilisateur doit abligatoirement avoir saisi un chiffre, s'il saisi une chaîne de caractères ça plantera...
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

Petit nouveau ! | 1 Messages

27 mai 2011, 14:33

Une question, combien à tu de champs à vérifier?

Eléphant du PHP | 103 Messages

27 mai 2011, 14:39

Je vais essayer ton code Maskime, merci.

Silen.S.Sin le nombre de champs à remplir n'est pas fixe. Il dépend d'une autre donnée (que je n'ai pas mis dans la page), c'est pour ca que je le déclare comme un tableau.
L'utilisateur peut avoir a remplir 4 champs, 10 champs, ...