0

まず最初に、英語が下手だったことをお詫びします (私は 6 か月しか英語を学んでいません)。

私は mysql db を使用している Web サイトを作成しています。何らかの理由で、データベースの介入を必要とするフォームを使用する必要があるため、ajax を使用してオートコンプリートを実行するスクリプトを確認しました。数千を超えるエントリの選択を表示しないように、データベースで調査するための入力タイプのテキスト。

だから私はこのスクリプトを持っています:

ページ nouveau dossier.php で

  <?php $monfichier = fopen('liste_clients.txt', 'w');

// 2 : on lit la première ligne du fichier
$ligne = fgets($monfichier);
ftruncate($monfichier,0);
$sql2 = "SELECT code_client, nom_commercial FROM client";
$re2 = mysql_query($sql2) or die(__LINE__.mysql_error().$sql2); 
while($d2 = mysql_fetch_assoc($re2)) {
fputs($monfichier, $d2['nom_commercial'].' '.$d2['code_client'].'|');
fputs($monfichier, $d2['code_client'].' '.$d2['nom_commercial'].'|');
         }
// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);
?> 

このスクリプトは、データベースのすべてのエントリをファイル テキストに保存する必要があります。

この後、私はこの ajax スクリプトを持っています:

<div id="results"></div>
<script language="JavaScript">
(function() {
var searchElement = document.getElementById('search'),
results = document.getElementById('results'),
selectedResult = -1, // Permet de savoir quel résultat est sélectionné : -1 signifie «             aucune sélection »
previousRequest, // On stocke notre précédente requête dans cette variable
previousValue = searchElement.value; // On fait de même avec la précédente valeur



function getResults(keywords) { // Effectue une requête et récupère les résultats

var xhr = new XMLHttpRequest();
xhr.open('GET', 'autocomplete.php?s='+ encodeURIComponent(keywords));

xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {

displayResults(xhr.responseText);

}
};

xhr.send(null);

return xhr;

}

function displayResults(response) { // Affiche les résultats d'une requête

results.style.display = response.length ? 'block' : 'none'; // On cache le conteneur si on n'a pas de résultats

if (response.length) { // On ne modifie les résultats que si on en a obtenu

response = response.split('|');
var responseLen = response.length;

results.innerHTML = ''; // On vide les résultats

for (var i = 0, div ; i < responseLen ; i++) {

div = results.appendChild(document.createElement('div'));
div.innerHTML = response[i];

div.onclick = function() {
chooseResult(this);
};

}

}

}

function chooseResult(result) { // Choisit un des résultats d'une requête et gère tout ce qui y est attaché

searchElement.value = previousValue = result.innerHTML; // On change le contenu du champ de recherche et on enregistre en tant que précédente valeur
results.style.display = 'none'; // On cache les résultats
result.className = ''; // On supprime l'effet de focus
selectedResult = -1; // On remet la sélection à zéro
searchElement.focus(); // Si le résultat a été choisi par le biais d'un clic, alors le focus est perdu, donc on le réattribue

}



searchElement.onkeyup = function(e) {

e = e || window.event; // On n'oublie pas la compatibilité pour IE

var divs = results.getElementsByTagName('div');

if (e.keyCode == 38 && selectedResult > -1) { // Si la touche pressée est la flèche « haut »

divs[selectedResult--].className = '';

if (selectedResult > -1) { // Cette condition évite une modification de childNodes[-1], qui n'existe pas, bien entendu
divs[selectedResult].className = 'result_focus';
}

}

else if (e.keyCode == 40 && selectedResult < divs.length - 1) { // Si la touche pressée est la flèche « bas »

        results.style.display = 'block'; // On affiche les résultats

        if (selectedResult > -1) { // Cette condition évite une modification de childNodes[-1], qui n'existe pas, bien entendu
            divs[selectedResult].className = '';
        }

        divs[++selectedResult].className = 'result_focus';

    }

    else if (e.keyCode == 13 && selectedResult > -1) { // Si la touche pressée est « Entrée »

        chooseResult(divs[selectedResult]);

    }

    else if (searchElement.value != previousValue) { // Si le contenu du champ de recherche a changé

        previousValue = searchElement.value;

        if (previousRequest && previousRequest.readyState < 4) {
            previousRequest.abort(); // Si on a toujours une requête en cours, on l'arrête
        }

        previousRequest = getResults(previousValue); // On stocke la nouvelle requête

        selectedResult = -1; // On remet la sélection à zéro à chaque caractère écrit

    }

};

})();

ページ autocomplete.php には次のものがあります。

<?php
 $data = ((file_get_contents('liste_clients.txt'))); // Récupération de la liste complète des villes
    $dataLen = count($data);

    sort($data); // On trie les villes dans l'ordre alphabétique

    $results = array(); // Le tableau où seront stockés les résultats de la recherche

    // La boucle ci-dessous parcourt tout le tableau $data, jusqu'à un maximum de 10 résultats

        for ($i = 0 ; $i < $dataLen && count($results) < 10 ; $i++) {
            if (stripos($data[$i], $_GET['s']) === 0) { // Si la valeur commence par les mêmes caractères que la recherche

                array_push($results, $data[$i]); // On ajoute alors le résultat à la liste à retourner

            }
        }

    echo implode('|', $results); // Et on affiche les résultats séparés par une barre verticale |

    ?>

問題は、スクリプトを使用すると次のエラーが表示されることです:

問題を解決する方法がわかりません。

もう1つは、入力で選択されたエントリの結果を使用して、フィールド「code_client」を表示する必要があるため、フィールド「numero_dossier」が表示される別のフィールドを表示したいということです。

だから私はこのスクリプトを持っていて、2つの入力タイプのテキストを入力したいと思います。

たとえば、ユーザーが Ecf を検索すると、最初の入力タイプのテキストに code_client '1566' が表示され、2 番目の入力タイプに n_doss '110015666223' が表示されます。

情報はこのスキーマのように私のデータベースに登録されています

テーブル: クライアント フィールド:

id code_client n_dosss address zip_code contry tel fax gsm e_mail

等々。

よろしくお願いいたします。

4

2 に答える 2

1

jQuery AJAX を使用しないのはなぜですか? シンプルで、すべてのブラウザと互換性があります。

$.ajax({
    url: 'ajax/test.html',
    success: function(data) {
        $('.result').html(data);
        alert('Load was performed.');
    }
});

したがって、jQuery を使用して適切な要素を参照し、関数を使用して内部 HTML を更新できます.html()。これが役に立てば幸いです。

于 2012-06-06T13:47:21.740 に答える
0

表示されるエラー

Warning: sort() expects parameter 1 to be array, string given in C:\wamp\www\NEOGETCASH\GESTIONNAIRE\autocomplete.php on line 5   

なぜなら、はをfile_get_contents()返しますstring
。sortメソッドを使用するには、最初に文字列を配列に変換する必要があります。delimiterこれは、ファイル内のさまざまなエントリを区切るが存在する場合に可能になります。
あなたはすることができます:

$dataStr = file_get_contents('liste_clients.txt');
$data = explode($delimiter,$dataStr );
sort($data);
..... //continue with your code :)

お役に立てれば

于 2012-06-06T13:52:22.850 に答える