我想首先说我是PHP的新手。以下代码是由一位不再能够提供帮助的熟人编写的,我正在尝试用它进一步开发一些其他的东西。我遇到了一个无法解决的问题。
explode数组用于将一系列命令分解为mysql语句中用于操作数据库的部分。
我遇到的问题是一些命令似乎有效,有些命令不合适。见下文:
if(isset ($_POST['commandline'])){
//handle cammand
$command = $_POST['commandline'];
$parts = explode(",",$command);
//print_r($parts);
//we know the first part is a command
//UPDATE NATURE CODE BY EVENT NUMBER WORKS
//PART 1 IS THE EVENT ID PART 2 IS THE NEW CALL TYPE
else if(preg_match("/UTE/",$parts[0])){
mysql_query("UPDATE runs SET calltype='{$parts[2]}' WHERE id='{$parts[1]}'");}
//UPDATE LOCATION EVENT NUMBER WORKS
//PART 1 IS THE EVENT ID PART 2 IS THE NEW LOCATION
else if(preg_match("/ULE/",$parts[0])){
mysql_query("UPDATE runs SET location='{$parts[2]}' WHERE id='{$parts[1]}'");}
//UPDATE DESCRIPTION EVENT NUMBER WILL NOT WORK
//PART 1 IS THE EVENT ID PART 2 IS THE NEW DESCRIPTION
else if(preg_match("/UDE/",$parts[0])){
mysql_query("UPDATE runs SET discrip='{$parts[2]}' WHERE id='{$parts[1]}'");}
else { header("Location: main.php?message=fail");
die;}
}
从我的评论中可以看出UTE和ULE命令有效,但是UDE命令不起作用。我觉得它与" UTE"有关。和" UDE"部分好像我改变了" UDE"一个随机的字母,如" Q"它会工作。
任何人都知道发生了什么以及如何获得" UDE"部分工作?非常感谢任何帮助。
答案 0 :(得分:1)
1)SQL注入危险
2)/ UDE没有特殊含义,因此' / UDE /'表现与' / ULE /'相同或' / ABC /'。
3)如果在deffective查询上方添加了一个echo,它会显示吗?
else if(preg_match("/UDE/",$parts[0])){
echo 'Do you see that line here?';
mysql_query("UPDATE runs SET discrip='{$parts[2]}' WHERE id='{$parts[1]}'");}
4)如果手动执行该查询会发生什么?
最后两点是一个告诉php和mysql错误的一般程序。
编辑: 如果你print_r($ parts)并且它是一个空数组,则$ party [0]无法匹配你的正则表达式。在这种情况下,您必须追踪,explode()失败的原因。在?commandline = to?commandline = xxx,yyy之后缩短部分;然后将其更改为重现错误所需的最低限度。
你的网址中的命令行之后的部分是否包含任何字符"? &安培; #" ?那将立即结束参数。