从mysql循环中选择表行

时间:2012-07-28 20:23:02

标签: php mysql

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

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

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

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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

答案 2 :(得分: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']."');