2016-12-05 74 views
0

我有一個php頁面,用戶在文本字段中鍵入特定的id號並單擊「SEARCH」按鈕。點擊「搜索」後,一個php腳本運行連接到MySQL數據庫表「xxx」,並獲取與用戶輸入的id號相匹配的行ID。 SELECT語句爲已識別的行抓取數據庫值:「productionstage」和「floornotes」。獲取選擇菜單,以動態顯示基於MySQL的特定選擇選項選擇結果

我需要做的就是把這些結果,並顯示他們回來我的窗體頁上:

一個選擇菜單需要動態顯示對應於該行的「productionstage」值,然後一個textarea需要的選項顯示「floornotes」的值。

我的代碼:

HTML:

<form id="workorderMovement" name='workorderMovement_form' action="workordermovementGET.php" method="post"> 



<fieldset id="userid"> 

<span>Welcome <?php echo $user ?> </span> 

</fieldset> 




<fieldset id="sgnum"> 

<fieldset id="fieldset" style="text-align: center;"> 
    <span>Please enter the SG Number</span> 
</fieldset> 

<input type="text" name="sgnumber" id="sgnumber"> &nbsp;&nbsp;&nbsp; <input type="button" name="searchButton" id="searchButton" value="SEARCH"> 

</fieldset> 


<br/> 
<br/> 



<fieldset id="stageSelectField"> 

    <fieldset id="fieldset" style="text-align: center;"> 
    <span>Please select the Stage Completed</span> 
    </fieldset> 

<select name="stageSelect" id="stageSelect"> 
    <option value="Please Select">Please Select</option> 
    <option value="Film Done">Film Done</option> 
    <option value="Staged Done">Staged Done</option> 
    <option value="Cleanroom Done">Cleanroom Done</option> 
    <option value="GB2 Done">GB2 Done</option> 
    <option value="Bagging Done">Bagging Done</option> 
    <option value="Inspection Done">Inspection Done</option> 
    <option value="LC Done">LC Inspection Done</option> 
    <option value="IGU Done">IGU Done</option> 
</select> 

</fieldset> 


<br/> 
<br/> 


<fieldset id="floorNotesField"> 

    <fieldset id="fieldset" style="text-align: center;"> 
    <span>Please enter any new work order notes</span> 
    </fieldset> 

    <textarea type="text" name="floorNotes" id="floorNotes" class="floorNotesText"></textarea> 

</fieldset> 


<br/> 
<br/> 
<br/> 

</form> <!-- End Work Order Movement Form --> 

<fieldset id="doneButtonField"> 

    <input type="button" name="doneButton" id="doneButton" value="DONE"> 

</fieldset> 

MY AJAX:

  j("#searchButton").click(function(){ 


      //send Workorder Movement Data values to php using ajax. 

       var sgnumber = j('#sgnumber').val(); 
       j.ajax ({ 
        method: 'POST', 
        url: "workordermovementGET.php", 
        data: {sgNumber: sgnumber}, 
        dataType: 'json', 
        success: function(data){ 
         if(data.status){ 
          j("select#stageSelect option").filter(function() { 
           return j(this).val() == data.productionstage; 
           }).prop('selected', true); 
           j("textarea#floorNotes").val(data.floornotes); 
          } 

        } 
       }); 

     }); 

我的PHP:

include('inc.php'); 


//Get Table Options. 
if (isset($_POST['sgNumber'])) { 
    $sgNumber = $_POST['sgNumber']; 

    //connect to the database 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    // Check connection 
    if(mysqli_connect_errno()) { 
     printf('Could not connect: ' . mysqli_connect_error()); 
     exit(); 
    } 

    $conn->select_db($dbname); 

    if(! $conn->select_db($dbname)) { 
     echo 'Could not select database. '.'<BR>'; 
    } 

    $sql= "SELECT productionstage, floornotes FROM invoices WHERE id = ?"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bind_param('i', $sgNumber); 
    $stmt->execute(); 
    $stmt->store_result();  

    if ($stmt->num_rows == 1) { 
     $stmt->bind_result($productionstage, $floornotes); 
     $stmt->fetch(); 

     echo json_encode(array('status' => true, 'productionstage' => $productionstage, 'floornotes' => $floornotes)); 
    } else { 
     echo json_encode(array('status' => false)); 
    } 


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 


//Free the result variable. 
$result->free(); 


//Close the Database connection. 
$conn->close(); 


}//End If statement 

?> 

我需要知道如何正確地張貼的一部分我的ajax結果作爲選擇選項(th e數據庫值將匹配其中一個預定義的選項),然後取出其餘結果並顯示在textarea中。另外,如果我可以動態地做到這一點,那將是完美的。

謝謝!

+0

您的代碼中有一個SQL注入漏洞! – Hut8

+0

是的,我知道。我正在同時研究如何避免這種情況...任何有關已知鏈接/教程的建議都非常感謝。謝謝! – rdimouro

回答

1

你需要在你的代碼的一些變化,如:

  • 您需要收盤</form>標籤放置DONE按鈕下方,就像這樣:

    ... 
    
        <fieldset id="doneButtonField"> 
         <input type="button" name="doneButton" id="doneButton" value="DONE"> 
        </fieldset> 
    </form> 
    

    你的問題並沒有真正解釋你計劃如何使用這個DONE按鈕,但我相信你對此有一些想法。但是,這個答案圍繞着SEARCH按鈕和相關的jQuery/AJAX和PHP功能。

  • 通過以下方式更改您的jQuery/AJAX腳本,

    $("#searchButton").click(function(){ 
        var sgnumber = $('#sgnumber').val(); 
        $.ajax ({ 
         method: 'POST', 
         url: "workordermovementGET.php", 
         data: {sgNumber: sgnumber}, 
         dataType: 'json', 
         success: function(data){ 
          if(data.status){ 
           $("select#stageSelect option").filter(function() { 
            return $(this).val() == data.productionstage; 
           }).prop('selected', true); 
           $("textarea#floorNotes").val(data.floornotes); 
          } 
         } 
        }); 
    }); 
    

    它選擇一個特定productionstage從下拉列表並填充floornotes根據id值由用戶輸入數據在輸入文本字段中。

  • 最後,按照以下方式處理您的AJAX請求,即你的PHP代碼應該是這樣的:

    <?php 
        include('inc.php'); 
    
        if (isset($_POST['sgNumber'])) { 
         $sgNumber = $_POST['sgNumber']; 
    
         //connect to the database 
         $conn = new mysqli($servername, $username, $password, $dbname); 
    
         // Check connection 
         if(mysqli_connect_errno()) { 
          printf('Could not connect: ' . mysqli_connect_error()); 
          exit(); 
         } 
    
         $conn->select_db($dbname); 
    
         if(! $conn->select_db($dbname)) { 
          echo 'Could not select database. '.'<BR>'; 
         } 
    
         $sql= "SELECT productionstage, floornotes FROM invoices WHERE id = ?"; 
         $stmt = $conn->prepare($sql); 
         $stmt->bind_param('i', $sgNumber); 
         $stmt->execute(); 
         $stmt->store_result();  
    
         if ($stmt->num_rows == 1) { 
          $stmt->bind_result($productionstage, $floornotes); 
          $stmt->fetch(); 
    
          echo json_encode(array('status' => true, 'productionstage' => $productionstage, 'floornotes' => $floornotes)); 
         } else { 
          echo json_encode(array('status' => false)); 
         } 
        } 
    ?> 
    

    它採用prepared statement,所以你可以肯定,它是從SQL注入攻擊相當安全。此外,這是一個很好的閱讀how you can prevent SQL injection in PHP?

+0

謝謝!迄今爲止,這幫助很大。但是,我仍然看到我的選擇菜單不會隨着ajax的結果而改變。我的文本區域運行良好。我的測試ID選擇菜單應改爲下拉選項「Film Done」,因爲這是從數據庫接收的數據。但是,它從來沒有從列表中的第一個選項改變。 – rdimouro

+0

@rdimouro在'success'回調函數內執行'alert(data.productionstage)',看看你從服務器獲得什麼值。 –

+0

警報返回「完成電影」,因爲它應該。我似乎無法讓選擇菜單更改爲相同的選項。它可能是一個.prop()問題? – rdimouro

0

您需要製作一份數據庫結果數據庫和echo json_encode($your_array);。這會將您的數據作爲JSON對象返回到Ajax成功函數。然後,您可以解析該對象的select和textarea的數據。我不記得你是如何改變與JS所選擇的選項,但我知道它通常是在谷歌搜索的第一或第二個鏈接/