problema gestione date

  • Creatore Discussione Creatore Discussione luigi777
  • Data di inizio Data di inizio

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
sto seguendo questo articolo :
https://www.mrw.it/php/articoli/formattare-date-recuperate-database_543.html
però ho un problema ..

ho questo codice come faccio a metterla in formato date ?

il campo birthday è formato date nel database qui e quello che vorrei capire come autoselezionare i giorno il mese e l'anno..

vi posto il codice del menu a tendina:

PHP:
Compleanno	
<select name="inserimento_giorno">
<?php
for ($i=1; $i<=31; $i++)
  echo "<option value=\"$i\" SELECTED>$i</option>";
?>
</select>

<select name="inserimento_mese">
<?php
for ($i=1; $i<=12; $i++)
  echo "<option value=\"$i\" SELECTED>$i</option>";
?>
</select> 

<select name="inserimento_anno">
<?php
for ($i=1900; $i<=date("Y"); $i++)
  echo "<option value=\"$i\" SELECTED>$i</option>";
?>
</select>


e questo è il codie della pagina:


PHP:
<?php

require_once(dirname(__FILE__) . '/include.php');

checkLogin('1 2 3');
	
	$id_utenti = (int)$_SESSION['id_utente'];
	

		//Query SQL
		$strSQL = "SELECT *, DATE_FORMAT(birthday, '%d/%m/%Y') as data_it FROM utenti"
				. " WHERE id = $id_utenti";
		//Eseguo la query e recupero i dati
		$result = mysql_query($strSQL);
		
if(empty($id_utenti)) {
		echo "ID non specificato";
}elseif (mysql_num_rows($result) == 0) { echo "Record non trovato"; }
		else
		{
		
		$row = mysql_fetch_array($result);
		
		//recupero dati...
		$name = $row['name'];
		$firstname = $row['firstname'];
		$birthday = $row["data_it"];
		$note = $row["note"];
		$_sesso = $row["sesso"];
        
    
    
		//Libero la memoria
		mysql_free_result($result);


// Se il modulo viene inviato...
if(isset($_POST['submit']))
{	
	// Dati Inviati dal modulo
	$name = (isset($_POST['name'])) ? trim($_POST['name']) : '';	
	$firstname = (isset($_POST['firstname'])) ? trim($_POST['firstname']) : '';	
	$sesso = (isset($_POST['sesso'])) ? trim($_POST['sesso']) : '';	
	$birthday = "".$_POST["inserimento_anno"]."-" + "".$_POST["inserimento_mese"]."" + "-".$_POST["inserimento_girono"]."";	
	$note= (isset($_POST['note'])) ? trim($_POST['note']) : '';

	// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
	if (!get_magic_quotes_gpc()) {
		$name = addslashes($name);
		$firstname = addslashes($firstname);
		$sesso = addslashes($sesso);
		$birthday = addslashes($birthday);
		$note = addslashes($note);
	}
	
	$id_utente = $_SESSION["id_utente"];
	
	$strSQL = "UPDATE utenti SET"
				. " name = '$name',"
				. " firstname = '$firstname',"
				. " sesso = '$sesso',"
				. " birthday = '$birthday',"
				. " note='$note'"
				. " WHERE id = $id_utente";
	
	if(mysql_query($strSQL)){
		$msg =  "Modificato<br>";
		$msg .="";
	}else{
		$error  = "Errori riscontrati durante l'inserimento<br>";
		$error ."Errore: ".mysql_error();
		echo $strSQL;
	}
	
}

if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	
if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {
?>
<p>Questa  &egrave;  la scheda di <?php echo $_SESSION["name"]; ?></p>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
 Nome<input name="name" type="text" id="name" value="<?php if(isset($name)){echo $name;}else { echo $name; }?>"/><br />
 Cognome<input name="firstname" type="text" id="firstname" value="<?php if(isset($firstname)){echo $firstname;}else { echo $firstname;}?> " /><br />
 Sesso:
<input type="radio" name="sesso" value="M" <?php if($_sesso=="M") echo 'checked="checked"'?>/>Maschio
 <input type="radio" name="sesso" value="F" <?php if($_sesso=="F") echo 'checked="checked"'?> />Femmina<br/>
Compleanno	
<select name="inserimento_giorno">
<?php
for ($i=1; $i<=31; $i++)
  echo "<option value=\"$i\" SELECTED>$i</option>";
?>
</select>

<select name="inserimento_mese">
<?php
for ($i=1; $i<=12; $i++)
  echo "<option value=\"$i\" SELECTED>$i</option>";
?>
</select> 

<select name="inserimento_anno">
<?php
for ($i=1900; $i<=date("Y"); $i++)
  echo "<option value=\"$i\" SELECTED>$i</option>";
?>
</select> 
<br />
 Note<textarea cols="40" rows="5" name="note"><?php if(isset($note)){echo $note;}else { echo $note; }?></textarea><br />
 <input name="submit" type="submit" value="Modifica" /><br />
</form>
<?php } 
}?>

Mi dite come faccio gestire le date in un modo semplice?

grazie mille.
 
Ciao,
puoi provare con explode

PHP:
$data_explode = explode('/', $birthday);
// $data_explode[0] sarà il giorno
// $data_explode[1] sarà il mese
// $data_explode[2] sarà l'anno

la select per il giorno diventerà cosi:
PHP:
<?php
for ($i = 1; $i <= 31; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[0]) && $data_explode[0] == $i) {
    echo " selected='selected'";
  }
echo ">$i</option>";
}
?>
 
Ultima modifica:
ciao , io ho provato ma non seleziona da solo quando entro nella scheda..
rimmangono sempere i primi valori del menu a tendina..


ti posto il codice:

codice:

PHP:
<?php

require_once(dirname(__FILE__) . '/include.php');

checkLogin('1 2 3');
	
	$id_utenti = (int)$_SESSION['id_utente'];
	//Controllo se prelevare informazioni
	//relative a news da aggiornare...

		//Query SQL
		 $strSQL = "SELECT *, DATE_FORMAT(birthday, '%d/%m/%Y') as data_it FROM utenti"
                . " WHERE id = $id_utenti";
		//Eseguo la query e recupero i dati
		$result = mysql_query($strSQL);
		
if(empty($id_utenti)) {
		echo "ID non specificato";
}elseif (mysql_num_rows($result) == 0) { echo "Record non trovato"; }
		else
		{
		
		$row = mysql_fetch_array($result);
		
		//recupero dati...
		$name = $row['name'];
		$firstname = $row['firstname'];
		$birthday = $row["data_it"];
		$note = $row["note"];
		$_sesso = $row["sesso"];
    
       $data_explode = explode('-', $birthday);
        // $data_explode[0] sarà il giorno
        // $data_explode[1] sarà il mese
        // $data_explode[2] sarà l'anno  
   
		//Libero la memoria
		mysql_free_result($result);


// Se il modulo viene inviato...
if(isset($_POST['submit']))
{	
	// Dati Inviati dal modulo
	$name = (isset($_POST['name'])) ? trim($_POST['name']) : '';	
	$firstname = (isset($_POST['firstname'])) ? trim($_POST['firstname']) : '';	
	$sesso = (isset($_POST['sesso'])) ? trim($_POST['sesso']) : '';	
	$birthday = "".$_POST["inserimento_anno"]."-" + "".$_POST["inserimento_mese"]."" + "-".$_POST["inserimento_giorno"]."";	
	$note= (isset($_POST['note'])) ? trim($_POST['note']) : '';

	// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
	if (!get_magic_quotes_gpc()) {
		$name = addslashes($name);
		$firstname = addslashes($firstname);
		$sesso = addslashes($sesso);
		$birthday = addslashes($birthday);
		$note = addslashes($note);
	}
	
	$id_utente = $_SESSION["id_utente"];
	
	$strSQL = "UPDATE utenti SET"
				. " name = '$name',"
				. " firstname = '$firstname',"
				. " sesso = '$sesso',"
				. " birthday = '$birthday',"
				. " note='$note'"
				. " WHERE id = $id_utente";
	
	if(mysql_query($strSQL)){
		$msg =  "Modificato<br>";
		$msg .="";
	}else{
		$error  = "Errori riscontrati durante l'inserimento<br>";
		$error ."Errore: ".mysql_error();
		echo $strSQL;
	}
	
}

if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	
if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {
?>
<p>Questa  &egrave;  la scheda di <?php echo $_SESSION["name"]; ?></p>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
 Nome<input name="name" type="text" id="name" value="<?php if(isset($name)){echo $name;}else { echo $name; }?>"/><br />
 Cognome<input name="firstname" type="text" id="firstname" value="<?php if(isset($firstname)){echo $firstname;}else { echo $firstname;}?> " /><br />
 Sesso:
<input type="radio" name="sesso" value="M" <?php if($_sesso=="M") echo 'checked="checked"'?>/>Maschio
 <input type="radio" name="sesso" value="F" <?php if($_sesso=="F") echo 'checked="checked"'?> />Femmina<br/>
Compleanno	
<select name="inserimento_giorno">
<?php
for ($i = 1; $i <= 31; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[0]) && $data_explode[0] == $i) {
    echo " selected='selected'";
  }
echo ">$i</option>";
}
?></select> <select name="inserimento_mese">
<?php
for ($i = 1; $i <= 12; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[1]) && $data_explode[1] == $i) {
    echo " selected='selected'";
  }
echo ">$i</option>";
}
?> </select>
 <select name="inserimento_anno">
<?php
for ($i=1900; $i<=date("Y"); $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[2]) && $data_explode[2] == $i) {
    echo " selected='selected'";
  }
echo ">$i</option>";
}
?> </select>
<br />
 Note<textarea cols="40" rows="5" name="note"><?php if(isset($note)){echo $note;}else { echo $note; }?></textarea><br />
 <input name="submit" type="submit" value="Modifica" /><br />
</form>
<?php } 
}?>
 
ciao
intanto come hai settato il campo birthday?
poi metti dei var_dump per vedere se la variabile $birthday si crea come dovrebbe.
poi da quello che vedo la data è nella forma 2012-04-03 quindi l'esplode non va fatto rispetto a '/' ma a '-'
 
ciao
intanto come hai settato il campo birthday?
poi metti dei var_dump per vedere se la variabile $birthday si crea come dovrebbe.
poi da quello che vedo la data è nella forma 2012-04-03 quindi l'esplode non va fatto rispetto a '/' ma a '-'

ciao, ho fatto un pò di prove...


l'inserimento mi è riuscito ad fare in questo modo:
$birthday = date("".$_POST["inserimento_anno"]."-".$_POST["inserimento_mese"]."-".$_POST["inserimento_giorno"]."");
non so se è giusto..

dittemi voi..
e mi sono accorto che viene solo autoselezionato il giorno:

PHP:
<select name="inserimento_giorno">
<?php
for ($i = 1; $i <= 31; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[0]) && $data_explode[0] == $i) {
    echo " selected='selected'"; 
  }
  
echo ">$i</option>";
}

?></select> <select name="inserimento_mese">
<?php
for ($i = 1; $i <= 12; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[1]) && $data_explode[1] == $i) {
   echo " selected='selected'"; 
  }
echo ">$i</option>";
}
?> </select>
 <select name="inserimento_anno">
<?php
for ($i=1900; $i<=date("Y"); $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[2]) && $data_explode[2] == $i) {
   echo " selected='selected'"; 
  }
echo ">$i</option>";
}
?> </select>

come mai?


ma poi come mai nel db la salva come 2012-03-04
e qui nell'help di php e cosi?
<?php
// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$today = date("H:i:s"); // 17:16:18
?>

grazie mille.
 
ciao
scusa una cosa, ma cosa hi dentro
$_POST["inserimento_anno"]
$_POST["inserimento_mese"]
$_POST["inserimento_giorno"]
?
se per caso hai (es.)
$_POST["inserimento_anno"] => 2012
$_POST["inserimento_mese"] => 04
$_POST["inserimento_giorno"] => 03
cioe dei valori di data
non ti serva la funzione date(), ma semplicemente
PHP:
$birthday = $_POST["inserimento_anno"]."-".$_POST["inserimento_mese"]."-".$_POST["inserimento_giorno"];
 
uuu, grazie mille..

per ora lo script è cosi e come ho detto mi autoseleziona da solo solamente il giorno..
l'anno e il mese no.

ho sbagliato qualcosa io nei if ?

nel campo birthday c'è : 1900-01-13


codice:
PHP:
<?php

require_once(dirname(__FILE__) . '/include.php');

checkLogin('1 2 3');
	
	$id_utenti = (int)$_SESSION['id_utente'];
	//Controllo se prelevare informazioni
	//relative a news da aggiornare...

		//Query SQL
		$strSQL = "SELECT *, DATE_FORMAT(birthday, '%d/%m/%Y') as data_it FROM utenti"
                . " WHERE id = $id_utenti"; 
		//Eseguo la query e recupero i dati
		$result = mysql_query($strSQL);
		
if(empty($id_utenti)) {
		echo "ID non specificato";
}elseif (mysql_num_rows($result) == 0) { echo "Record non trovato"; }
		else
		{
		
		$row = mysql_fetch_array($result);
		
		//recupero dati...
		$name = $row['name'];
		$firstname = $row['firstname'];
		$birthday = $row["data_it"];
		$note = $row["note"];
		$_sesso = $row["sesso"];
    
       $data_explode = explode('-', $birthday);
        // $data_explode[0] sarà il giorno
        // $data_explode[1] sarà il mese
        // $data_explode[2] sarà l'anno  
   
		//Libero la memoria
		mysql_free_result($result);


// Se il modulo viene inviato...
if(isset($_POST['submit']))
{	
	// Dati Inviati dal modulo
	$name = (isset($_POST['name'])) ? trim($_POST['name']) : '';	
	$firstname = (isset($_POST['firstname'])) ? trim($_POST['firstname']) : '';	
	$sesso = (isset($_POST['sesso'])) ? trim($_POST['sesso']) : '';	
    $birthday = $_POST["inserimento_anno"]."-".$_POST["inserimento_mese"]."-".$_POST["inserimento_giorno"];  
	$note= (isset($_POST['note'])) ? trim($_POST['note']) : '';

	// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
	if (!get_magic_quotes_gpc()) {
		$name = addslashes($name);
		$firstname = addslashes($firstname);
		$sesso = addslashes($sesso);
		$birthday = addslashes($birthday);
		$note = addslashes($note);
	}
	
	$id_utente = $_SESSION["id_utente"];
	
$strSQL = mysql_query("UPDATE utenti SET"
				. " name = '$name',"
				. " firstname = '$firstname',"
				. " sesso = '$sesso',"
				. " birthday = '$birthday',"
				. " note='$note'"
				. " WHERE id = $id_utente");
	
	if($strSQL){
		$msg =  "Modificato<br>";
		$msg .="";
	}else{
		$error  = "Errori riscontrati durante l'inserimento<br>";
		$error ."Errore: ".mysql_error();
		echo $strSQL;
	}
	
}

if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	
if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {
?>
<p>Questa  &egrave;  la scheda di <?php echo $_SESSION["name"]; ?></p>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
 Nome<input name="name" type="text" id="name" value="<?php if(isset($name)){echo $name;}else { echo $name; }?>"/><br />
 Cognome<input name="firstname" type="text" id="firstname" value="<?php if(isset($firstname)){echo $firstname;}else { echo $firstname;}?> " /><br />
 Sesso:
<input type="radio" name="sesso" value="M" <?php if($_sesso=="M") echo 'checked="checked"'?>/>Maschio
 <input type="radio" name="sesso" value="F" <?php if($_sesso=="F") echo 'checked="checked"'?> />Femmina<br/>
Compleanno	
<select name="inserimento_giorno">
<?php
for ($i = 1; $i <= 31; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[0]) && $data_explode[0] == $i) {
    echo " selected='selected'"; 
  }
  
echo ">$i</option>";
}

?></select> 
<select name="inserimento_mese">
<?php
for ($i = 1; $i <= 12; $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[1]) && $data_explode[1] == $i) {
   echo " selected='selected'"; 
  }
echo ">$i</option>";
}
?></select>
 <select name="inserimento_anno">
<?php
for ($i=1900; $i<=date("Y"); $i++) {
  echo "<option value=\"$i\"";
  if(isset($data_explode[2]) && $data_explode[2] == $i) {
   echo " selected='selected'"; 
  }
echo ">$i</option>";
}
?></select>
<br />
 Note<textarea cols="40" rows="5" name="note"><?php if(isset($note)){echo $note;}else { echo $note; }?></textarea><br />
 <input name="submit" type="submit" value="Modifica" /><br />
</form>
<?php } 
}?>
 
Ciao,

se il POST non è settato la data la hai in formato dd/mm/yyyy come da query che fai ( DATE_FORMAT(birthday, '%d/%m/%Y') )
PHP:
$birthday = $row["data_it"];

quindi l'explode va con lo slash

PHP:
$data_explode = explode('/', $birthday);


se invece è settato ci va il "-" ma cambia anche l'ordine dell array
 
Potresti fare cosi

se il post non è settato :

PHP:
$birthday = $row["data_it"];

    $data_explode = explode('/', $birthday);
    $gg = $data_explode[0];
    $mm = $data_explode[1];
    $aa = $data_explode[2];

se invece è settato :

PHP:
$birthday = $_POST["inserimento_anno"] . "-" . $_POST["inserimento_mese"] . "-" . $_POST["inserimento_giorno"];
        $data_explode = explode('-', $birthday);
        $gg = $data_explode[2];
        $mm = $data_explode[1];
        $aa = $data_explode[0];

le select diventeranno :

PHP:
<?php
                for ($i = 1900; $i <= date("Y"); $i++) {
                    echo "<option value=\"$i\"";
                    if ($aa == $i) {
                        echo " selected='selected'";
                    }
                    echo ">$i</option>";
                }
                ?>
 
grazie mille con ultimi script mi funziona benissimo..

ti ringrazio molto criric .. ora mi metto a lavoro su altre cose..

grazie mille.
 
ciao
eventualmente puoi mettere prima dell'explode
PHP:
<?php
//....
$birthday = strtr($birthday, '/', '-'); //o viceversa $stringa = strtr($stringa, '-', '/');
//.....
?>
in questo modo non ti devi preuccupare se la data è formattata con / o con -
 

Discussioni simili