【发布时间】:2016-09-19 13:28:56
【问题描述】:
我在 MySQL 数据库中插入记录时遇到问题。 它插入 2 条或更多记录,而不是仅插入一行。 我检查了代码,文件中没有重复。 我正在使用自动填充脚本,因为它用于搜索栏。 当我在数据库中签入通知时,插入了两次相同的搜索查询,但来自不同的 IP 地址。 任何帮助将非常感激。
//Did the member search
if(isset($_GET['searchBar'])){
$criteria = mysql_real_escape_string($_GET['searchBar']);
$timest = time();
$today = date('Y-m-d');
$memberid = 0;
if(isset($_SESSION['MEMBER'])){
$memberid = $_SESSION['MEMBER'];
}
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
$mem_ip = get_client_ip();
}
if(isset($_GET['page']))
{
if (ctype_digit($_GET['page']))
{
$pageNum = $_GET['page'];
}
}
else{
if($criteria != ""){
$con=mysqli_connect("localhost","USER","MYPASSWORD","DB");
mysqli_query($con, "insert into search_queries
(search_query, timestamp, member_id, date, member_ip)
values
('$criteria', '$timest', '$memberid', '$today', '$mem_ip')");
}
}
【问题讨论】:
-
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST或$_GET数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
为此感谢一百万。我会做出正确的改变
-
如果您想追踪重复项,请在每个表单上生成一个唯一 ID 并将其添加到您的搜索记录表中。请记住,许多人习惯性地无缘无故地双击按钮。
-
好的,我会试试,让你知道我得到了什么
-
我在日志中得到了 2 个不同的 ID?这意味着页面正在重新加载还是什么?但我找不到这个重新加载。