mktime champ formulaire faux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : mktime champ formulaire faux

Re: mktime champ formulaire faux

par surfys » 19 juin 2011, 13:59

salut
je vous remercie pour toute votre aide, mais j'ai réussi,
j'ai stocker la date et l'heure dans mysql, dans DATETIME, ça marche dans les 2 format anglais ou français...
J'ai récupéré la date par un select, et je l'ai transformé avec " strtotime () en secondes et en corrigeant le décalage de 2 heures,
c'est bon
j'ai la même valeur que mktime();

Merci
A+

Re: mktime champ formulaire faux

par Ryle » 19 juin 2011, 11:43

mais comment faire pour stocker un timestamp dans msql, à partir d'une date dans un formulaire...
En fait il te suffit de bien comprendre comment fonctionne mktime (et les fonctions d'une manière générale)

mktime retourne le timestamp UNIX d'une date. Pour ce que tu veux faire, il faut lui passer 6 informations en paramètres :
- Le nombre d'heures depuis le début de la journée
- Le nombre de minutes depuis le début de l'heure
- Le nombre de secondes depuis le début de la minute
- Le nombre de mois depuis le début de l'année
- Le nombre de jours depuis le début du mois
- L'année sur 2 ou 4 caractères
(voir la doc de la fonction pour plus d'information et les autres paramètres que tu peux utiliser)

Que tu passes ces paramètres en dur dans ton script php, que tu les passes à travers différentes variables php ou que ce soit l'utilisateur qui t'envoi ces informations à travers un formulaire, cela revient au même. Ce qui importe c'est de passer les bonnes variables dans le bon ordre.

Si l'utilisateur saisie ces données sous la forme d'une date (ex : jj/mm/aaaa), c'est à toi de récupérer le jour, le mois et l'année à partir de cette chaine, pour les passer correctement à la fonction mktime.

Re: mktime champ formulaire faux

par sirakawa » 19 juin 2011, 10:25

A mon point de vue, il faut contrôler fortement la saisie de la date, soit en la fractionnant entre des champs <input...> séparés

Code : Tout sélectionner

<input type = 'text' size= '2' name = 'quantieme'>-<input type ='text' size ='2' name ='mois'>-<input type = 'text' size='4' name ='annee'>

au risque de saisies aberrantes (32-13-234567778)
ou la forcer comme

Code : Tout sélectionner

<HTML> <form method = "post" action = "temps.php"> <select name = 'jour'> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>25</option> <option>26</option> <option>27</option> <option>28</option> <option>29</option> <option>30</option> <option>31</option> </select> <select name = 'mois'> <option value='1'>janvier</option> <option value='2'>février</option> <option value ='3'>mars</option> <option value='4'>avril</option> <option value='5'>mai</option> <option value ='6'>juin</option> <option value ='7'>juillet</option> <option value ='8'>août</option> <option value='9'>septembre</option> <option value='10'>octobre</option> <option value ='11'>novembre</option> <option value ='12'>décembre</option> </select> <select name = 'annee'> <option>2011</option> <option>2012</option> <option>2013</option> <option>20144</option> <option>2015</option> <option>2016</option> <option>2017</option> <option>2018</option> <option>2019</option> <option>20200</option> <option>2021</option> <option>2022</option> </select> <button type='submit'>ok</button> </HTML>
(qu'on pourrait générer par des boucles php)
et la récupérer par:
<?PHP

// ajouter systématiquement un date_default_timezone_set avant toute manipulation de dates pour avoir la paix avec php 5.1 
date_default_timezone_set ("Europe/Paris");

// Ne pas utiliser le dernier paramètre depuis php 5.1
$nb= mktime(18, 10, 00, 6, 17, 2011);
print "<br>$nb<br>";
//======= proposition
$jour= $_POST['jour'];
$mois= $_POST['mois'];
$annee= $_POST['annee'];
$date= mktime(18, 10, 00, $mois, $jour, $annee);

print "<br>$date";
?>
et encore, il faudrait vérifier si l'année est bissextile (multiple de 4 mais pas de 400)
si l'année n'est pas bissextile et si le mois est février que le quanieme est inférieur à 29, sinon à 30
pour les autres mois vérifier la validité du 31 éventuel...

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 21:11

mais comment faire pour stocker un timestamp dans msql, à partir d'une date dans un formulaire...
j'ai essayé de stocker la date et de la transformer aprés en secondes
ça change aussi, c'est différent que quand je l'écris dans mktime(........)

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 21:01

pourtant dans mktime(...........) c'est bon,

je sais pas pourquoi la fonction mktime modifie les données du champs qui sont les mêmes que dans la variable
j'ai essayé ça donne ça

var_dump du CHAMP
string(20) "19/06/2011 12:23:32 "

EVEN 2 (18, 10, 0, 6, 17, 2011, 1) : 1341598200

EVEN CHAMP : 1308335400
string(10) "1308335400"

Re: mktime champ formulaire faux

par Mazarini » 17 juin 2011, 20:52

Pour parler d'autre chose, il faudrait que tu réfléchisses à la manière de saisir les infos. Saisir un champ avec des valeurs séparées par des virgules ne me semble pas très pratique.

J'imagine que saisir 19/06/2011 12:23:32 avec une zone de saisie ou plusieurs serait plus pratique.

Autrement tu as saisie 30 à la place de de 10....

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 20:48

y'a toujours un différence...

var_dump du CHAMP
string(26) "18, 30, 00, 6, 17, 2011, 1"

EVEN 2 (18, 10, 0, 6, 17, 2011, 1) : 1341598200

EVEN CHAMP : 1308335400


string(10) "1308335400"

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 20:44

j'attends, le serveur ne répond pas..

Re: mktime champ formulaire faux

par Mazarini » 17 juin 2011, 20:14

Voila le résultat que j'ai

var_dump du CHAMP
string(26) "18, 10, 00, 19, 6, 2011, 1"

EVEN 2 (18, 10, 0, 6, 17, 2011, 1) : 1341598200

EVEN CHAMP : -1


string(2) "-1"
tu as inversé mois et jour et remplacer 17 par 19

Le -1 proviens de la mauvaise valeur pour le mois du fais de l'inversion

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 20:05

Voila le résultat que j'ai

var_dump du CHAMP
string(26) "18, 10, 00, 19, 6, 2011, 1"

EVEN 2 (18, 10, 0, 6, 17, 2011, 1) : 1341598200

EVEN CHAMP : -1


string(2) "-1"

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 19:56

Merci de m'aider....

J'ai du m'absenter..désolé.
c'est pas bon, ça me donne -1

Re: mktime champ formulaire faux

par Mazarini » 17 juin 2011, 19:06

$even = mktime($d[0],$d[1],$d[2],$d[3],$d[4],$d[5],1);

Réfléchi un peu

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 19:00

voila le code actuel,

$d = explode(',',$_POST['even']);
$even = mktime($d[0],$d[1],$d[2],$d[3],$d[4],$d[5],$d[1]);

Re: mktime champ formulaire faux

par surfys » 17 juin 2011, 18:52

je l'ai fait, c'est pas encore bon
ça donne : even.....1308335400
even2......1341598200

Re: mktime champ formulaire faux

par Mazarini » 17 juin 2011, 18:45

Donc il faut ajouter remplacer $d[6] par 1