mktime champ formulaire faux

Eléphanteau du PHP | 24 Messages

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"

ViPHP
ViPHP | 2577 Messages

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

Eléphanteau du PHP | 24 Messages

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"

Eléphanteau du PHP | 24 Messages

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

Mammouth du PHP | 2278 Messages

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...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

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+