【问题标题】:Facing an error in a PHP page which was working fine before i made some minute changes在我进行一些微小的更改之前,在一个运行良好的 PHP 页面中遇到一个错误
【发布时间】:2018-08-27 15:35:18
【问题描述】:

在我进行一些细微更改之前,PHP 页面运行良好。

错误原因是:$type = (int)$_POST['type'];

错误是:语法错误,意外 '' (T_ENCAPSED_AND_WHITESPACE),需要标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)

完整代码如下。

<?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;

}

?>

【问题讨论】:

  • 你的代码在评论中??
  • 你能告诉我们你的 HTML 代码吗?
  • 你能发送你的实际代码吗!
  • 我的错。我会发布完整的代码
  • 您执行完全相同的查询两次。天才。

标签: php html mysql


【解决方案1】:

您的评论没有关闭。

将结束 */ 放在最后一个大括号 } 之前

或者

如果您不想让所有代码都被注释掉,那么请删除在
function search() {之后打开/*

【讨论】:

  • 我的错,一定是在发帖时错误地将代码作为评论。
【解决方案2】:

问题在于变量名中的大括号:

$type = (int)${_POST['type']}

正确的方式是不用大括号:

$type = (int)$_POST['type'];

【讨论】:

  • 解析错误:语法错误,意外的 '' (T_ENCAPSED_AND_WHITESPACE),在 C:\wamp64\www\test\search\process 中需要标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)。第28行的php
  • 请上传最新版本的脚本。
【解决方案3】:

问题出在您的评论之后。您打开一个反引号(很可能是无意的),但不要关闭它。只需将其删除,它应该会再次工作。 您甚至可以在突出显示中看到它。

/*
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%' "; 

【讨论】:

  • 感谢 Manuel 的帮助,将调查我代码中的安全问题。享受你的一天!
【解决方案4】:

您在函数上方的评论在结束评论标记之后有一个反引号字符。这就是您的问题的原因。

如果您删除此反引号,那么您将解决问题。它仍然无法工作,因为您给出的代码中还有另一个编译错误,这是由于第 64 行末尾缺少逗号。如果您也修复了该问题,那么程序将运行,您会发现还有其他逻辑错误和安全问题(但我会留给您自己查找)。

【讨论】:

  • 感谢 Simba 的帮助。在几分钟内得到所有其他错误。关于安全问题,它将在一个非常安全的网络中本地托管,但我仍然会努力解决这个问题。谢谢冷杉帮助伙伴!
  • 安全问题也是错误——尝试在表单中输入“O'Reilly”之类的名称,看看会发生什么。这种事情确实会导致严重的安全漏洞(是的,即使是内部系统,您也应该尊重安全性),但它也会产生很好的老式错误。你真的必须修复它。 :)
  • 明白了!感谢您的提醒。我在上面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
相关资源
最近更新 更多