2014-10-12 2 views
4

Я пытаюсь сделать систему поиска деталей (которая в основном работает), но я теряю некоторые символы в PHP var (только иногда). Если я напечатаю 1234 в текстовом поле, в текстовом поле всегда будет отображаться полный номер, который я набираю.Потеря входных символов в динамическом php mysql lookup

Но в части результатов будут отображаться номера, начинающиеся с 1234 в течение секунды секунды, после чего он потеряет 4 , то он потеряет 3, затем он потеряет 2, а затем отобразит partno с 1, и это останется. В большинстве случаев это так быстро, что похоже, что он просто сразу бросает все числа, но я наблюдаю за ним очень близко и его забрасывая один шар за раз.

вывод на экран - для тестирования
JS вар PARTNO показывает 1234
JS вар idxno показывает 1234
PHP вар idxno показывает 1

(это число 1234 является только примером, я использую случайные PARTNO от От 3 до 20 символов, и когда он выпадает, он всегда покидает первый символ.)

Если я использую клавишу backspace для удаления 4, тогда 23 вернется, и я снова смогу ввести 4, и php var idxno будет показать 1234, как и следовало бы.
Если я перезапущу сервер, он всегда будет в первый раз, когда я введу номер детали, иногда второй и третий раз, тогда он может работать нормально на 10-20 поисковых запросов, а затем повторится, он никогда не будет согласован ,
Если я запустил этот запрос в пустой базе данных, он отлично работает, никогда не отбрасывает числа.
Если я удалю предложение «ORDER BY», он почти всегда удаляет все символы, кроме первого. У меня есть этот базовый код, запущенный сейчас на моем первом проекте этой программы со всеми производителями в отдельных базах данных, и он отлично работает. Я пытаюсь объединить все производства в один файл базы данных и это, когда проблема началась.
С отдельными производствами самый большой прайс-лист, вероятно, составляет около 150 000 рядов.
Со всеми производителями в сочетании это около 750 000 рядов сейчас, и будет сделано чуть более 1 000 000 строк, когда это будет сделано.

Я бегу:
Debian свистящих 7,2
Apache версии 2.2.22
MySQL версии 5.5.38
PHP версии 5.4.4-14 + deb7u14

Я использую сервер Virtualbox писать и тестовый код, но я положил это на реальный сервер на LAN, и он делает то же самое.

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

Спасибо за любую помощь, которую я могу получить.

index.php

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
<script type="text/javascript" src="js_php/jquery-1.11.1.js"></script> 
<script type="text/javascript"> 
var npage = 0; 
function part_lookup(cnt){ 
    var action = "lookup"; 
    var partno = document.getElementById("partno").value; 
    var idxno = partno.replace(/[^a-zA-Z0-9%]/g,''); 
     if (cnt == 'next') {npage = npage + 15;} 
     else if (cnt == 'prev') {npage = npage - 15;} 
     else {npage = 0;} 
      if (npage < 0) {npage = 0;} 
     $.post("js_php/partlookup.php", {action:action, idxno:idxno, npage:npage}, 
     function(data){$("#part_data").html(data);}); 
    } 
</script> 
</head> 
<?php 
    $whereami='home'; 
// include("page_setup.php"); 
?> 
<!--body-->  <!--code will not validate w3c with this body tag, says tag already open ??--> 
<div id="lookup"> 
    <div> 
     <input id="Prev" type="button" value="Previous Page" onclick="part_lookup('prev')"> 
     &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
     <input id="partno" type="text" name="partno" maxlength="20" autocomplete="off" autofocus onclick="this.value = ''" onkeyup="part_lookup()"> 
     &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
     <input id="Next" type="button" value=" Next Page " onclick="part_lookup('next')"> 
    </div> 
</div> 
<div id="part_data"></div> 
</body> 
</html> 

partlookup.PHP

<?php 
ini_set('display_errors', 'On'); 
error_reporting(E_ALL | E_STRICT); 

include("db_connect.vars.php"); 
// Make a MySQLi Connection 
$db_connect = mysqli_connect($db_host, $db_user, $db_pass, $db_name); 
if (!$db_connect) {die('Connect Error ('.mysqli_connect_errno().') '.mysqli_connect_error());} 
/*********************************************************************/ 
$idxno = $_POST['idxno']; 
$page = $_POST['npage']; 
echo "idxno = ".'<b>'.$idxno.'</b><br/>'; 
$result = mysqli_query($db_connect, 
    "SELECT PriceList.*, Inventory.instk AS instk, Inventory.ovrstk AS ovrstk, Inventory.used AS used 
    FROM PriceList 
    LEFT JOIN Inventory ON PriceList.mfg = Inventory.mfg 
    AND PriceList.idxno = Inventory.idxno 
    WHERE PriceList.idxno LIKE '$idxno%' 
    ORDER BY PriceList.idxno 
    LIMIT $page,15"); 
mysqli_close($db_connect); 
?> 

ОК, я сделал, как Джефф предложил я надеюсь,

mysql> SET GLOBAL general_log = 'ON'; 
Query OK, 0 rows affected (0.00 sec) 

, а затем посмотрел на '/var/lib/mysql/debian-7.log' файл, это результаты

141012 18:07:30 148 Connect [email protected] on lawn2 
      148 Query 
      149 Connect [email protected] on lawn2 
      149 Query 
      149 Quit 
      150 Connect [email protected] on lawn2 
      150 Query 
      150 Quit 
      151 Connect [email protected] on lawn2 
      151 Query 
      151 Quit 
141012 18:07:31 148 Quit 

Существует 148 Выход после 151 Выход,
Так я добавил mysqli_close($db_connect); в конце partlookup.php файла.

но без изменений, все еще такой же проблема.

+0

Я бы написал заявление sql в файл журнала, чтобы проверить, что на этом фронте все в порядке. – jeff

+0

Просто догадайтесь: измените этот вызов 'function (data) {$ (" # part_data "). Html (data);', чтобы возвращать константу вместо поиска. Я подозреваю, что он не используется правильно. – ethrbunny

+0

Этот код 'function (data) {$ (" # part_data "). Html (data);' в настоящее время не возвращает никаких данных, кроме значения idxno из файла php. в настоящее время я просто передаю var idxno в partlookup.php и запускаю запрос mysql, данные не возвращаются для тестирования, за исключением текущего значения idxno. – JimmyA

ответ

0

ОК, я узнал, что происходит, используя Firebug и включив вкладку Net. Я могу указать номер детали 1234, а файл PHP отправляет запрос на сервер в отдельных соединениях. ??

1 принимает 3.02s завершить
12 принимает 1.03s завершить
123 принимает 855ms завершить
1234 принимает 12ms завершить

Так что теперь 1234 информация показывает, затем
123 Информация шоу вверх, затем
появляется 12 информации, затем
появляется 1 информация.

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

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

Спасибо всем, кто ответил на этот вопрос.

Смежные вопросы