2016-12-05 76 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所选择的选项,但我知道它通常是在谷歌搜索的第一或第二个链接/