mktime su mac funziona su windows no?

volturnosky

Nuovo Utente
17 Dic 2012
6
0
0
Salve a tutti;

sto facendo un sito per la gestione di un albergo un mio amico che lavora con un macbook mi ha dato una mano, sul suo computer le date vengono memorizzate correttamente nel db, sul mio (windows) viene memorizzato 0000-00-00 00:00:00 e ovviamente quando lo vado a leggere tramite la funzione date("d / M / Y", $row['data_da']) leggo 1 jan 1970.

questo è come memorizzo la data:

PHP:
<?php
include('../../include/config.php'); 
if (isset($_POST['submitted'])) { 
  foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } 
  $data_da = mktime(0,0,0,$_POST['a_m'],$_POST['a_d'],$_POST['a_y']);;
  $data_a = mktime(0,0,0,$_POST['p_m'],$_POST['p_d'],$_POST['p_y']);;
  $sql = "INSERT INTO `listino` (`regola`,`priorita`,`data_da`,`data_a`,`percentuale`) 
  		VALUES ('{$_POST['regola']}','{$_POST['priorita']}',$data_da,$data_a,'{$_POST['percentuale']}')"; 
  mysql_query($sql) or die(mysql_error()); 
  echo "Added row.<br />"; 
  echo "<a href='list.php'>Back To Listing</a>"; 
} 
$mesi = array("","Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"); 
?>

<form action='' method='POST'> 
<p><b>Regola:</b><br /><input type='text' name='regola'/> 
<p><b>Priorita:</b><br /><select name="priorita"> <? for($i=1;$i<=2;$i++) echo "<option value='$i'>$i</option>"; ?> </select>
<p><b>Dal:</b><br />
  <select name="a_d"> <? for($i=1;$i<=31;$i++) echo "<option value='$i'>$i</option>"; ?> </select> /
  <select name="a_m"> <? for($i=1;$i<=12;$i++) echo "<option value='$i'>$mesi[$i]</option>"; ?> </select> /
  <select name="a_y"> <? for($i=2012;$i<=2015;$i++) echo "<option value='$i'>$i</option>"; ?> </select>
<p><b>Al:</b><br />
  <select name="p_d"> <? for($i=1;$i<=31;$i++) echo "<option value='$i'>$i</option>"; ?>  </select> /
  <select name="p_m"> <? for($i=1;$i<=12;$i++) echo "<option value='$i'>$mesi[$i]</option>"; ?>  </select> /
  <select name="p_y"> <? for($i=2012;$i<=2015;$i++) echo "<option value='$i'>$i</option>"; ?> </select>
<p><b>Percentuale:</b><br />x<input type='text' name='percentuale'/> 
<p><input type='submit' value='Add Row' /><input type='hidden' value='1' name='submitted' /> 
</form>

Qualcuno sa spiegarmi perchè non funziona?
 
Ultima modifica di un moderatore:
ciao
dovrebbe funzionarti, io lo uso regolarmente su windows.
comunque un paio di osservazioni:
sostituisci tutti gli schort tag php con <?php
poi ti conviene verificare le date prima potresti trovarti con un 31/2/2013
e comunque verifica i vari $_POST con un var dump es.
var_dump($_POST['p_m']);
e verifica che vengano trasmessi come dovrebbe


p.s.
quando posti del codice racchiudilo tra gli appositi tag (seconda riga formattazione, ultime tre iconcine nell'ordine CODE, HTML, PHP)
 
ciao
se usi il timestamp e sbagliato, il timestamp è un numero intero quindi il campo andrebbe settato int(15)
poi, secondo me, il timestamp è uno dei sistemi più comodi per salvare le date, poi visualizzarlo in formato umano e semplicissimo (e anche fare calcoli e confronti)

PHP:
echo date("d-m-Y",$valore_del_timestamp);
es. nel tuo caso, dopo aver trasformato le date dal post puoi fare diversi controlli (anzi dovresti), es.
PHP:
<?php
//......
$data_da = mktime(0,0,0,$_POST['a_m'],$_POST['a_d'],$_POST['a_y']);;
 $data_a = mktime(0,0,0,$_POST['p_m'],$_POST['p_d'],$_POST['p_y']);;
$adesso=time();
if($data_da > $data_a){
echo "la data di arrivo non puo essere successiva a quella di partenza";
}elseif($data_da < $adesso || $data_a < $adesso){
echo "la data di arrivo o di partenza non possono essere precedenti alla data di oggi";
}
//.....
 
il tuo problema secondo me è nelle select
PHP:
<select name="a_d"> 
    <?
    for ($i = 1; $i <= 31; $i++)
        echo "<option value='$i'>$i</option>";
    ?> 
</select>
anziche 1 dovresti mostrare e inviare 01
prova modificando cosi
PHP:
<select name="a_d"> 
    <?php
    for ($i = 1; $i <= 31; $i++) {
        $i = str_pad($i, 2, '0', STR_PAD_LEFT);
        echo "<option value='$i'>$i</option>";
    }
    ?> 
</select>
stessa cosa per i mesi

EDIT

lascia perdere questo messaggio avevo visto male
certo se hai un campo DATETIME non puoi iviare un intero
io a differenza di Borgo preferisco il TIMESTAMP o DATETIME molto piu semplici da gestire nelle query

puoi modificare cosi
PHP:
$data_da = $_POST['a_y'] . "-" . $_POST['a_m'] . "-" . $_POST['a_d'];
e nella query racchiudere la variabile tra apici
 
Ultima modifica:
Giusto per puntualizzare perchè mi sa che su questo (l'utilizzo del TIMESTAMP) siamo tutti d'accordo.

poi, secondo me, il timestamp è uno dei sistemi più comodi per salvare le date, poi visualizzarlo in formato umano e semplicissimo (e anche fare calcoli e confronti)

io a differenza di Borgo preferisco il TIMESTAMP o DATETIME molto piu semplici da gestire nelle query

Anche Borgo come vedi :)
 
@Longo
io mi riferisco al tipo dato TIMESTAMP di SQL che ha questo formato
0000-00-00 00:00:00
con il quale è possibile usare funzioni tipo DATEDIFF , BETWEEN , TIMESTAMPDIFF, CURDATE e altre. è possibile inoltre impostare il campo con CURRENT TIMESTAMP, in questo modo sernza aggiungere niente in un INSERT verrà inserita in automatico la data attuale
Borgo invece si riferisce all' unix timestamp
Borgo ha scritto:
il timestamp è un numero intero
ovvero la data calcolata in secondi a partire dal 1 gennaio del 1970
 
Ultima modifica:
ciao
in un certo senso anche criric ha ragione, però comunque per rendere la data in italiano si devono sempre fare delle trasformazioni, o se in input in italiano trasformarla in albionico.
qualche funzioncina estra comunque va fatta o prima o dopo.
poi penso che sia soprattutto uno stile di programmazione.
 

Discussioni simili