【问题标题】:MySQL Timestamp Field Not Updating on Form SubmissionMySQL 时间戳字段未在表单提交时更新
【发布时间】:2012-05-27 10:11:47
【问题描述】:

我的网站 (mconchicago.com/Contact_Us) 上有一个联系我们提交表单。

它应该被设置为每次提交都会获得一个自动编号和一个当前时间戳。现在一切都在工作,除了时间戳,它把我带到了疯狂的边缘。每次都是零。

这是上传时记录的样子:

http://www.mconchicago.com/Screenshots/Records.jpg

这就是我配置时间戳字段的方式:

http://www.mconchicago.com/Screenshots/Structure.jpg

这是我最后一次尝试使 PHP 工作:

<?   
$id=$_POST['mysql_insert_id()']; 
$first_name=$_POST['first_name'];
$last_name=$_POST['last_name']; 
$company=$_POST['company'];
$email=$_POST['email'];
$address=$_POST['address']; 
$city=$_POST['city']; 
$state=$_POST['state'];
$zip=$_POST['zip'];
$phone=$_POST['phone'];
$reason=$_POST['reason'];
$comments=$_POST['comments'];
$timestamp=$_POST['UNIX_TIMESTAMP()'];
mysql_connect("emellis2002.db.9243147.hostedresource.com", "emellis2002", "Newpwd99@") or die(mysql_error()); 
mysql_select_db("emellis2002") or die(mysql_error()); 
mysql_query("INSERT INTO `data` VALUES ('$id', '$first_name', '$last_name', '$company', '$email', '$address', '$city', '$state', '$zip', '$phone', '$reason', '$comments', 'timestamp')");  
Print "Your information has been received.  Thank you for getting in touch.<br><br>"; 
Print "<a href=http://www.mconchicago.com/Contact_Us.html>CLICK HERE</a> to return to our web site." 
?> 

您可以从结构屏幕截图中看到,我尝试了许多不同的语法组合,但没有成功,在此过程中查看了许多论坛帖子。我错过了什么?

【问题讨论】:

  • 请注意,您的代码容易受到SQL injection 的攻击,这是一个严重的安全问题,您应该先使用 PHP 的内置 mysql_real_escape_string 函数转义您的 POST 变量,然后再将它们放入 INSERT 查询中来解决这个问题:)
  • 感谢您告诉我。我会阅读这些参考资料。
  • 不,使用 HTTPS 不会阻止 SQL 注入。基本上,您的代码中发生的事情是您从 POST 超全局变量中获取用户输入,然后将该输入直接插入到 MySQL 查询中。 HTTPS 仅确保您的服务器和客户端之间的连接的安全性。它不能保证客户不会向您发送错误的输入 - 只是所有输入,无论好坏,都会安全地发送给您,不会被任何人窃听。
  • 有道理。感谢您的及时回复。
  • 不客气!快乐编码:)

标签: php mysql html forms timestamp


【解决方案1】:

最好使用 MYSQL DEFAULT_VALUE 属性。

编辑表格并将 CURRENT_TIMESTAMP 放入 DEFAULT_VALUE。

每次在表中完成插入时,这将在时间戳列中插入 MYSQL Server 的当前时间戳。

【讨论】:

  • 我很困惑。这不是我激活的吗?我在设置所有内容时检查了默认列中的 CURRENT_TIMESTAMP 框。
  • 你能告诉我创建表的脚本吗?此外,如果您已经在表的 DEFAULT_VALUE 中设置了 CURRENT_TIMESTAMP,那么您不需要显式插入它。它会自动插入。
  • 我刚刚尝试从我的 PHP 中删除所有插入代码。现在,当我通过联系表格提交时,数据库中根本没有完成任何记录,即使我收到了一个肯定的上传确认消息并且没有错误。该表是分段创建的。那么原始创建脚本仍然是有效的参考吗?
  • 使用这个 alter 命令来改变表 - 'ALTER TABLE &lt;tablename&gt; CHANGE COLUMN timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;'将您的插入修改为 - 'INSERT INTO data VALUES ($id, $first_name, $last_name, $company, $email, $address, $city, $state@, ,$phone,$reason,$comments);'
  • 这是我使用的语法。它正在被拒绝。我究竟做错了什么? 'ALTER TABLE data CHANGE COLUMN timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;'
【解决方案2】:

几点:

$timestamp=$_POST['UNIX_TIMESTAMP()'];

您正在查看名为 UNIX_TIMESTAMP() 的 POST 值。您可能打算:

$timestamp = 'UNIX_TIMESTAMP()';

还有:

mysql_query("INSERT INTO `data` VALUES ('$id', '$first_name', '$last_name', '$company', '$email', '$address', '$city', '$state', '$zip', '$phone', '$reason', '$comments', 'timestamp')");  

您正在尝试将字符串 timestamp 插入到字段中。你的意思可能是$timestamp

【讨论】:

  • 感谢您的回复。我做了你上面提到的两个改变。但它仍然会全部归零。
  • 刚刚将其替换为 $timestamp= 'NOW()';但它仍然会全部归零。
  • 我明白了 - 将您的呼叫更改为 mysql_query("INSERT INTO `data` VALUES ('$id', '$first_name', '$last_name', '$company', '$email', '$address', '$city', '$state', '$zip', '$phone', '$reason', '$comments', $timestamp)"); - 您不希望在最后一个字段中使用单引号
  • 我只是删除了单引号,同时保留了 $timestamp="NOW(); 此时后端根本没有创建任何数据库记录。虽然我收到了表单数据,但似乎已被丢弃没有错误信息。
  • 您可能想查看打印/回显 mysql_error 以了解数据库告诉您的内容 - php.net/manual/en/function.mysql-error.php
猜你喜欢
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 2021-10-29
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多