面对PHP页面中的错误,该页面在我做了一些微小的更改之前工作正常。
错误原因是:$ type =(int)$ _ POST ['type'];
错误是:语法错误,意外''(T_ENCAPSED_AND_WHITESPACE),期待标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)
FUll代码如下。
<?php
require_once '../library/config.php';
require_once '../library/functions.php';
$action = isset($_GET['action']) ? $_GET['action'] : '';
switch ($action) {
case 'search' :
search();
break;
default :
// if action is not defined or unknown
// move to main user page
header('Location: index.php');
}
/*
search() function used to search hadrware, software with user given criteria.
*/`
function search()
{
$type = $_POST['type'];
$name = $_POST['name'];
$hsql = "SELECT a.hostname, a.username, a.cpumodel, a.servicetag, a.monitormodel, a.phonext
FROM assets a WHERE a.username LIKE '%$name%' ";
$ssql = "SELECT a.hostname, a.username, a.cpumodel, a.servicetag, a.monitormodel, a.phonext
FROM assets a WHERE a.username LIKE '%$name%' ";
$data = array();
if($type == 1){
$result = dbQuery($hsql);
if(dbNumRows($result) == 0) {
header('Location: ../view.php?v=search&error=' . urlencode('No Hardware Found. Please try Again.'));
}else {
while($row = dbFetchAssoc($result)){
extract($row);
$data[] = array('hname' => $hname, 'uname' => $uname, 'cmodel' => $cmodel, 'stag' => $stag, 'mmodel' => $mmodel, 'pext' => $pext);
}
$_SESSION [result_data] = $data;
header('Location: ../search');
}//else
}
else {
$result = dbQuery($ssql);
if(dbNumRows($result) == 0) {
header('Location: ../view.php?v=search&error=' . urlencode('No Software Found. Please try Again.'));
}else {
while($row = dbFetchAssoc($result)){
extract($row);
$data[] = array('hname' => $hname,
'uname' => $uname,
'cmodel' => $cmodel,
'stag' => $stag,
'mmodel' => $mmodel
'pext' => $pext);
}
$_SESSION[result_data] = $data;
header('Location: ../search');
}
}endif;
}
?>
答案 0 :(得分:1)
问题出在你的评论之后。你打开一个反引号(很可能是无意中),但不要关闭它。只需删除它,它应该再次工作。 你甚至可以在突出显示中看到它。
/*
search() function used to search hadrware, software with user given criteria.
*/`
/* ^ there it is */
另外我想指出,你的代码可能是sql注入漏洞。例如:
$type = $_POST['type'];
$name = $_POST['name'];
$hsql = "SELECT a.hostname, a.username, a.cpumodel, a.servicetag, a.monitormodel, a.phonext
FROM assets a WHERE a.username LIKE '%$name%' ";
$ssql = "SELECT a.hostname, a.username, a.cpumodel, a.servicetag, a.monitormodel, a.phonext
FROM assets a WHERE a.username LIKE '%$name%' ";
答案 1 :(得分:0)
您的评论未结束。
在最后一个大括号*/
}
或
如果您不希望所有代码都已注释,请在执行完后删除开放/*
function search() {
答案 2 :(得分:0)
问题在于变量名称中的大括号:
$type = (int)${_POST['type']}
正确的方式是没有花括号:
$type = (int)$_POST['type'];
答案 3 :(得分:0)
您在该功能上方的评论在结束评论标记后立即有一个反引号字符。这是导致问题的原因。
如果删除此反引号,则可以解决问题。它仍然无法正常工作,因为你给出的代码中还有一个编译错误,这是由于第64行末尾缺少逗号。如果你修复它,那么程序将运行,您会发现存在其他逻辑错误以及安全问题(但我会留下那些供您自行查找)。