2014-10-12 2 views
4

(주로 작동하는) 부품 검색 시스템을 사용하려고하는데, PHP var에서 일부 문자가 손실되는 경우가 있습니다. 입력란에 1234를 입력하면 텍스트 상자에 입력 한 전체 숫자가 항상 표시됩니다.동적 PHP mysql 조회에서 입력 문자를 분실하고 있습니다.

그러나 결과 부분에는 1234로 시작하는 숫자가 초 단위로 표시되고 4 , 그러면 3이 풀릴 것이고, 그러면 2가 풀릴 것이고, 그 다음에는 1로 시작하는 partno가 나타나고 그것은 남아있을 것입니다. 대부분의 경우 시간이 너무 빠르므로 한 번에 모든 숫자가 떨어지는 것처럼 보이지만 한 번에 한 번에 하나씩 실제 닫기와 놓기를 봅니다. 화면

출력 -
PHP의 VAR의 idxno가

1 (이 번호 1234 예에 불과 도시 1,234 시험
위한 JS VAR PARTNO 쇼 1,234
JS VAR idxno 난으로부터 무작위 PARTNO의 것을 사용 도시 3 ~ 20 자이고, 문자를 버리면 항상 첫 번째 문자가 입력됩니다.)

4를 제거하려면 백 스페이스 키를 사용하면 23이 돌아오고 4를 다시 입력하면 PHP var idxno가됩니다. 꼭 1234를 보여줘야합니다.
서버를 다시 시작하면 부품 번호를 입력 할 때마다, 때로는 두 번째 및 세 번째로 입력 할 때마다 항상 발생합니다. 그런 다음 10-20 개의 조회가 잘 수행 된 다음 다시 수행됩니다. .
빈 데이터베이스에서이 쿼리를 실행하면 정상적으로 작동하며 숫자를 삭제하지 않습니다.
'ORDER BY'절을 제거하면 첫 번째 문자를 제외한 모든 문자가 거의 항상 삭제됩니다. 나는이 기본 코드를이 프로그램의 첫 번째 초안에서 실행하고 있으며, 모든 데이터베이스는 별도의 데이터베이스에 제조되어 있으며 훌륭하게 작동합니다. 모든 데이터베이스 파일을 하나의 데이터베이스 파일로 결합하려고하는데, 문제가 시작될 때.
별도의 제조사를 통해 가장 큰 가격표는 약 150,000 행 정도입니다.
모든 제조사가 결합 된 제품은 현재 약 75 만 줄이고, 완료되면 1,000,000 개가 넘는 행이 될 것입니다.

나는 실행하고 있습니다 :
데비안 위지 7.2
아파치 버전 2.2.22
MySQL 버전 5.5.38
PHP 버전 5.4.4-14 + deb7u14

내가 작성하는 버추얼 서버를 사용하고 있습니다 테스트 코드를 제공하지만,이 코드를 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); 
?> 

OK, 나는 제프, 나는 희망

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 

가 151 종료 후 148 종료가,
그래서 나는 partlookup.php 파일의 끝에 mysqli_close($db_connect);을 추가했다.

하지만 차이점은 없지만 여전히 동일한 문제가 있습니다.

+0

로그 파일에 sql 문을 써서 문제가 없는지 확인합니다. – jeff

+0

추측 :이 호출을 'lookup 대신 상수를 반환하려면 function (data) {$ ("# part_data") .html (data); 그것이 올바르게 사용되지 않는 것은 의심 스럽습니다. – ethrbunny

+0

이 코드'function (data) {$ ("# part_data") .html (data);'은 현재 PHP 파일에서 idxno의 값을 제외하고는 어떤 데이터도 반환하지 않습니다. 현재 varx idxno를 partlookup.php에 전달하고 mysql 쿼리를 실행 중이며 idxno의 현재 값을 제외하고는 테스트 할 데이터가 반환되지 않습니다. – JimmyA

답변

0

좋아, 방화범이 끌려와 넷 탭을 사용하여 무슨 일이 일어나고 있는지 알았어. 부품 번호 1234를 입력 할 수 있으며 PHP 파일은 별도의 연결로 서버에 요청을 보냅니다. ??

1

는,
12
123
1234 지금 1234 정보가 표시됩니다

그래서 완료 12ms 소요 완료하는 데 855ms 소요 완료 1.03s 소요 완료
123 개 정보 쇼를 3.02s 소요 다음은
12 정보가 표시되면
1 정보가 표시됩니다.

부품 번호를 입력하는 데 1 초도 채 걸리지 않으므로 부품 번호가 1로 시작하여 반환 된 정보에 표시됩니다.

이제 쿼리를 최적화하거나 이전을 취소하는 방법을 알아 내려고합니다. 질의 또는 재고 목록 정보를 pricelist 파일에 추가하면 처리 할 몇 가지 추가 문제가 발생합니다.

이 질문에 답변 해 주신 모든 분들께 감사드립니다.

관련 문제