【问题标题】:Error in php code, not update date tablephp代码错误,不更新日期表
【发布时间】:2013-02-08 09:52:22
【问题描述】:

我有 unsub.php 代码:

<?php 
include("config.inc.php");
$id=$_REQUEST['id'];
$time=$_REQUEST['t'];
$cid=0;
if(isset($_REQUEST['cid']))
$cid=$_REQUEST['cid']

if($cid==0)
mysql_query("update email_advt set unsubstatus=1 where id=$id AND time=$time");
else
{
if($mysql->total(email_advt","id=$id AND time=$time")>0)
mysql_query("delete from ea_em_n_cat where eid=$id AND cid=$cid");
}

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<title> Unsubscribe Email</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
Your email has been successfully unsubscribed from our mailing list. <br>
</body>
</html>

还有这个表:

CREATE TABLE IF NOT EXISTS `email_advt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(250) NOT NULL DEFAULT '',
  `unsubstatus` int(11) NOT NULL DEFAULT '0',
  `time` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `ea_em_n_cat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `eid` int(11) NOT NULL DEFAULT '0',
  `cid` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

当访问 unsub.php?id=1&t=1360306174&cid=0
不显示 您的电子邮件已成功从我们的邮件列表中退订。
怎么了 ?访问 unsub.php?id=1&t=1360306174&cid=0

时 unsubstatus 未设置为 1

【问题讨论】:

  • 这甚至不是有效的 PHP 语法。
  • 您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
  • 在您的查询中。 mysql_query("更新 email_advt 设置 unsubstatus=1 其中 id=$id AND time=$time");添加一个`到时间,所以它将是time。您遇到此问题是因为时间是 MySQL 中的内置函数。抱歉,重音没有及时显示出来。为您的 time 列添加重音。
  • 不要问问题被描述为“它不起作用”的问题。做一些调试。告诉我们您收到的错误消息。通过代码跟踪数据。告诉我们您认为它在代码中的哪些地方出错了。
  • 不显示错误信息!只有空白页!

标签: php mysql


【解决方案1】:

使用这个查询,你错过了反引号`

mysql_query("update email_advt set `unsubstatus`=1 where `id`=$id AND `time`=$time");

【讨论】:

  • 如果用户不在列名周围加上反引号怎么办?
  • @JW。 timemysql 中的保留字,在这里用作列名,因为查询失败。
  • 是的 TIME 是保留关键字,但允许不带反引号,就像 DATE
【解决方案2】:

我认为你这里有错误:

if($mysql-&gt;total(email_advt","id=$id AND time=$time")&gt;0)

试试

if($mysql-&gt;total("email_advt"," id=$id AND time=$time")&gt;0)

虽然我不太确定您想要获取什么或 total() 方法的参数。

【讨论】:

  • 这段代码有什么作用? $mysql-&gt;total("email_advt"," id=$id AND time=$time")?
  • 参数列表是什么?
【解决方案3】:

如果您使用内置函数作为列名,则需要将其括在重音符中。即在您的查询中,您使用的是列 time,它是 MySQL 中的内置函数。

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多