2016-04-13 11 views
0

ich ein seltsames Verhalten aus dem folgenden Code ..es beabsichtigtenPHP Warning: stristr(): Leere Nadel in Zeile

<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> 

auto-complete-Optionen für den Benutzer auf jedem Tastendruck zu geben, bei der Eingabe Text im Eingabeelement Das Formular erstellt unerwartet ein anderes Eingabeelement als das vorhandene und zeigt mehrere Warnmeldungen an ... Ich habe versucht, diese Warnmeldungen mithilfe von error_reporting (E_ERROR | E_PARSE) zu verbergen; .. aber der Browser wurde sehr langsam, nachdem ich das getan habe .... auch ich will wissen, warum ein anderes Eingabeelement angezeigt wird enter image description here

etwas Hilfe? (die automatische Vervollständigung Optionen wurden erfolgreich gezeigt)

+0

'error_reporting (E_ERROR | E_PARSE);' versteckt die Fehler nicht, es werden mehr Details/Fehler angezeigt. Sie können 'error_reporting (false) verwenden;' – Jer

+0

@Tushar '$ name' ist definiert in' foreach ($ a als $ name) ' – Jer

+0

es ist nur eine temporäre Variable für die foreach-Anweisung wie (für jeden var-Namen in der Array a) –

Antwort

1

Es sieht aus wie das Problem hier sein könnte:

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

Nach der ersten Iteration der Schleife, Sie $ACText auf eine leere Zeichenfolge festgelegt. Wenn die Schleife das nächste Mal ausgeführt wird, gibt substr("$name", 0, 0) eine leere Zeichenfolge zurück. Es ist die Nadel zu stristr und, wie die Fehlermeldung sagt, ist leer.

+0

verdammt, du hast Recht .. was für ein dummer Fehler -_- ... es ist immer noch Eingabeelement erstellt .. irgendeine Idee, warum das ist? –

+0

@ProHaitham Weil Sie die Seite anweisen, sich über AJAX zu laden, und die Seite hat ein Eingabefeld darauf. Sie legen den HTML-Code des Autocomplete-Bereichs so fest, dass er der aktuellen Seite entspricht. – Chris

+0

oh ich dachte 'echo' gibt die Antwort ... wie man die Antwort den gewünschten HTML/Text dann .. Entschuldigung für zu viele Fragen –