Date PHP-SQL

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 27 janv. 2015 à 23:52
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 30 janv. 2015 à 09:13
Bonjour

J'ai un champ dans ma base de donnée Date.
Lorsque j'insére une date de naissance d'un membre il n'y a pas de problème.
Mais lorsque je laisse le champ sans insérer de données j'ai ce message qui s'affiche.
Notice: Undefined offset: 2 in C....
Notice: Undefined offset: 3 in C...
Notice: Undefined offset: 4 in C...

Pouvez-vous me donner votre avis s'ils vous plait sur ces erreurs.
Je vous remercie.

6 réponses

Tomy2e Messages postés 816 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 18 août 2016 858
28 janv. 2015 à 00:20
Bonjour, cela signifie que vous faites appel à une valeur qui n'existe pas dans une variable de type array. Il ne s'agit que d'un avertissement et vous pouvez l'ignorer en ajoutant un "@" avant l'appel de la variable, par exemple:
<?php
$test = array();
echo $test[1]; // Affichera une erreur de type Notice
echo @$test[1]; // N'affichera rien
?>
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
28 janv. 2015 à 06:56
Bonjour
Merci de votre réponse en fait cela vien de cette fonction
function dateFR($date_en_francais){
    preg_match ('`^(\d{4})-(\d{2})-(\d{2})(.*)$`', $date_en_francais, $out);
    if($out[2] < 10) { $out[2] = substr($out[2],1,1); }
    $i = $out[2];
    $mois = array('','Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre');
    return $out[3].' '.$mois[$i].' '.$out[1].' '.$out[4];
}

sinon il y a quelque chosqe que je pourrais faire par rapport à cette fonction pour que ces erreurs soient supprimées.
Merci
0
Tomy2e Messages postés 816 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 18 août 2016 858
28 janv. 2015 à 20:57
Bonjour, pour que les erreurs disparaissent il faudrait rajouter des "@" devant les variables qui retournent un avertissement, cela donne donc cela:
function dateFR($date_en_francais){
    preg_match ('`^(\d{4})-(\d{2})-(\d{2})(.*)$`', $date_en_francais, $out);
    if(@$out[2] < 10) { @$out[2] = substr(@$out[2],1,1); }
    $i = @$out[2];
    $mois = array('','Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre');
    return @$out[3].' '.$mois[$i].' '.@$out[1].' '.@$out[4];
}


Pour éviter de devoir mettre un "@" devant toutes les variables, vous pouvez insérer le code suivant au début de votre code PHP:
error_reporting(E_ALL & ~E_NOTICE);

Voire même changer la configuration de PHP dans le fichier php.ini, renseignez-vous sur la documentation de PHP.
0
Utilisateur anonyme > Tomy2e Messages postés 816 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 18 août 2016
29 janv. 2015 à 07:59
Bonjour

C'est l'un des pires conseils que j'aie jamais vu sur ce forum.
papyclic va continuer d'écrire des erreurs, et il n'aura même plus de message pour le prévenir ! Et il viendra demander de l'aide ici en disant qu'il n'y a aucun message d'erreur.
Les avertissements sont des erreurs aussi graves que les autres, la différence est que l'interpréteur PHP ne s'arrête pas. Mais dans la plupart des cas, ça se passera mal un peu plus loin car il s'est passé quelque chose que le programmeur n'avait pas prévu.
Le masquage des erreurs devrait être limité aux quelques très rares cas où on ne peut pas faire autrement (comme l'accès à des ressources extérieures) et pas comme une solution de facilité qui permet de se dispenser de faire des vérifications, par fainéantise ou ignorance.
Cacher le thermomètre pour ne plus voir la fièvre n'aide pas à guérir.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
29 janv. 2015 à 07:02
Bonjour
Merci pour votre aide.
Super cool je vous remercie nickel.
Cordialement.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
29 janv. 2015 à 10:53
Bonjour le père,

Oui effectivement tu a raison, je le pensais aussi c'est pourquoi j'ai réaffiché mes erreurs. Aurai tu peut-être une idée à propos de mes erreurs concernant ma fonction s'il te plait, déjà en attendant j'ai simplement mis le @ devant mes variable car pour l'instant je suis toujours en local.
Merci

function dateFR($date_en_francais){
    preg_match ('`^(\d{4})-(\d{2})-(\d{2})(.*)$`', $date_en_francais, $out);
    if(@$out[2] < 10) { $out[2] = substr(@$out[2],1,1); }
    $i = $out[2];
    $mois = array('','Janvier', 'Fevrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Decembre');
    return @$out[3].' '.@$mois[$i].' '.@$out[1].' '.@$out[4];
}

Notice: Undefined offset: 2 in C....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 janv. 2015 à 11:09
Bonjour papyclic.
As-tu lu les explications sur la fonction preg_match dans le manuel php ?
Tu as cette erreur parce que la date que tu fournis n'a pas le format attendu. Et toi tu te sers du résultat du preg_match comme si tout allait toujours bien, ce qui n'est pas le cas.
À toi de tester avec count($out) si le preg_match a bien retrouvé les 4 morceaux. Et si ce n'est pas le cas, envoie un message d'erreur à celui qui a mal saisi l'adresse en lui rappelant le format que tu attends. Mais n'essaye pas de traiter des données que preg_match n'a pas trouvées.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
30 janv. 2015 à 09:13
Bonjour
Merci, j'ai essayé d'analyser correctement le problème de format de date.
En fait étant donné que cette erreur ne s'affiche que lorsque aucune donnée n'est renseigné, j'ai mis une valeur par défault dans mon champ de ma BDD, j'ai mis 00.00.0000.
et voilà le tour est joué.
j'espère que cette solution est acceptable.
Merci encore
0