0

大家好,我认识的使用 MySQL 进行此搜索的每个人LIKE '"%% $ _POST [" txtbuscar "]%%"',我现在正在使用 XML 执行此操作。我需要想出一个输入 txtbuscar。

下面的脚本我已经设法列出和分页,并搜索最重要的单词,但我相信这是一些东西,但不起作用,你能帮帮我吗?

XML

<listaccts>
    <acct>
        <disklimit>100M</disklimit>
        <diskused>100M</diskused>
        <domain>dominio.com.br</domain>
        <ip>123.124.125.126</ip>
        <user>Fulano</user>
        <plan>Plano1</plan>
    </acct>
    <acct>
        <disklimit>200M</disklimit>
        <diskused>200</diskused>
        <domain>dominio.com.br</domain>
        <ip>123.124.125.126</ip>
        <user>Fulano2</user>
        <plan>Plano2</plan>
    </acct>
</listaccts>

PHP

$accounts = $xmlapi->listaccts();
$xml = simplexml_load_string($accounts);

if ($_POST["txtBuscar"] == "ligar") {

    $busc = $_POST["buscarURL"];

    foreach ($xml->xpath('//acct') as $acct) {

        $minhaArray = $xml->xpath('//user[.>$busc]');

        $minhaArray = array();
        foreach ($xml->acct as $acct) {
            $minhaArray[] = array(
                    'domain' => (string)$acct->domain,
                    'user' => (string)$acct->user,
                    'ip' => (string)$acct->ip,
                    'disklimit' => (string)$acct->disklimit,
                    'diskused' => (string)$acct->diskused,
                    'plan' => (string)$acct->plan);
        }
    }

HTML

<form id="formBuscaClienteUrl" name="formBuscaClienteUrl" method="post" action="" class="sky-form" onsubmit="return false">
    <input name="txtBuscar" type="hidden" value="ligar" />
    <script language="javascript">document.formBuscaClienteUrl.buscarURL.focus();</script>
    <table width="100%" cellspacing="0" cellpadding="5">
        <tr>
            <td width="95%" style="padding-left:10px;">
                <input name="buscarURL" type="text"/>
            </td>
            <td width="5%"><button style="padding-left:10px;" type="submit" onclick="buscar('formBuscaClienteUrl')" class="button" >Localizar</button></td>
        </tr>
    </table>
</form>

//========================没关系==============

我做了一些调整,现在就起来了,以防万一。谢谢

$busc=$_POST["buscarURL"];

$expression = sprintf("/*/acct[contains(user, '$busc')]", $_POST["buscarURL"]);
$result = $xml->xpath($expression);

$minhaArray = array();
foreach($result as $account){
    $minhaArray[] = array(
        'domain'=>(string)$account->domain,
        'user'=>(string)$account->user,
        'ip'=>(string)$account->ip,
        'disklimit'=>(string)$account->disklimit,
        'diskused'=>(string)$account->diskused,
        'plan'=>(string)$account->plan,

    );

}
4

1 回答 1

0

如果您需要从 XML 文档中查询,最简单的通常是通过 Xpath(正如您已经想到的那样),LIKE您从 SQL 中知道的可能在您的情况下与contains()Xpath 相当:

$listaccts = new SimpleXMLElement($accounts);
$txtBuscar = 'lano';

$expression = sprintf('/*/acct[contains(user, %s)]', xpath_string($txtBuscar));
$result = $listaccts->xpath($expression);

foreach($result as $account) {
    printf("User..: %s\nDomain: %s\n", $account->user, $account->domain);
}

使用您的示例集输出:

User..: Fulano
Domain: dominio.com.br
User..: Fulano2
Domain: example.com.br

注意:就像在 SQL 中您需要处理 SQL 注入一样,我也通过将搜索值正确编码为字符串来处理 xpath 注入(当您从$_POST并且您的系统尚未配置为通常对输入进行清理)。

于 2013-11-02T19:39:12.610 回答