2016-04-13 3 views
0

Я получаю странное поведение из следующего кода ..Это намеревался дать автозаполнение опции для пользователя на каждое нажатие клавишиPHP Предупреждение: stristr(): Пустые иглы в линии

<html> 
<head> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
<script type="text/javascript"> 
function autoComplete(str) { 
    debugger; 
    if (str) { 
     $.ajax({ 
      type:'GET' , 
      url:"index.php?q=" + str , 
      success:function(response){ 
       $("#autoComplete").html(response) ; 
      } 
     }) 
    } 
}; 

$(document).ready(function() { 
    $("#text").keypress(function() { 
     autoComplete($("#text").val()) 
    }); 
}) 
</script> 
</head> 
<body> 
<form action="index.php" > 
<input type="text" id="text" /> 
<div id="autoComplete"></div> 

</form> 

<?php 

if (isset($_GET["q"])) 
{ 
    $a[] = "Android"; 
    $a[] = "B programming language"; 
    $a[] = "C programming language"; 
    $a[] = "D programming language"; 
    $a[] = "euphoria"; 
    $a[] = "F#"; 
    $a[] = "GWT"; 
    $a[] = "HTML5"; 
    $a[] = "ibatis"; 
    $a[] = "Java"; 
    $a[] = "K programming language"; 
    $a[] = "Lisp"; 
    $a[] = "Microsoft technologies"; 
    $a[] = "Networking"; 
    $a[] = "Open Source"; 
    $a[] = "Prototype"; 
    $a[] = "QC"; 
    $a[] = "Restful web services"; 
    $a[] = "Scrum"; 
    $a[] = "Testing"; 
    $a[] = "UML"; 
    $a[] = "VB Script"; 
    $a[] = "Web Technologies"; 
    $a[] = "Xerox Technology"; 
    $a[] = "YQL"; 
    $a[] = "ZOPL"; 
    $ACText = $_GET["q"] ; 
    $ACBox = ""; 

    foreach($a as $name) 
    { 
    if($name){ 
    if (stristr($ACText , substr("$name" , 0 , strlen($ACText)))) 
    { 
     $ACText = $name ; 
     $ACBox .="<p>$ACText</p>" ; 
     $ACText = "" ; 
    } 
    } 
    } 
    if($ACBox) 
    { 
    echo $ACBox ; 
    } 
    } 

?> 
</body> 
</html> 

при входе текст в элементе ввода форма неожиданно создает другой элемент ввода под существующим и отображает несколько предупреждающих сообщений ... Я пытался скрыть эти предупреждения с помощью error_reporting (E_ERROR | E_PARSE); .. но браузер получил очень медленно после того, как я это сделал .... также я хочу знать, почему отображается другой элемент ввода enter image description here

помощь? (автозаполнение варианты были показаны успешно)

+0

'error_reporting (E_ERROR | E_PARSE);' не скрывает ошибки, он показывает больше деталей/ошибок. Вы можете использовать 'error_reporting (false);' – Jer

+0

@Tushar '$ name' определен в' foreach ($ a as $ name) ' – Jer

+0

, это просто временная переменная для оператора foreach вроде (для каждого имени var в array a) –

ответ

1

Похоже, что проблема может быть здесь:

foreach($a as $name) 
    { 
    if($name){ 
    if (stristr($ACText , substr("$name" , 0 , strlen($ACText)))) 
    { 
     $ACText = $name ; 
     $ACBox .="<p>$ACText</p>" ; 
     $ACText = "" ; 
    } 
    } 
    } 

После первой итерации цикла, вы установите $ACText в пустую строку. В следующий раз, когда цикл запущен, substr("$name", 0, 0) собирается вернуть пустую строку. Это игла - stristr, и, как говорится в сообщении об ошибке, пуст.

+0

черт, вы правы .. какая глупая ошибка -_- ... она все еще создает элемент ввода, хотя .. любая идея, почему это так? –

+0

@ProHaitham Потому что вы говорите, что страница загружается через AJAX, и на этой странице есть поле ввода. Вы устанавливаете HTML-идентификатор автозаполнения таким же, как текущая страница. – Chris

+0

oh Я думал, что 'echo' выводит ответ ... как сделать ответ нужным html/text, тогда .. извините за слишком много вопросов –

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