2012-04-04 47 views
0

我不断收到此错误,并且我试图在实际数组周围加上引号,没有任何工作。行情不在阵列的正确位置

解析错误:语法错误,意想不到的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING上线8

$id = $_GET['id']; 
$record = "SELECT `Name`, `Type`, `Size`, `Content` FROM election_candidates WHERE `ID` = '$id'"; 
$result = $db->query($record); 

foreach ($result as $results) { 
    header("Content-length: $results['Size']"); <---Line 8 
    header("Content-type: $results['Type']"); 
    header("Content-Disposition: attachment; filename=$results['Name']"); 

    // echo $results['Size']; 

    echo $results['Content']; 
} 

exit(); 

回答

1

尝试complex (curly) syntaxsymple syntaxconcatenation operator

// Added isset() and intval() 
$id = isset($_GET['id']) ? intval($_GET['id']) : 0; 
// Removed quotes from 'id'=... 
$record = "SELECT `Name`, `Type`, `Size`, `Content` FROM election_candidates WHERE `ID` = $id"; 
$result = $db->query($record); 

foreach ($result as $results) { 
    // complex (curly) syntax 
    header("Content-length: {$results['Size']}"); 
    // simple syntax (without quotes) 
    header("Content-type: $results[Type]"); 
    // using concatenation operator 
    header('Content-Disposition: attachment; filename='.$results['Name']); 

    // echo $results['Size']; 

    echo $results['Content']; 
} 

exit(); 

此外,你应该逃脱$_GET['id'],你不需要在MySQL中为整数引用。我在上面的代码中纠正了这两个“问题”。

您还可以添加LIMIT 1到SQL查询和删除foreach循环;)

+0

+1为防sqli – knittl 2012-04-04 13:24:53

+0

哇!感谢您的帮助:)我并不知道将整数引用到整数将会使我容易受到sqli的攻击。另外,为什么我们再次使用大括号? – wowzuzz 2012-04-04 13:31:00

+0

其实引号并不是真正的问题(MySQL正确处理它们)。问题在于任何人都可以将SQL代码写入GET变量'id'中,然后在SQL查询中执行该代码!我们使用曲线语法,因为您想访问关联数组。 – ComFreek 2012-04-04 13:33:16

0

,而不是

header("Content-length: $results['Size']"); 

你得写

header("Content-length: ".$results['Size']); 

header("Content-length: {$results['Size']}"); 

你必须在第9行和第10行做同样的事情

0

你不能在内插字符串中使用数组下标。你有两个选择:

'Content-Length: ' . $results['Size'] 
"Content-Length: {$results['Size']}" 
0

既然你在字符串中嵌套数组访问器,我想你想这句法:

"Content-length: {$results['Size']}" 
1

由于密钥是文字字符串,可以清除体内的报价:

header("Content-length: $results[Size]"); 

请参阅simple syntax部分中的示例。