Rechercher : dans
Par :

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

Dernière réponse le 10 jui 2007 à 22:19:01 tximiti, le 5 jui 2007 à 17:49:45 
 Signaler ce message aux modérateurs

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 !
Configuration: Windows XP
Firefox 2.0.0.4

Meilleures réponses pour « [PHP]Expression régulière & condition if » dans :
PHP - Expressions régulières Voir Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
Google - Recherche d'une expression exacte VoirLorsque l’on souhaite faire la recherche d’une expression exacte, il suffit de mettre cette expression entre guillemets. Exemple : "animal domestique" référencera uniquement les sites comportant l’expression "animal domestique".
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
VBScript - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (VBScript associe le mot clé true à...
Langage C++ - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

tximiti, le 6 jui 2007 à 10:55:02

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>") ;
  }

Répondre à tximiti

2

Reivax962, le 6 jui 2007 à 12:51:00

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

Répondre à Reivax962

4

tximiti, le 6 jui 2007 à 13:42:55

D'accord je retiens !Désolé je suis pas encore experte, j'apprends depuis octobre et c'est un peu raide à tout ingurguter ;-)

Répondre à tximiti

3

Alain42, le 6 jui 2007 à 13:41:33

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.

Répondre à Alain42

5

tximiti, le 6 jui 2007 à 14:04:00

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....

Répondre à tximiti

6

Alain42, le 7 jui 2007 à 09:20:42

Je t'ai trouvé aussi ce code sur un site: http://www.comscripts.com/sources/php.verification-de-date.9­4.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 */
}
?>

Répondre à Alain42

7

tximiti, le 8 jui 2007 à 11:11:03

Merci, je prend le temps de regarder ça et te tiens au courant...Car c'est clair que ta solution est mieux !

Répondre à tximiti

8

tximiti, le 8 jui 2007 à 19:35:21

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 !

Répondre à tximiti

9

Alain42, le 8 jui 2007 à 22:51:00

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

Répondre à Alain42

10

tximiti, le 8 jui 2007 à 23:01:57

Je regarde ça dès demain matin, mais j'ai un doute (enfin pas sur mon erreur, ça s'est certain ! Lol !) car avant que je fasse la mise en page ça fonctionnait et ça fonctionne toujours si je ne les insère pas dansla mise en page.
Si je laisse ça fonctionne (mais je n'ai plus ma mise en page ni mon menu)

<a href=\"date-modif.php?nomFormation=".$row['id_formations']."&nomDate=".$row_date['id_date']."\">modifier</a>


Si je fais ça, alors ça ne trouve plus le chemin !
<a href=\"accueil.php?page=date-modif.php?nomFormation=".$row['id_formations']."&nomDate=".$row_date['id_date']."\">modifier</a>

Je regarde dès demain ! Merci en tout cas !

Répondre à tximiti

12

 tximiti, le 10 jui 2007 à 22:19:01

Comme tu t'en doutes j'ai un petit souci avec la sécurisation de mes pages, si ça te dis, ets eulement si ça te dis, tu peux aller voir sur le nouveau post que j'ai fait :
php open basedir restriction in effect
ET encore merci pour otu !

Répondre à tximiti

11

tximiti, le 9 jui 2007 à 09:29:30

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.

Répondre à tximiti
Collection CommentÇaMarche.net