我想拔出我的头发试图解决这个问题......
<?php
include('connection.php');
$template = $_GET['templateID'];
$campaign = $_GET['campaignID'];
// Grab everything in the campaign manager
$cm = mysql_query("SELECT * FROM campaign_manager WHERE campaign ='$campaign'") or die(mysql_error());
while($temp = mysql_fetch_array($cm)){
//Checks if Template is already attached
if($temp['paragraph'] == $template){
echo 'Template is already attached - <a href="http://general:8888/templates">Back</a>';
} else {
if($temp['paragraph'] == '0' || $temp['paragraph'] == null ){
mysql_query("UPDATE campaign_manager SET paragraph = '$template' WHERE campaign = '$campaign'") or die(mysql_error());
}
else {
$geo = $temp['geo'];
$list = $temp['list'];
mysql_query("INSERT INTO campaign_manager(campaign,paragraph,geo,list) VALUES('$campaign','$template','$geo','$list')");
}
}
}
?>
我的第一个IF正在检查DUP。如果不是,则检查该字段是0还是NULL。如果要检查那么它应该在“活动经理”中添加新记录。虽然目前它显示了第一个IF&amp;的回声。它将重复记录添加到广告系列管理器中。为什么&amp;这是怎么回事?
答案 0 :(得分:2)
这是一个while循环,是否可能导致问题? 两条记录很容易使其回显和更新。
检查您的代码以查看该网页是否也会刷新。
答案 1 :(得分:1)
没有。这根本不可能。你可能在某个地方有这部分代码而且它导致了2次执行
答案 2 :(得分:0)
让我们尝试一些事情:
首先,你有很多安全漏洞,所以我不建议任何人使用上面的代码,因为潜在的XSS和SQL注入漏洞。您正在从'GET'传递参数并将其直接放入查询值中。
这样做的正确方法是可以搜索到的:
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
通过PDO(首选)或mysql_real_escape的PHP SQLi预防措施可以在php.net手册中找到,通过对MySQL PDO进行简单的谷歌搜索。
... grr php ...
好的下一步,您的分支逻辑有点缺陷。让我们分解它来处理它。
if($temp['paragraph'] == $template){
echo 'Template is already attached - <a href="templates">Back</a>';
} elseif ($temp['paragraph'] == '0') {
mysql_query("UPDATE campain_manager SET paragraph = '$template' WHERE campaign = $campain'") or die(mysql_error());
}
elseif ($temp['paragraph'] == null ){
mysql_query("UPDATE campaign_manager SET paragraph = '$template' WHERE campaign = '$campaign'") or die(mysql_error());
}
else
{ $geo = $temp['geo'];
$list = $temp['list'];
mysql_query("INSERT INTO campaign_manager(campaign,paragraph,geo,list) VALUES('$campaign','$template','$geo','$list')");
}
}
}
?>
现在我不是交易开发人员,这对许多人来说感觉不正确,我认为你可能会重新考虑你的代码并使其变小。如果可以的话,我也会尝试让它更具功能性。顺便说一句,我没有时间纠正上述所有问题,让我告诉你,我上面的代码也很脆弱。要正确更正它,请将mysql_query替换为mysql_real_escape_string。还要确保您不仅仅是从用户那里获取输入并且:
A)对其进行不正确的消毒, B)输出不正确。
不要信任所有客户端代码,服务器上的验证是可信的。不要提供服务器端代码客户端。
HTH
中号
答案 3 :(得分:0)
<?php
include('connection.php');
$template = $_GET['templateID'];
$campaign = $_GET['campaignID'];
// Grab everything in the campaign manager
$cm = mysql_query("SELECT * FROM campaign_manager WHERE campaign ='$campaign'") or die(mysql_error());
$match = 0;
while($temp = mysql_fetch_array($cm)){
if ($temp['paragraph'] == $template){
echo 'Template is already attached - <a href="http://general:8888/templates">Back</a>';
$match = 1;
}
}
$geo = $temp['geo'];
$list = $temp['list'];
if ($match == 0){
mysql_query("INSERT INTO campaign_manager(campaign,paragraph,geo,list) VALUES('$campaign','$template','$geo','$list')");
header('Location: http://general:8888/templates/');
}
?>
终于可以了。