[PHP]Expression régulière & condition if

Résolu/Fermé
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 - 5 juil. 2007 à 17:49
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 - 10 juil. 2007 à 22:19
Bonjour,

J'ai un petit souci pour réaliser mon back-office. J'ai deux pages pour mettre à jour mes dates.
La première page contient le tableau avec les champs pré-remplis.
Tout fonctionne, mais quand j'ai voulu mettre une expression régulière, celle-ci ne vérifie rien...Ca me renvoit à la page des formations comme si la date était correcte.
J'ai placé l'expression régulière dans tous les sens mais rien n'y fait...Quelqu'un aurait-il une idée ?

J'ai mis l'expression régulière dans la seconde page date-modif1.php qui insère les données dans la base.

Page date-modif1.php
 //récupération des valeurs des champs
  //formation :
  $nom_formation = addslashes($_POST['nom_formation'] );
  //date:
  $date_formation = addslashes($_POST['date_formation']) ;
  //lieu:
  $lieu_formation = addslashes($_POST['lieu_formation']) ;
  
  //récupération de l'identifiant de la formation
  $id_formation = $_POST['name_id_forma'] ;
  
   //récupération de l'identifiant de la date
  $id_date = $_POST['name_id_date'] ;
  
			     
  //création de la requête SQL
  $sql = "UPDATE date_formations
            SET date_date = '$date_formation',
		 		lieu_date = '$lieu_formation'
           WHERE id_date = '$id_date' " ;
  
  //exécution de la requête SQL
  $requete = mysql_query($sql, $connexion) or die( mysql_error() ) ;
	
 
// Vérification du format de la date 
	if  (!ereg('^(0[1-9]|1[0-2])[(\/)][0-3][0-9][(\/)][0-9]{4}$',$date_formation))
	{

  //affichage des résultats, pour savoir si la modification a marché 
    if ($requete)   {
			   header('Location: formations-modification.php');
		  }
		}  
  else
  {
    echo("<center><span class=\"Style1\">La modification a échoué.<br/> <a href=\"formations-modification.php\">Retourner à la liste des formations</a></center>") ;
  }



Merci d'avance à ceux qui m'aiguilleront !
A voir également:

4 réponses

tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
6 juil. 2007 à 10:55
Je crois que j'ai trouvé ! Si ça peut aider quelqu'un, mais attention il ne brille pas par sa structure ni par son optimisation !

	// Vérification du format de la date 
	if  (ereg('^((0[1-9])|([1-2][0-9])|(3[0-1]))(/)((0[1-9])|(1[0-2]))(/)([0-9]{4})$',$date_formation ))
	{
  //création de la requête SQL
  $sql = "UPDATE date_formations
            SET date_date = '$date_formation',
		 		lieu_date = '$lieu_formation'
           WHERE id_date = '$id_date' " ;
  
  //exécution de la requête SQL
  $requete = mysql_query($sql, $connexion) or die( mysql_error() ) ;
  //affichage des résultats, pour savoir si la modification a marché 
    if ($requete)   {
			   header('Location: formations-modification.php');
		  }
		}  
  else
  {
    echo("<center><span class=\"Style1\">La modification a échoué.Le format de la date ne convient pas.<br/> <a href=\"formations-modification.php\">Retourner à la liste des formations</a></center>") ;
  }
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
6 juil. 2007 à 12:51
Bonjour,

Désolé, je n'apporte pas grand chose (surtout que tu as déjà ta solution :p), mais je voudrais juste rappeler qu'en Français, on parle d'« expression rationnelle », et pas « régulière », qui vient d'une mauvaise traduction de l'Anglais "regular expression" :)

Voilà voilà !

Xavier
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
6 juil. 2007 à 13:42
D'accord je retiens !Désolé je suis pas encore experte, j'apprends depuis octobre et c'est un peu raide à tout ingurguter ;-)
0
Question:

pourquoi mets tu des addslashes dans ta récup de variables ??
//formation :
$nom_formation = addslashes($_POST['nom_formation'] );


Php les mets tout seul, il vaudrait mieux les supprimer par stripslashes() si tu veux tester par expression régulières.

Ensuite pour comprendre les expressions régulières vas voir le site du zéro, il est pas mal fait.

Une autre solution aussi c'est de proposer dans le formulaire de saisie , pour la date ,des listes déroulantes, une pour le jour, une pour le mois, une pour l'année. Comme ça pas de souci de format c'est toi qui le gères.

Ensuite par Javascript, il existe des fonctions qui vérifient les cohérences de dates (Février, mois 30/31 jours ect..).

Si besoin j'ai ça.
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
6 juil. 2007 à 14:04
Euh bah oui...Enfin non j'ai changé entre temps ! J'avais des slashs qui apparaissait mais je préférais d'abord trouver mon pb d'expression régulière. Alors voici comment j'ai modifié :
Dans ma page qui contient la liste de mes formations j'ai mis des stripslashes :
<span ><strong>".stripslashes ($row['nom_formations'])."</strong></span>


Dans ma page qui contient le fomulaire des formations :
  <td align="left"><input type="text" name="nom_formation" value="<?php echo stripslashes ($row['nom_formations']) ;?>" size="65"></td>


Dans ma page qui fait la mise à jour :
 //formation : 
  $nom_formation = $_POST['nom_formation'];


Ce code n'est certes pas optimisé mais je le comprends....Merci Alain pour ta proposition des listes déroulantes, mais maintenant que j'ai réussi tu comprendras que je vais garder ce que j'ai fait...Du moins pour le moment. Je ne veux pas profiter de ta gentillesse, tu m'aides déjà beaucoup par toutes tes remarques intéressantes. Pour le problème de l'année bissextle, ej verrais un peu plus tard....
0
Je t'ai trouvé aussi ce code sur un site: http://www.comscripts.com/sources/php.verification-de-date.94.html

Fonction PHP permettant de controler la validité d'une date
au format jj/mm/aaaa (au cas ou le javaScript n'ait pas marché !!)
(on peut facilement l'adapter à un autre format)

Portion de code


<?
/* Auteur : Guillaume Marc */
/* email : adalberto@wanadoo.fr */

function validation_date($date){
/* Fonction générale de vérification */

/* controle de la longueur de la chaine jj/mm/aaaa = 10 */
if(strlen($date)==10){
if(substr($date,2,1)=="/" && substr($date,5,1)=="/"){
/* les caractères 1 et 6 sont des " / " */
$jour=intval(substr($date,0,2)); /* PHP numérote les chaines depuis 0 */
$mois=intval(substr($date,3,2));
$annee=intval(substr($date,6,4));
if($mois>=1 && $mois<=12){ /* verifie que le mois verifie 1<mois<12 */
if($jour<=longueurMois($mois,$annee)){ /* controle le jour par */
return true; /* rapport a la longueur du mois */
}
else {
return false;
}
}
else {
return false;
}
}
else {
return false;
}
}
else {
return false;
}
}

/* La fonction renvoit la longueur d'un mois précis */
/* en tenant compte du mois de février et des années bissextiles */

function longueurMois($mois,$annee){
if ($mois==4 || $mois==6 || $mois==9 || $mois==11) return 30;
else if (($mois==2) && estBissextile($annee)) return 29;
else if ($mois==2) return 28;
else return 31;
}

/* Les années bissextiles sont les années paires divisibles par
quatre et qui ne sont pas des année de centaine et les années
de centaine qui sont divisibles par 400.
(par exemple 1600 était bissextile, 2000 aussi mais pas 1900
qui est divisible par 4 et paire mais pas divisible par 400) */

/* fonction appelée par validation_date() */

function estBissextile($ans){
if ((($ans % 4 == 0) && $ans % 100 != 0) || $ans % 400 == 0)
return true;/*c'est une année bissextile */
else
return false;/*ce n'en est pas une */
}
?>
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 > Alain42
8 juil. 2007 à 11:11
Merci, je prend le temps de regarder ça et te tiens au courant...Car c'est clair que ta solution est mieux !
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 > Alain42
8 juil. 2007 à 19:35
J'ai regardé un peu et elle semble vraiment pas mal, je pense que je l'utiliserais quand j'aurais mon site plus structuré et que j'aurais fait le plus gros...En attendant, j'aurais souhaité un conseil de ta part si ça ne t'embête pas trop ?
Voilà, j'ai commencé mon back-office et je me suis aidée de ce site http://www.phpdebutant.org/article68.php (ne t'inquiète pas je n'ai pas encore sécurisé le site, mais j'ai l'intention de le faire après)
L'internaute peut choisir grâce à un menu de modifier une rubrique. Pour ma rubrique formations, cela affiche ma liste des formations, où là, il peut choisir d'ajouter / modifier / supprimer une formation /date.
Quand il clique sur le lien ajouter formation, cela l'emmène sur le lien suivant :
http://www.agilicom.fr/...

Jusqu'ici tout va bien...Mais c'est lorsque je veux que le lien modifier emmène l'internaute sur la page modifier, je n'arrive pas à l'insérer dans cette structure. Pour que ça fonctionne , je suis obligée de mettre :
<a href=\"date-modif.php?nomFormation=".$row['id_formations']."&&nomDate=".$row_date['id_date']."\">modifier</a>

Si je tente le principe que j'ai fait pour ajouter ça ne fonctionne pas, ça ne me trouve pas le fichier ...Pourquoi ? Ils sont placés au même niveau, est-ce l'identifiant qui gêne peut-être ?

Que me conseilles-tu ?

Ma page d'accueil.php :
<?php
//connection au serveur:
require_once ('../connexionbd.php');
?>
<!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=iso-8859-1" />
<title>Back-office AGILiCOM</title>
<style type="text/css">@import url(modules/styleadmin.css);</style>
<script language="javascript" >
<!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
-->
</script>
<noscript>
<p>Cette page requière le JavaScript. Merci de bien vouloir l'activer.</p>
</noscript>
</head>
<body>
<div id="conteneur">
<div id="header"></div>
<div id="gauche">
<?php include("modules/menu-admin.php"); ?>
</div>
<div id="centre" name="centr">
<?php 
// Récupération du paramètre GET
    // (avec valeur par défaut=accueil.php)
    if (isset($_GET["page"]))
	$page = $_GET["page"];
    else $page = "";
	include ("$page");
	
?>
</div>
</div>
</body>
</html>


Je sais qu'il y la methode target mais je n'y suis pas arrivée, si tu as une petite idée de mon souci, ça me serait d'un grane aide..

Merci pour tout, je peux te dire que ça me motive à chercher !
0
Alain42 > Alain42
8 juil. 2007 à 22:51
href=\"date-modif.php?nomFormation=".$row['id_formations']."&&nomDate=".$row_date['id_date']."\">modifier</a>


tu as une erreur deux fois && avant nomDate
c'est peut etre ce qui gène
0
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
9 juil. 2007 à 09:29
Youpi ! Alain j'ai trouvé !
En fait il fallair remplcé le point d'exclamation par un & :
Code faux :
?page=formation-modif.php?nomFormation=".$row['id_formations'].

Code correct :
?page=formation-modif.php&nomFormation=".$row['id_formations'].


Houraa ! Lol ! Maintenant il me reste à sécuriser ses pages.
0