Живой поиск не работает с апострофами php / javascript - PullRequest
0 голосов
/ 17 марта 2011

У меня есть этот живой поиск, который прекрасно работает, пока название компании в моей базе данных mysql не содержит апострофии.пример - вот и все.Поиск, который я использую, от кого-то, кто разработал его с помощью php5.Мне удалось изменить код для работы с моим, но мне не удалось выбрать имя из списка с апострофом.Когда я выбираю имя, поле ввода остается пустым.

<div>
    <?  print"<form method=\"post\" action=ordernew.php?action=startneworder>"; ?>
        <div>
            Customer Name:
            <br />
            <input type="text" size="30" name="company" value="" id="inputString" onkeyup="lookup(this.value);" onblur="fill();" />
        </div>

        <div class="suggestionsBox" id="suggestions" style="display: none;">
            <img src="images/upArrow.png" style="position: relative; top: -12px; left: 30px;" alt="upArrow" />
            <div class="suggestionList" id="autoSuggestionsList">
                &nbsp;
            </div>
        </div>
        <? print"<input type=submit value=Continue />"; ?>
    </form>
</div>

код выше - это то, что находится на моей форме.код ниже - это то, что делает всю работу.

<?php
require_once("functions.php");

// dbconn (false);// loggedinonly ();
// Реализация PHP5 - использует MySQLi.// mysqli ('localhost', 'yourUsername', 'yourPassword', 'yourDatabase');$ db = new mysqli ($ mysql_host, $ mysql_user, $ mysql_pass, $ mysql_db);

if(!$db) {
    // Show error if we cannot connect.
    echo 'ERROR: Could not connect to the database.';
} else {
    // Is there a posted query string?
    if(isset($_POST['queryString'])) {
        $queryString = $db->real_escape_string($_POST['queryString']);

        // Is the string length greater than 0?

        if(strlen($queryString) >0) {
            // Run the query: We use LIKE '$queryString%'
            // The percentage sign is a wild-card, in my example of countries it works like this...
            // $queryString = 'Uni';
            // Returned data = 'United States, United Kindom';

            // YOU NEED TO ALTER THE QUERY TO MATCH YOUR DATABASE.
            // eg: SELECT yourColumnName FROM yourTable WHERE yourColumnName LIKE '$queryString%' LIMIT 10

            $query = $db->query("SELECT company FROM eventcompany WHERE company LIKE '$queryString%' LIMIT 10");
            if($query) {
                // While there are results loop through them - fetching an Object (i like PHP5 btw!).
                while ($result = $query ->fetch_object()) {
                    // Format the results, im using <li> for the list, you can change it.
                    // The onClick function fills the textbox with the result.

                    // YOU MUST CHANGE: $result->value to $result->your_colum
                    echo '<li onClick="fill(\''.$result->company.'\');">'.$result->company.'</li>';
                    //echo '<li onClick="fill(\"'.$result->company.'\");">'.$result->company.\"</li>';
                }
            } else {
                echo 'ERROR: There was a problem with the query.';
            }
        } else {
            // Dont do anything.
        } // There is a queryString.
    } else {
        echo 'There should be no direct access to this script!';
    }
}?>

эта часть в моем заголовке.

<script type="text/javascript">
function lookup(inputString) {
    if(inputString.length == 0) {
        // Hide the suggestion box.
        $('#suggestions').hide();
    } else {
        $.post("backend/rpc.php", {queryString: ""+inputString+""}, function(data){
            if(data.length >0) {
                $('#suggestions').show();
                $('#autoSuggestionsList').html(data);
            }
        });
    }
} // lookup

function fill(thisValue) {
    $('#inputString').val(thisValue);
    setTimeout("$('#suggestions').hide();", 200);
}

Я думаю, что проблема заключается в событии при нажатии.это работает с & символами, но не '.любые предложения приветствуются.Большое спасибо

Стив

Я пытался отобразить изображение, но у меня низкая репутация.спасибо за ваш ответ. Теперь я получаю это сообщение, но когда я выбираю, поле ввода выбора остается пустым.это происходит только с компаниями, в которых они находятся.Я знаю, что не многие компании имеют в них, но это больше или проблема сейчас.

Сортировка вы были почти там.

$company = addslashes($result->company);
   echo "<li onClick=\"fill('".$company."');\">".$result->company."</li>";

с помощью firebug.Большое спасибо, кстати, я заметил, что первый столбец нуждался в addlashes, а второй - нет.так что я думаю, что вы, возможно, просто неправильно их поняли;) спасибо за помощь.

Стив

1 Ответ

2 голосов
/ 17 марта 2011

Ответ заключается в том, что дополнительная цитата портит ваш HTML.

Используя пример вашей компании "loo's", эта строка:

echo '<li onClick="fill(\''.$result->company.'\');">'.$result->company.'</li>';

напечатает HTML:

<li onClick="fill('loo's');">loo's</li>';

Проблема заключается в дополнительной одиночной кавычке:

onClick="fill('loo's');"

Вместо этого нужно напечатать следующее:

onClick="fill('loo\'s');"

Самый простой способ исправить этоизмените PHP на:

$company = addslashes($result->company);
echo "<li onClick=\"fill('".$result->company."');\">".$company."</li>";

Я не проверял код для проверки, но это должно решить проблему.

Также попробуйте запустить страницу в Firefox.Установите аддон Firebug.Вы можете просмотреть, что возвращается через Ajax на вкладке консоли в Firebug.Это поможет вам в будущем.

...