verif de champs obligatoire d'un formulaire

Mammouth du PHP | 843 Messages

23 févr. 2006, 22:54

salut à tous ^^

je cherche à verifier si les champs obligatoire d'un formulaire sont bien remplis. (ils sont vides au depart)

si ils sont vide on redirige sur page d'erreur et sinon on continu la recuperation de données

j'utiliserai un commentaire pour definir le code de recup qui suivra :wink:
<?php
// on recupere par post le formulaire
$manif_date  = $_POST['champ_date'];
$manif  = $_POST['content'];
// verifie si les champs obligatoires sont bien remplient
if (!isset($manif_date) || !isset($manif))
{
header("location: page_erreur.html");
die;
}
else {
//ici le code de recuperation des donnees
}
?>
lors des test il n'y a pas de redirection et les données des champs vide sont recuperées :cry:

si quelqu'un peu m'aider :wink:
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 19672 Messages

23 févr. 2006, 22:57

Regarde par ICI
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BeRoots ^^
Invité n'ayant pas de compte PHPfrance

24 févr. 2006, 23:25

exelent ton tutorial 8)

juste une petite question niveau du html: à quoi serve les <label>?

pourrait tu me données un exemple cocret car je ne comprend pas trop l'utilité malgré la doc de selfhtml :cry:

merci d'avance :wink:

HD
Mammouth du PHP | 1181 Messages

24 févr. 2006, 23:32

juste une petite question niveau du html: à quoi serve les <label>?
Cette balise meconnue permet d'ameliorer grandement l'ergonomie de vos formulaires.
Elle permet en effet de cocher un element "radio" et "checkbox" par un clic sur le texte qui lui est joint.
http://www.editeurjavascript.com/trucs/ ... ulaire.php
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 843 Messages

25 févr. 2006, 00:09

pouvez vous m'expliquer aussi ce que signifie exactement ceci:

Code : Tout sélectionner

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
c'est la partie php que je ne comprend pas bien :oops:
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

HD
Mammouth du PHP | 1181 Messages

25 févr. 2006, 00:12

cela signifie que le formulaire (form) va envoyer les données (par post) à la même page (page que tu es entrain de coder)
il va donc la "relire" ou "réinterpréter" en intégrant les données que le formulaire a envoyé.
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

BeRoots ^^
Invité n'ayant pas de compte PHPfrance

25 févr. 2006, 00:48

en fait c'est la recuperation de l'url de la page si je comprend bien.

est ce mieux d'utiliser ceci à header (location: url) dans le cas de redirection sur une même page?

Mammouth du PHP | 19672 Messages

25 févr. 2006, 00:58

header() comporte des limitations : si du contenu a été envoyé vers le navigateur, tu ne pourras plus l'utiliser.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 843 Messages

25 févr. 2006, 15:30

ok merci :wink:

j'ai encore deux petites questions par rapport au genialisime script de formulaire de CYRANO:

1°) est ce que ce formulaire est bien securiser contre toutes les injections possibles? (car je ne voit pas de magicquote :? )

2°) en personnalisant le script, j'ai inserer un champ date de naissance et j'aimerai faire en sorte de mettre en place une expression reguliere afin de verifier si le format est valide. je souhaite utiliser le format DD/MM/AAA avec les slash...

je n'arrive pas à formuler l'expression, pouvez vous m'aider :wink:
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 843 Messages

25 févr. 2006, 15:33

ok merci :wink:

j'ai encore deux petites questions par rapport au genialisime script de formulaire de CYRANO:

1°) est ce que ce formulaire est bien securiser contre toutes les injections possibles? (car je ne voit pas de magicquote :? )

2°) en personnalisant le script, j'ai inserer un champ date de naissance et j'aimerai faire en sorte de mettre en place une expression reguliere afin de verifier si le format est valide. je souhaite utiliser le format DD/MM/AAA avec les slash...

je n'arrive pas à formuler l'expression, pouvez vous m'aider :wink:
$valid_mail = "#^[^-_\.][a-z0-9-_\.]+[^-_\.]@[^-_\.][a-z0-9-_\.]+[^-_\.]\.[a-z]{2,4}$#";
    $valid_phone = "#^\d{10}$#";
    $valid_postal = "#^\d{5}$#";
    $valid_datenaiss = "";
merci d'avance :)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

HD
Mammouth du PHP | 1181 Messages

25 févr. 2006, 15:35

pour la date essaie d'adapter ce script à ce que tu veux :
<html>

<head>
<script>
function tester()
{
var champ=document.f.ch.value

if(champ.length==10)
{ if((champ.substring(0,4) < 9999) && (champ.substring(4,5) == "/") && (champ.substring(5,7) < 13) && (champ.substring(7,8) == "/") && (champ.substring(8,10) < 99) && (champ.substring(10,10) == ""))
{
alert("bon")
}
}
}
</script>
</head>

<body>
<form name="f">
<input type="text" size="21" name="ch" value="Votre date (aaaa/mm/jj)">
<input type="button" onclick="tester()" value="test">
</form>
</body>

</html>
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 843 Messages

25 févr. 2006, 15:57

merci ça peut me servir mais je vait quand même voir si je trouve le moyen via les expression regulieres :wink:

par contre je ne trouve rien là dessus dans la doc donc si quelqu'un à un ptit lien ou des infos, sa serai genial :wink:
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 19672 Messages

25 févr. 2006, 16:20

Si tu veux valider une date avec du JavaScript, il va te falloir un tout petit peu plus que ces quelques lignes. Voici un code qui va valider une date au format JJ/MM/AAAA : il te suffira ensuite d'une expression régulière coté PHP pour la formatter pour MySQL :

Code JavaScript
/**
* Vérification qu'un date au format JJ/MM/AAAA est valide
*
* Paramètre Chaine  champ
* Retour    Booléen
*/
function valideDate(champ)
{
    /* Extraction des différentes parties de la date */
    var tab = champ.split("/");
    var jourStr   = tab[0];
    var moisStr   = tab[1];
    var anneeStr  = tab[2];
    var jourDate  = parseInt(jourStr);
    var moisDate  = parseInt(moisStr);
    var anneeDate = parseInt(anneeStr);
    /* Paramètres de nombres de jours */
    var jours31 = new Array(1, 3, 5, 7, 8, 10, 12);
    var jours30 = new Array(4, 6, 9, 11);
    /* Retour */
    var dateValide = false;

    Array.prototype.contient = function(valeur)
    {
        for (var i in this)
        {
            if (this[i] == valeur) return true;
        }
        return false;
    }
    /* Recherche */
    if(true === jours31.contient(moisDate))
    {
        /* On a un mois de 31 jours */
        if(jourDate <= 31)
        {
            dateValide = true;
        }
    }
    else if(true === jours30.contient(moisDate))
    {
        /* On a un mois de 30 jours */
        if(jourDate <= 30)
        {
            dateValide = true;
        }
    }
    else
    {
        /* On est au mois de février */
        var anB = anneeBissextile(anneeDate);
        if(true === anB && jourDate <= 29)
        {
            dateValide = true;
        }
        if(false === anB && jourDate <= 28)
        {
            dateValide = true;
        }
    }
    return dateValide;
}
/**
* Vérification qu'une année est bissextile
*
* Paramètre Int     annee au format entier de 4 chiffres
* Retour    Booléen
*/
function anneeBissextile(annee)
{
    var bissextile = false;
    /* Si l'année est divisible par 4 */
    if(annee % 4 == 0)
    {
        /* Si l'année est séculaire */
        if(annee % 100 == 0)
        {
            /* Si l'année séculaire est divisible par 400 */
            if(annee % 400 == 0)
            {
                bissextile = true;
            }
        }
        else
        {
            bissextile = true;
        }
    }
    return bissextile;
}
L'expression régulière en PHP:
$masque_date_sql = "#(\d{2})/(\d{2})/(\d{4})#";
$remplacement = "$3-$2-$1";
$champ_date = preg_replace($masque_date_sql, $remplacement, $date_form);
Attention dans le JavaScript, la seconde fonction n'est appelée que par la première, tu n'as pas besoin de l'eppeler directement. La première te renvoie TRUE si la date est valide et au bon format, FALSE dans le cas contraire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 843 Messages

25 févr. 2006, 17:42

on va voir si je suis HS d'entrer ou si je suis sur la bonne voie :oops:

j'ai integrer le JS que tu m'a proposé comme suit:

Code : Tout sélectionner

<script language="javascript" type="text/javascript" src="date_valid.js"></script>
j'ai aussi fait que lorsqu'on clique sur envoi on lance la fonction du JS grace à onSubmit:

Code : Tout sélectionner

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" onSubmit="valideDate(champ);">
mais si tous ça est correct, le problème maintenant pour moi est d'inserer une condition à IF dans le php pour qu'il recupere et interprete la valeur boléenne du JS :?

en claire, comment puis je faire pour recuperer la valeur du JS dans une variable de php?
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 19672 Messages

25 févr. 2006, 17:55

Remplace juste un détail :
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" onSubmit="return valideDate(champ);"> 
Le return va bloquer l'envoi du formulaire si la date est invalide, sinon, le retour à true laissera passer le formulaire vers le traitement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: