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

LIKEXML ドキュメントからクエリを実行する必要がある場合、 Xpathを介して行うのが最も簡単な方法です (すでに考えたように) contains()

$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 インジェクションにも注意を払います (これは、実際の例でフェッチするときに UTF-8 サニタイザーを見逃している可能性があります)$_POSTまた、入力を一般的にサニタイズするようにシステムをまだ構成していません)。

于 2013-11-02T19:39:12.610 に答える