2010-05-01 2 views
0

J'ai créé un formulaire qui soumet des données à une base de données MySQL, mais les champs Date, Heure, Année et Mois reviennent constamment à la même date (1er janvier 1970) malgré le fait que Je soumets l'information à la base de données le formulaire me montre la date actuelle, l'heure etc. Je l'ai déjà défini de sorte que les champs d'heure et de date affichent automatiquement l'heure et la date actuelles. Quelqu'un pourrait-il m'aider s'il vous plaît avec ceci.Formulaire de soumission d'informations incorrectes à la base de données MySQL

Forme:

<html> 

<head> 
<title>Ultan's Blog | New Post</title> 
<link rel="stylesheet" href="css/newposts.css" type="text/css" /> 
</head> 

<body> 
<div class="new-form"> 
<div class="header"> 
<a href="edit.php"><img src="images/edit-home-button.png"></a> 
</div> 
<div class="form-bg"> 
<?php 
if (isset($_POST['submit'])) { 

    $month = htmlspecialchars(strip_tags($_POST['month'])); 
    $date = htmlspecialchars(strip_tags($_POST['date'])); 
    $year = htmlspecialchars(strip_tags($_POST['year'])); 
    $time = htmlspecialchars(strip_tags($_POST['time'])); 
    $title = htmlspecialchars(strip_tags($_POST['title'])); 
    $entry = $_POST['entry']; 

     $timestamp = strtotime($month . " " . $date . " " . $year . " " . $time); 

    $entry = nl2br($entry); 

    if (!get_magic_quotes_gpc()) { 
     $title = addslashes($title); 
     $entry = addslashes($entry); 
    } 

    mysql_connect ('localhost', 'root', 'root') ; 
    mysql_select_db ('tmlblog'); 

$sql = "INSERT INTO php_blog (timestamp,title,entry) VALUES ('$timestamp','$title','$entry')"; 

    $result = mysql_query($sql) or print("Can't insert into table php_blog.<br />" . $sql . "<br />" . mysql_error()); 

    if ($result != false) { 
     print "<p class=\"success\">Your entry has successfully been entered into the blog. </p>"; 
    } 

    mysql_close(); 
} 
?> 

<?php 
$current_month = date("F"); 
$current_date = date("d"); 
$current_year = date("Y"); 
$current_time = date("H:i"); 
?> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 

<input type="text" name="month" value="<?php echo $current_month; ?>" /> 
<input type="text" name="date" value="<?php echo $current_date; ?>" /> 
<input type="text" name="year" value="<?php echo $current_year; ?>" /> 


<input type="text" name="time" id="time" size="5"value="<?php echo $current_time; ?>" /> 

<input class="field2" type="text" id="title" value="Title Goes Here." name="title" size="40" /> 

<textarea class="textarea" cols="80" rows="20" name="entry" id="entry" class="field2"></textarea> 

<input class="field" type="submit" name="submit" id="submit" value="Submit"> 

</form> 
</div> 
</div> 
</div> 
<div class="bottom"></div> 
<!-- //End Wrapper!--> 
</body> 

</html> 

</html> 

alt text http://i42.tinypic.com/2ns4755.jpg

Pour une raison quelconque les messages sont soumis sans horodatage et retournez à une horodatage par défaut.

Répondre

0

Vous avez trois zones de texte nommées date. Étant donné que ne sont pas définis $_POST['month'] et $_POST['year'], strtotime() ne peut pas comprendre l'horodatage correct et la requête SQL ressemble à ceci:

INSERT INTO php_blog (timestamp,title,entry) VALUES ('','Title Goes Here.','') 

Modifiez les noms des éléments d'entrée à ce que votre code PHP attend:

<input type="text" name="month" value="<?php echo $current_month; ?>" /> 
<input type="text" name="date" value="<?php echo $current_date; ?>" /> 
<input type="text" name="year" value="<?php echo $current_year; ?>" /> 

Après avoir fait cela, strtotime() sera en mesure d'analyser la date et d'insérer la bonne valeur dans la requête.

INSERT INTO php_blog (timestamp,title,entry) VALUES ('1272738360','Title Goes Here.','') 
+0

J'ai mis à jour cette question s'il vous plaît vérifier les nouvelles informations ... s'il vous plaît aider. –

+0

Mais vous n'avez pas réparé votre formulaire. Après l'avoir réparé j'ai couru votre code sur ma machine et un horodatage correct a été généré. – Mike

+0

Je n'ai pas corrigé le code ici, j'ai ajouté une image qui montre comment elle envoie un horodatage de '0'. J'ai corrigé le code sur mon ordinateur. J'ai mis à jour le formulaire mais il ne le soumet toujours pas à mon blog avec l'horodatage correct. –

0

On dirait que strtotime ne comprend pas le format que vous lui donnez.
Utilisez plutôt mktime. Quoi qu'il en soit, vous devez toujours déboguer votre code, c'est-à-dire imprimer la requête pour voir si quelque chose ne va pas.

Ou envisager d'utiliser colymn type mysql-prise en charge, ou datedatetime

Vous pouvez être confus un unix timestamp qui est juste nombre mysql ans colonne de type d'horodatage qui est une chaîne de 2010-05-01 00:00:00

+0

J'ai essayé maintenant, mais maintenant encore affiche la date et l'heure actuelles, mais soumet comme le 23 juillet 2010. –

+0

@ThatMacLad quel type de champ d'horodatage dans votre base de données? si ce n'est pas 'int' vous ne devriez pas stocker un timestamp unix là –

+0

J'ai mis à jour cette question s'il vous plaît vérifier les nouvelles informations ... s'il vous plaît aider. –

1

Des sons comme votre formulaire donnent à votre base de données une très faible quantité de "Ticks". Notez que vous avez un avec name = "date" et id = "date" trois fois. C'est probablement votre problème. Changez ces noms et identifiants, utilisez mois, année, date (selon votre "postback").

+0

J'ai mis à jour cette question s'il vous plaît vérifier les nouvelles informations ... s'il vous plaît aider. –

0

Il se pourrait que strtotime ne reconnaît pas le format que vous soumettez votre date

Essayez un format YYYY/MM/DD classique.

$timestamp = strtotime("$year/$month/$date $time"); 
+0

J'ai mis à jour cette question s'il vous plaît vérifier les nouvelles informations ... s'il vous plaît aider. –

+0

@ThatMacLad oui, le 1er janvier 1970 est l'horodatage '0'. Avez-vous essayé ma suggestion ou l'un des autres? –

+0

J'ai essayé toutes les suggestions précédentes. Votre suggestion semble définir l'horodatage par défaut au 23 juillet 2010. –

Questions connexes