PHP爆炸阵列问题

时间:2013-05-18 20:55:08

标签: php mysql explode

我想首先说我是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"部分工作?非常感谢任何帮助。

1 个答案:

答案 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之后缩短部分;然后将其更改为重现错误所需的最低限度。

Liekly理由:

你的网址中的命令行之后的部分是否包含任何字符"? &安培; #" ?那将立即结束参数。