0

我正在尝试使用 jquery 函数编写新记录。

$.post("insertuser.php",$("#rohanStart").serialize(),function(data){ 
    alert(data);
});

这似乎有效,我确实收到了带有回显状态的警报。问题是值没有被写入数据库。查询语句有问题吗?

mysql_query("INSERT INTO ajax_demo1( FirstName,LastName,Unit,Group,photo)
        VALUES (
            '".$arr['FirstName']."',
            '".$arr['LastName']."',
            '".$arr['Unit']."',
            '".$arr['Group']."',
            '".$arr['photo']."'
        )");

echo $arr['Group'];
4

1 回答 1

1

首先不要使用 jQuery 或任何框架,它们依赖于专有的 Microsoft JScript innerHTML 方法,该方法不能与 DOM 一起正常工作,从而在脚本中增加了大量的歧义。

其次,您没有正确地将进入数据库的数据转义,这是一个严重的安全问题。

第三,您的数据库查询方法没有考虑错误处理,您只是直接将查询转储并希望获得最好的结果。

您应该始终对您的查询进行编号并将其附上,如下所示。请注意,除了错误之外,最好预先失败条件,但是对于数据库结构,如果首先成功,则应该执行然后不能增加缩进(通过一个空格,而不是在您有五个屏幕可以水平滚动的情况下浪费此选项卡)所以您可以在自己的代码中可视化您所在的位置。

$query1 = "SELECT * FROM table_name WHERE something='value'";
$result1 = mysql_query($query1);

if ($result1)
{
 $row1 = mysql_fetch_assoc($result1);
}
else {mysql_error_report($query1,mysql_error(),__FUNCTION__);}

如果您的主标头包含(您确实为除 AJAX 之外的所有请求都包含主标头正确吗?)您应该有一个通用的 MySQL 错误处理功能,您可以使用它来记录 SQL 错误。

以下是通用数据库错误处理程序。您应该有 HTTP、JavaScript、PHP 和 SQL 错误的管理错误日志,这样您就可以查看和纠正访问者遇到的问题,而不是仅仅因为它们给您带来不便。

function mysql_error_report($q,$e,$f)
{
 if (isset($_SESSION['database']))
 {
  if (isset($_SESSION['id_member'])) {$id = $_SESSION['id_member'];} else {$id = 0;}
  if (isset($_SESSION)) {$session = mysql_real_escape_string(session_id());} else {$session = 0;}
  $ip = mysql_real_escape_string(getenv('REMOTE_ADDR'));

  $query = mysql_real_escape_string($q);
  $error = mysql_real_escape_string($e);
  $function = mysql_real_escape_string($f);
  if (isset($_SESSION['type'])) {$type = mysql_real_escape_string($_SESSION['type']);} else if (isset($_SESSION['cms_browser'])) {$type = 'Browser';} else {$type = 'Unknown';}
  if (isset($_SERVER['REQUEST_URI'])) {$url = $_SERVER['REQUEST_URI'];} else {$url = '';}
  if (isset($_SERVER['HTTP_USER_AGENT'])) {$ua = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);} else {$ua = '';}

  $query1 = "INSERT INTO log_errors_sql (id_session, type, id_user, date, ip, function, mysql_error, mysql_query, url, user_agent) VALUES ('$session', '$type', '$id', NOW(), INET_ATON('$ip'), '$function', '$error', '$query', '$url', '$ua')";
  $result1 = mysql_query($query1);

  if (!$result1) {mysql_error_report_mail($q,$e,$f,$ua);}
 }
 else {mysql_error_report_mail($q,$e,$f);}
}

通过使用这种方法,您将加强您的编码实践,使其更加严格。您不希望模棱两可,您希望对您的代码完全严格,因为您的编码中的主观性越少,您的代码就越能处理。

你的空白也很松散。

这...

INSERT INTO ajax_demo1( FirstName,LastName,Unit,Group,photo)

应该是这样的格式...

INSERT INTO ajax_demo1(FirstName, LastName, Unit, Group, photo)

你可能会问为什么保持这样的空白很重要,如果你没有花很多时间在查找和替换上(查看“高级查找和替换”,它适用于 wine/Linux 并且把废话吹走本机 Linux 控制台命令性能明智,而且非常便宜,支持正则表达式等)您会发现自己在眨眼间进行大规模站点范围的编辑,因为即使您的空白空间也是同样严格的方法。

如果您听从我的建议,请使用 AFR(高级查找和替换)来搜索(但不替换)“mysql_query”的所有实例并更正您编写的所有内容的格式。混合一些 AJAX 通知,当您仍在浏览器中时,您可以立即看到错误,而无需单个 alt-tab。我就是这样滚动的。

...当然,这样做会使您的调试更加容易。这不是鱼,这是钓鱼,希望对您有所帮助。

于 2012-07-28T23:55:19.723 回答