从 mysql 循环中选择表行


Select table row from a mysql loop

>我创建了一个while循环

while($row = mysql_fetch_Array($result)) { 
  echo '<tr class="record"> <td></td><td>'
     . $row['company'] .'</td><td>'
     . $row['project'].'</td><td>'
     . $row['assignee']. '</td><td>'
     . $row['current_milestone'] . '</td><td>'
     . $date=date("d-m-Y", strtotime($row['start_date'])).'</td><td>' ..'</td><td>'
     . $row['next_milestone'] . '</td><td>'
     .   $date=date("d-m-Y", strtotime($row['next_date']))
     .'</td></tr>' ; 
}

这显示正确,但我的问题是:

用户如何选择单个行以便他/她可以对其进行编辑。我希望用户可以选择他们想要的行,他们将被带到另一个屏幕,在那里他们可以进行更改。我可以弄清楚如何做我可以更新数据的部分。但这是选择行并收集正确的数据,我不知道该怎么做。

在其中的

某个位置嵌入一个<a href='update.php?id=>,它将记录 ID 作为查询字符串中的参数携带到更新脚本:

while($row = mysql_fetch_Array($result)) { 
  echo '<tr class="record"> <td></td><td>'
     // Insert a link with an id parameter.
     // Use whatever column value uniquely identifies your row
     . '<a href="update.php?id=' . $row['id'] . '"> Edit this! </a>' 
     // etc... 
     // etc...
     // etc...
     .'</td></tr>' ; 
}

并通过以下方式在更新脚本上检索它:

// Assuming an integer id was passed...
// if it is some other string value, escape and quote it accordingly.
$id = intval($_GET['id']);

您将需要检查进行编辑的用户是否有权编辑该记录。 换句话说,验证记录是否由用户拥有 已登录,因为从技术上讲,任何人都可以使用任何 ID 访问 URL,无论它是否属于他们。如:

UPDATE yourtable SET col1 = 'whatever', col2 = 'whatever' WHERE id = $id AND user_id = 'logged_in_user'
  1. 在数据库中创建某种主键(每个行/条目都不同的新字段(。示例:ID 字段
  2. 创建一个单独的更新页面,该页面接受 GET 参数id。例如:update.php
  3. 验证并清理 id 参数(确保它是有效的 ID,而不是 SQL 注入尝试,并且用户有权编辑此 ID(
  4. 从数据库中加载该 ID 的信息。例如:SELECT fields FROM table WHERE id = $id
  5. 显示表单,以便用户可以编辑信息。
  6. 验证表单输入并更新表。例如:UPDATE table SET field1=newVal WHERE id = $ID

首先,您需要在表中创建一个主键,假设在这种情况下primary_key,以便访问具有明确且唯一 ID 的特定行。

其次,在表中再添加一列:

while($row = mysql_fetch_Array($result)){
echo '<tr class="record"> <td></td><td>'
         . $row['company'] .'</td><td>'
         . $row['project'].'</td><td>'
         . $row['assignee']. '</td><td>'
         . $row['current_milestone'] . '</td><td>'
         . $date=date("d-m-Y", strtotime($row['start_date'])).'</td><td>' ..'</td><td>'
         . $row['next_milestone'] . '</td><td>'
         .   $date=date("d-m-Y", strtotime($row['next_date']))
         .'</td>' ; 
         ?>
         <td>
            <form action='update.php' method='post'>
               <input type="hidden" name="id" value="<?php echo $row['primary_key']; ?>">
               <input type="submit" value="Edit">
            </form>
         </td>
         <?php
         echo "</tr>";
    }
    ?>

现在您知道需要在表单中显示的哪一行的详细信息update.phpupdate.php上的代码是这样的:

<?php
$id = $_POST['id'];
$result = mysql_query("SELECT * FROM table WHERE primary_key = '$id'");
$info = mysql_fetch_array($result);
?>
<form action='target.php' method='post'>
   Company: <input type="text" name="company" value="<?php echo $info['company']; ?>">
   Project: <input type="text" name="project" value="<?php echo $info['project']; ?>">
   .
   .
   <input type="hidden" name="id" value="<?php echo $info['primary_key']; ?>">
   <input type="submit" value="Save Changes">
</form>

然后target.php您所要做的就是使用以下命令:

mysql_query("UPDATE table SET company='".$_POST['company']."' AND project='".$_POST['project']."' WHERE primary_key='".$_POST['id']."');