2

我创建了一个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>' ; 
}

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

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

4

3 回答 3

0

在其中嵌入一个<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'
于 2012-07-28T20:28:47.547 回答
0
  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
于 2012-07-28T20:30:44.550 回答
0

首先,您需要在表中创建一个主键,假设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.php 代码update.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']."');
于 2012-07-28T20:56:41.633 回答