2013-01-01 81 views
1

***編輯在post php中缺少變量javascript

@alditis TY,試過了你的建議,但是javascript在它之後不工作。這不需要那麼安全,因爲沒有涉及任何敏感數據,而且隨着我的進行,我有點了解它。此外,我將沿軌道使用這些查詢,所以我寧願將整個數組放在那裏。

@Barmar是的,第二個snippit顯示Google Chrome如何使用調試器查看輸出。這就是爲什麼它很奇怪。

@FreudianSlip我正在嘗試一些東西,永遠不會放回來。

@saeed arab sheybani我不太明白?代碼工作和列表填充就好了問題是$ _REQUEST ['pos_no']似乎不存在。它應該按照輸出代碼進行提交。也許我不明白你在說什麼,你是否有一個可以鏈接到我的例子?


我試圖讓一個PHP/JavaScript的動態填充組合框,通過MySQL的查詢工作,在大多數情況下它工作得很好,這是直到我打提交按鈕。這些腳本完全符合我想要的。

從我可以看到替換代碼被省略$ _POST數組。我認爲這是因爲一旦表單加載,它列出了期望的字段或創建$ _post數組,因此通過插入一些新的代碼它可能會忽略它?只是一個猜測,但似乎是合乎邏輯的,如果是這樣,一個人將如何解決這個問題?這一直困擾着我一個月左右。

的javascript:

<script type="text/javascript"> 
    $(document).ready(subpos_selectbox_change); 
    function subpos_selectbox_change(){ 
     $('#subpos').change(update_position_number); 
    } 
    function update_position_number(){ 
     var subpos=$('#subpos').attr('value'); 
     $.get('get_list.php?subpos='+subpos, show_posnumbers); 
    } 
    function show_posnumbers(ss){ 
     $('#position_number').html(ss); 
    } 
</script> 

get_list.php

switch($_REQUEST['subpos']){ 

    case 'AO2'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO2'"; 
     break; 

    case 'AO3'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO3'"; 
     break; 

    case 'AO4'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO4'"; 
     break; 

    case 'AO5'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO5'"; 
     break; 

    case 'AO6'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO6'"; 
     break; 

    case 'AO7'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO7'"; 
     break; 

    case 'AO8'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO8'"; 
     break; 

    case 'SO1'; 
     $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='SO1'"; 
     break; 

} 

echo '<select name="pos_number" id="pos_number">'; 
$ss = null; 
$result = mysql_query($teamQuery); 
while($row = mysql_fetch_array($result)) 
{ 
    $ss.= '<option value=' . $row['position_id'] . '>' . $row['position_number'] . '</option>'; 

} 
echo $ss; 
echo '</select>'; 

..和這裏的id之前的JavaScript的HTML代碼上班:我改變後

<div class="newusr"> 
    <table> 
     <form id="newusr" action="includes/insertuser.php" method="post"> 
      <tr><td>First Name: </td><td><input type="text" name="firstname"></td></tr> 
      <tr><td>Middle Name: </td><td><input type="text" name="middlename"></td></tr> 
      <tr><td>Last Name: </td><td><input type="text" name="lastname"></td></tr> 
      <tr><td>Username: </td><td><input type="text" name="usr"></td></tr> 
      <tr><td>sex:</td><td><select name="sex"><option value="1">Male</option><option value="0">Female</option></select></td></tr> 
      <tr><td>Position: </td><td><select name="subpos" id="subpos"><?php echo $subpos; ?></select><td></tr> 
      <tr><td>Position No: </td><td id="position_number"><select name="pos_number"><option value="">choose a Position first</option></select></td></tr> 
      <tr><td>Contractor: </td><td><input type="checkbox" name="contractor" value="1"></td></tr> 
      <tr><td>Start date: </td><td><input type="date" name="empStrtDte"></td></tr> 
      <tr><td>Active: </td><td><input type="checkbox" name="active" value="1"></td></tr> 
      <tr><td><?php echo '<input type="submit"><input type="reset" value="Reset"></td></tr>'; ?> 
     </form> 
    </table> 
</div> 

HTML代碼subpos中的值(來自Chrome):

<select name="subpos" id="subpos"> 
    <option value="AO2">AO2</option> 
    <option value="AO3">AO3</option> 
    <option value="AO4">AO4</option> 
    ... 
</select></td> 
<select name="pos_number" id="pos_number"> 
    <option value="2">805620121</option> 
    <option value="10">805678998</option> 
</select> 

一切看起來不錯,這正是我想要的。然後我打印陣列和繁榮,缺少pos_number值,我不知道爲什麼。

Array 
(
    [firstname] =&gt; test 
    [middlename] =&gt; test 
    [lastname] =&gt; test 
    [usr] =&gt; 
    [sex] =&gt; 1 
    [subpos] =&gt; AO3 
    [empStrtDte] =&gt; 2012-02-19 
) 
+0

我認爲沒有必要對get_list.php切換。您可以更改爲:$ teamQuery =「SELECT * FROM WHERE establishment_positions position_filled ='0'AND active ='1'AND position_acrynom ='」。 $ _REQUEST ['Subpos']。 「'」;另外你應該避免sql注入。 – alditis

+0

從'get_list.php'返回的HTML包含''; ?>,爲什麼不只是​​;不是我認爲這是答案,只是好奇。 – FreudianSlip

回答

0

問題是Javascript沒有將結果綁定到DOM。改用一些JQuery。 Huzzaah。

感謝所有貢獻。

的JavaScript:

<script type="text/javascript"> 
      $(document).on('change', "#subpos", function(){ 
       var subpos=$('#subpos').attr('value'); 
       $.get('get_list_test.php?subpos='+subpos, function(ss){ 
        $('#pos_number').html(ss); 
       }); 
      }); 
</script> 

HTML:

<tr><td>Position No: </td><td><select name="pos_number" id="pos_number"><option value="">choose a Position first</option></select></td></tr> 

PHP:

$teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='".mysql_real_escape_string($_REQUEST['subpos'])."'"; 

$ss = null; 
$result = mysql_query($teamQuery); 
while($row = mysql_fetch_array($result)) 
{ 
    $ss.= '<option value=' . $row['position_id'] . '>' . $row['position_number'] . '</option>'; 

} 
echo $ss; 
0

對於選擇菜單,當鍵盤和鼠標按鈕事件和NoScript有效地選擇一個選項時發生更改事件。 對於文本字段或文本區域,當字段丟失焦點時發生更改事件。 因此,你不能使用「更改事件」直接(不通過選擇鍵盤或鼠標的任何選項) 試試這個鱈魚:

<select name="subpos" id="subpos"> 
<option value="1">first</option> 
<option value="2">secound</option> 
<option value="3">Third</option> 
</select> 


<script> 
    $(function() { 
     $('#subpos').change(function() { 
      console.log('subpos has changed'); 
     }); 
     $("#subpos").val('2');//combo box has change but dont appear in console log. why? 
    }); 
</script> 

運行後;請參閱控制檯日誌 您無法在控制檯日誌中看到'subpos has changed'。但在行動subpos已更改爲'第二'
什麼是發生? 當選擇更改時,它應該被記錄到控制檯。 現在通過從下拉列表中選擇該選項,您可以看到cosole日誌是變化

+0

這不是一個答案..只是一個評論。你可能沒有現在的評論權利..但無論如何,這不是一個答案。所以不這樣做。 –