2012-06-01 2 views
1

У меня проблема в одном из моих сценариев. Сервер работает в php, а im использует AJAX для отправки данных. Вот мой сценарий.

PHP скрипт:

<?php 

include './connConf.php'; 

if (isset($_POST['pStr'])){ 
    $preStr=$_POST['pStr']; 
    $query="SELECT * FROM advisory WHERE projname in (SELECT projname FROM advisorydata WHERE prefixStr LIKE '%$preStr')"; 
    $result=mysql_query($query); 
    $num=mysql_numrows($result); 
    if ($num > 0){ 
     echo "<font style=\"font-size:12px\" color=\"#FF6820\" face=\"Century Gothic\"><b>Search Result :</b></font><br><br>"; 
     for ($x=0;$x<$num;$x+=1){ 
      echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">Project Name:&nbsp&nbsp&nbsp</font><font style=\"font-size:11px\" color=\"#C0FFFF\" face=\"Century Gothic\"><b>".mysql_result($result,$x,"projname")."</b></font><br>"; 
      echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">APMS ID:&nbsp&nbsp&nbsp</font><font style=\"font-size:11px\" color=\"#C0FFFF\" face=\"Century Gothic\"><b>".mysql_result($result,$x,"apmsid")."</b></font><br>"; 
      echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">Prefix/es:&nbsp&nbsp&nbsp</font><font style=\"font-size:11px\" color=\"#C0FFFF\" face=\"Century Gothic\"><b>".mysql_result($result,$x,"projprefix")."</b></font><br>"; 
      echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">Usage Type:&nbsp&nbsp&nbsp</font><font style=\"font-size:11px\" color=\"#C0FFFF\" face=\"Century Gothic\"><b>".mysql_result($result,$x,"usagetype")."</b></font><br>"; 
      echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">Rate:&nbsp&nbsp&nbsp</font><font style=\"font-size:11px\" color=\"#C0FFFF\" face=\"Century Gothic\"><b>".mysql_result($result,$x,"projrate")."</b></font><br>"; 
      echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">Offer Details:&nbsp&nbsp&nbsp</font><font style=\"font-size:11px\" color=\"#C0FFFF\" face=\"Century Gothic\"><b>".mysql_result($result,$x,"offerdetails")."</b></font><br><br>"; 
     } 
    }else{ 
     echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">No results found ...</font>"; 
    } 
}else{ 
    echo "<font style=\"font-size:12px\" color=\"#FFFFFF\" face=\"Century Gothic\">Problems encountered while processing the data ...</font>"; 
} 
?> 

JS скрипт:

function QueryPrefix() 
{ 
    var xmlhttp; 
    var pStr = document.getElementById('Editbox2'); 
    var htmlHolder = document.getElementById('Html1'); 
    var butStr = document.getElementById('Button1'); 

    if (pStr.value.length == 0){ 
     alert("Please enter a value on the box provided!"); 
     return; 
    } 
    pStr.value=""; 

    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4) 
      { 
       htmlHolder.innerHTML=xmlhttp.responseText; 
       butStr.disabled=false; 
      } 
    } 
    butStr.disabled=true; 

    xmlhttp.open("POST","searchutype.php",false); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send("pStr=" + pStr.value); 
} 
+1

Возможно, это лучший вопрос для stackoverflow или одного из других сайтов программирования. Почему вы устанавливаете 'pStr.value =" "', а затем пытаетесь использовать значение в 'xmlhttp.send (" pStr = "+ pStr.value)'? И есть ли причина, по которой вы не используете что-то вроде jQuery для этого? Может быть, это немного легче ... хотя я предполагаю, что этот подход немного более легкий. – tfitzgerald

+0

О мальчик. Не имеет отношения к проблеме, но очень, ОЧЕНЬ важно: у вас есть дыра безопасности MASSIVE, которая может привести к уничтожению всей базы данных. Читайте на ** SQL-инъекции **. Кроме того, использование ** Cascading Style Sheets ** сделает код более читаемым, не говоря уже о сокращении объема данных, которые необходимо передать. –

ответ

0

Я попытался воспроизвести проблему, и это, кажется, работает для меня, используя Chrome в качестве клиента и PHP 5.2 на сервере. Но я заметил, что вы не отправляете заголовок Content-Length в качестве заголовка, что может быть проблемой. Попробуйте добавить:

var post = "pStr=" + pStr.value; 
xmlhttp.setRequestHeader("Content-length",post.length); 

Конечно, вам необходимо URL-кодировать значение pStr.value, а затем публиковать его. Как сказал ранее nickch, почему бы просто не использовать библиотеку фреймворка, такую ​​как jquery?

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