我是PHP和MySQL的初学者。我可以在MySQL数据库的表中显示数据。没关系。但是我想要知道的是如何显示具有从表中选择的数据的弹出窗口。

到目前为止,我已经完成了此操作,但是我需要的是,当用户单击或选择表行时,必须在表附近显示带有选择数据的弹出窗口。

这是我的代码,请告诉我我该怎么做:

<?php
include('config.php');
?>
<html>
  <head>
    <title>Event Patrol</title>
  </head>
  <body>
    <br />
    <center>
    <?php
    $conn = mysql_connect('I have', 'I have', 'I have');
    mysql_select_db('I have', $conn);

    echo '<table>';
    '<tr>';
    '<td>Event</td>';
    '<td>Record Date</td>';
    '</tr>';
    $sql = "SELECT * from people where PersonId = '".$_GET["PersonId"]."'";
    $rs = mysql_query($sql,$conn) or die(mysql_error());
    while($result= mysql_fetch_array($rs)) {
        echo '<tr>
        <td>'.$result["Event"].'</td>
        <td>'.$result["RecordDate"].'</td>
        </tr>';
    }
    echo '</table>';
    ?>
    </div>
    </center>

    <div id="r" style="width:600px; align:centre"> </div>
    <center>
      <div id="content">
      <?php
      // Open database connection
      $con = mysql_connect("sql14.cpt1.host-h.net","rootaccess1","Screen_1");
      mysql_select_db("sentinelcrm", $con);

      $sql = "SELECT * FROM people";

      $result = mysql_query($sql);
      echo '<table cellpadding="5" cellspacing="0" border="1">';
      echo '<tr>';
      echo '<th>ID</th>';
      echo '<th>Event</th>';
      echo '<th>Control Room</th>';
      echo '<th>Date</th>';
      echo '<th>Site ID </th>';
      echo '<th>Action</td>';
      echo '</tr>';
      while ($rows = mysql_fetch_array($result)) {
          echo    '<tr>';
          echo    '<td>';
          echo    $rows['PersonId'];
          echo'</td>';
          echo    '<td>';
          echo $rows['Event'];
          echo '</td>';
          echo    '<td>';
          echo $rows['Control_Room_ID'];
          echo '</td>';
          echo    '<td>';
          echo $rows['RecordDate'];
          echo '</td>';
          echo '<td><a href="" >';
          echo $rows['Site_ID'];
          echo '</a></td>';
          echo '<td><input type="button" value="Edit" id="opener"/>';
          echo  '</tr>';
      }
      ?>
      </div>
    </center>
  </body>
</html>

最佳答案

您的代码中存在一个漏洞:

$sql= "SELECT * from people where PersonId = '".$_GET["PersonId"]."'";


由于您尚未检查此用户输入中的内容,因此黑客可以注入自己的SQL,并以您不希望的方式在数据库上运行该SQL。在此库的情况下,黑客无法绝对运行任何东西,因为它必须在您的SELECT查询上下文中有意义,并且(谢天谢地)该库不支持一次运行多个查询。这将允许他们发出DELETEDROP或其他具有破坏性的内容。

但是,黑客可以修改SELECT语句以使自己能够访问他们不应该访问的帐户或数据。这个特定的查询可能对安全性不敏感,但是,安全性是您应该一直保持的心态,不仅是在您认为重要的时候。

消除安全漏洞的一种简单方法是将数字强制转换为整数(假定此字段确实是整数而不是字符串变量)。这不是理想的方法,但是会起作用:

$personId = (int) $_GET["PersonId"];
$sql= "SELECT * from people where PersonId = '{$personId}'";


现在是安全的。但是,建议同时执行以下两项操作:


由于您的库已弃用,请切换到现代库,例如PDO / mysql或mysqli
使用查询参数化(搜索)

关于php - 如何显示带有从ID中提取数据的表中选择数据的弹出窗口?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28318674/

10-12 16:51
查看更多