2013-12-19 2 views
0

누군가가 도움을 주길 바랍니다. 공간이있는 새 항목을 추가 할 때까지 동적 인 드롭 다운이 훌륭하게 작동했습니다. 두 번째 드롭 다운에 공백이있는 항목이있어 쿼리가 제대로 실행되지만 첫 번째 드롭 다운이 실패하기 때문에 혼란 스럽습니다. 나는 하나의 실패를 일으키는 차이점을 찾으려고 노력했지만, 나는 그것을 볼 수 없다. 내가 찾은 스크립트가 혼합되어있어 Javascript와 PHP가 새로 생겨서 잃어 버렸습니다. 누군가 내 잘못을 지적하길 바랍니다.get 및 공백으로 PHP 쿼리가 실패합니다

<script type="text/javascript"> 
function AjaxFunction() 
{ 

var ddstring = document.getElementById("name"); 
var ddindex = ddstring.options[ddstring.selectedIndex].value; 

if (ddindex != 0){ 
var httpxml; 
try 
    { 
    // Firefox, Opera 8.0+, Safari 
    httpxml=new XMLHttpRequest(); 
    } 
catch (e) 
    { 
    // Internet Explorer 
      try 
        { 
       httpxml=new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
      catch (e) 
        { 
       try 
      { 
      httpxml=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
       catch (e) 
      { 
      alert("Your browser does not support AJAX!"); 
      return false; 
      } 
      } 
    } 
function stateck() 
    { 
    if(httpxml.readyState==4) 
     { 
//alert(httpxml.responseText); 
var myarray = JSON.parse(httpxml.responseText); 
var myarray=myarray.split(","); 
for(j=document.searchform.type.options.length-1;j>=0;j--) 
{ 
document.searchform.type.remove(j); 
} 
for (i=0;i<myarray.length;i++) 
{ 
var optn = document.createElement("OPTION"); 

optn.text = myarray[i]; 
optn.value = myarray[i]; 
document.searchform.type.options.add(optn); 
} 
{ 
var optn2 = document.createElement("OPTION"); 

optn2.text = "Select Type"; 
optn2.value = '%'; 
document.searchform.type.options.add(optn2,0); 
} 
{ 
document.searchform.type.disabled=false; 
document.searchform.type.selectedIndex = 0; 
var defaultdd = "<?php echo $_SESSION['type'] ?>"; 

if (defaultdd != ""){ 
document.getElementById('s2').value = defaultdd; 
if (defaultdd != "%"){ 
AjaxFunction2(); 
} 

} 
} 

    } 
} 
var url="dd.php"; 
var cat_id=document.getElementById('name').value; 
url=url+"?cat_id="+cat_id; 
url=url+"&sid="+Math.random(); 
httpxml.onreadystatechange=stateck; 
//alert(url); 
httpxml.open("GET",url,true); 
httpxml.send(null); 
} 

else { 
    document.searchform.type.selectedIndex = 0; 
    document.searchform.subcat.selectedIndex = 0; 
    document.searchform.type.disabled=true; 
    document.searchform.subcat.disabled=true;  
} 
} 
</script> 




<script type="text/javascript"> 
function AjaxFunction2() 
{ 
var httpxml; 
try 
    { 
    // Firefox, Opera 8.0+, Safari 
    httpxml=new XMLHttpRequest(); 
    } 
catch (e) 
    { 
    // Internet Explorer 
      try 
        { 
       httpxml=new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
      catch (e) 
        { 
       try 
      { 
      httpxml=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
       catch (e) 
      { 
      alert("Your browser does not support AJAX!"); 
      return false; 
      } 
      } 
    } 
function stateck() 
    { 
    if(httpxml.readyState==4) 
     { 
//alert(httpxml.responseText); 
var myarray = JSON.parse(httpxml.responseText); 
var myarray=myarray.split(","); 
for(j=document.searchform.subcat.options.length-1;j>=0;j--) 
{ 
document.searchform.subcat.remove(j); 
} 


for (i=0;i<myarray.length;i++) 
{ 
var optn = document.createElement("OPTION"); 
optn.text = myarray[i]; 
optn.value = myarray[i]; 
document.searchform.subcat.options.add(optn); 

} 
{ 
var optn2 = document.createElement("OPTION"); 

optn2.text = "Select Series"; 
optn2.value = '%'; 
document.searchform.subcat.options.add(optn2,0); 
} 
{ 
document.searchform.subcat.disabled=false; 
document.searchform.subcat.selectedIndex = 0; 

var defaultdd = "<?php echo $_SESSION['subcat'] ?>"; 
if (defaultdd != ""){ 
document.getElementById('s3').value = defaultdd; 
} 
} 

     } 
    } 
    var url="dd2.php"; 
var cat_id=document.getElementById('name').value; 
var cat_id2=document.getElementById('s2').value; 
url=url+"?cat_id="+cat_id; 
url=url+"&cat_id2="+cat_id2; 
url=url+"&sid="+Math.random(); 
httpxml.onreadystatechange=stateck; 
//alert(url); 
httpxml.open("GET",url,true); 
httpxml.send(null); 
    } 
</script> 

폼 요소 :

<form name="searchform" method='POST' action='?'> 
    <table width="534" border="1" cellspacing="10" ID="tdspace"> 
    <tr> 
     <td>Manufacturer: </td> 
     <td><select name=name id='name' onchange=AjaxFunction();> 
     <option value='%'>Select One</option> 
     <?Php 
try { 
$dbo = new PDO('mysql:host=localhost;dbname='. $dbname, $username, $password); 
} 
catch (PDOException $e) { 
print "Error!: " . $e->getMessage() . "<br/>"; 
die(); 
} 

$sql="SELECT Distinct Manufacturer FROM `tbl_Printers` order by `Manufacturer` asc "; 
foreach ($dbo->query($sql) as $row) { 

     if ($row[Manufacturer] == $_SESSION['name']) 

     $selected = "selected=\"selected\""; 
    else 
     $selected = ""; 
echo "<option value=$row[Manufacturer] $selected>$row[Manufacturer]</option>"; 
if($_SESSION['type']) 
{ echo '<script type="text/javascript">AjaxFunction()</script>'; 
} 
} 
?> 
     <?php 
    if ($_SESSION['name'] == ""){ $namevalue = 'None Selected';} 
    else {$namevalue = $_SESSION['name'];} 

    if ($_SESSION['type'] == "%"){ $typevalue = 'None Selected';} 
    else {$typevalue = $_SESSION['type'];} 

    if ($_SESSION['subcat'] == "%"){ $subvalue = 'None Selected';} 
    else {$subvalue = $_SESSION['subcat'];} 
?> 
     </select></td> 
     <td>Manufacturer:<span style="color:cyan"> <?php echo $namevalue;?></span></td> 
     </tr> 
    <tr> 
     <td>Product Type: </td> 
     <td><select name=type id='s2' onchange=AjaxFunction2(); disabled=true> 
     <option value='%' selected>Select Type</option> 
     </select></td> 
     <td>Product Type:<span style="color:magenta"> <?php echo $typevalue?></span></td> 
     </tr> 
    <tr> 
     <td>Printer Catagory:</td> 
     <td><select name=subcat id='s3' disabled=true> 
     <option value='%' selected>Select Series</option> 
     </select></td> 
     <td>Printer Series:<span style="color:yellow"> <?php echo $subvalue;?></span></td> 
     </tr> 
    <tr> 
     <td height="27" colspan="2" ID="centered" style="padding-left:90px"><br />  <input type=submit onclick="s3.disabled=false; s2.disabled=false" class="quick-search-button btn"/></td> 
     <td>Records Found:<span style="color:black; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4)"> <?php echo $_SESSION['totalrecords'];?></span></td> 
     </tr> 
    <tr> 
     <td height="28" colspan="3" style="text-align:center"><br /> 
     *Manufacturer is Manditory, all other fields optional. </td> 
     </tr> 
    </table> 

    <br /> 
<br /> 

<p><div id="finish"> 

</p></div> 
</form> 

이는 PHP 여기 당신이 첫 번째 스크립트를 볼 필요가 있다고 생각 코드는 두 번째를 실패 드롭 다운을 제어하는 ​​하나가 작동되고 있어요 두 번째 드롭 다운 양식 비록 첫 번째 드롭 다운에 대한 결과를 반환하도록되어 페이지가 실질적으로 동일하며 작동합니다

내가 어떤 도움을 주셔서 감사합니다
<?Php 
@$cat_id=$_GET['cat_id']; 
//$cat_id=2; 


$dbhost_name = "localhost"; 
$database = "database";// database name 
$username = "username"; // user name 
$password = "password"; // password 

//////// Do not Edit below ///////// 
try { 
$dbo = new PDO('mysql:host=localhost;dbname='.$database, $username, $password); 
} catch (PDOException $e) { 
print "Error!: " . $e->getMessage() . "<br/>"; 
die(); 
} 
$str=''; 
$sql="SELECT Distinct Type FROM `tbl_Printers` where Manufacturer='$cat_id' order by Type asc"; 
foreach ($dbo->query($sql) as $row) { 
$str=$str . "$row[Type]".","; 
} 
$str=substr($str,0,(strLen($str)-1)); // Removing the last char , from the string 

//$main = array($str); 
echo json_encode($str); 
//echo $str; 
?> 

, 나는 검색을 시도하고 일반적으로 나는 도움을 청하지 않는다. 그러나 이것은 나의 이해를 훨씬 넘어서있다.

잠시 동안 나는이 모든 것을 읽도록 내 큐리스를 교체했습니다. (많은 사람들이 페이징을 고려하고 있습니다 ...) 나는이 문제를 해결하기위한 것으로 보지 않습니다.

"SELECT Distinct Type FROM `tbl_Printers` where Manufacturer Like CONCAT('%', '$cat_id', '%') order by Type asc" 

올바른 방향으로 나를 가리켜 주신 Vigor에게 감사드립니다. 불행히도 나는 답변으로 의견을 선택하거나 내 평판 때문에 내일까지 내 자신의 질문에 대한 답변을 게시 할 수는 없지만 문제를 찾아 주셔서 너무 감사드립니다.

문제를 일으키는 코드 줄이었다

echo "<option value='" . $row['Manufacturer']."' ".$selected." >" . $row['Manufacturer'] . "</option>"; 
+0

소스보기를 클릭하고 드롭 다운 목록을 볼 때 실제로 브라우저로 전송되는 내용은 무엇입니까? 때로는 오류 메시지가 필드에 표시됩니다. –

+0

브라우저에서 소스 코드를 볼 때 첫 번째 드롭 다운 목록 값을 제외하고 양식 옵션에 아무것도 표시되지 않습니다. 페이지에서 볼 수있는 오류가 없습니다. 마치 쿼리가 실행되어 결과를 반환하지 않은 것과 같습니다. 그러나 첫 번째 드롭 다운에서 공백이없는 값을 선택하자마자 두 번째 드롭 다운이 채워집니다. –

+0

페이지에서 jsut이 발견되었습니다. 각 드롭 다운 선택 항목의 값을 게시하고 두 번째 단어가 캡처되지 않는 섹션이 있습니다. 따라서 Pitney Bowes를 선택하면 Pitney가 페이지에 다시 게시됩니다.예상대로 두 번째 드롭 다운에서 두 단어 선택이 두 단어로 다시 게시됩니다. –

답변

0

더 나은 테스트 :

echo "<option value=$row[Manufacturer] $selected>$row[Manufacturer]</option>"; 

그것은 적절한 저장 항목을 선택 여전히 필요에 따라 따옴표를 추가하고이 변경 될 필요가 그것은,하지만 난 JS 제대로 그것을 전달하기 위해 빈 기호를 + 기호로 교체해야한다고 생각 :

바꾸기 : var cat_id = document.getElementB yId ('name'). 값;

포함 : var cat_id = document.getElementById ('name'). value.replace ('//gi', '+');

+0

간격 띄우기 값을 선택할 때 JS에 오류가 있습니다. [23 : 10 : 26.259] TypeError : myarray.split이 @ http://www.oemalternatives.ca/printersearch.php:53 함수가 아닙니다. – vigour

+0

체크 아웃 여기에 정보 : http://stackoverflow.com/questions/10583055/javascript-split-is-not-a-function 문제를 디버그하는 데 도움이 될 수 있습니다. – vigour

+0

aler (myarray)는 무엇입니까? return myarray = JSON.parse (httpxml.responseText) ;? – vigour

0

따옴표로 옵션 값을 추가해야합니다. 그렇지 않으면 간격이있는 값이 전달되지 않습니다.

<option value="Kyocera Mita" >Kyocera Mita</option> 
관련 문제