2012-05-25 86 views
0

早些时候,我发布了一个关于从循环中获取单个常量值并在循环之外使用它的问题(参考:Question)。 现在我正面临着另一个while循环的另一个问题。 它是这样的: 我有一个查询:PHP在循环之外获取变量

$sql = " 
     SELECT alarms.id, alarms.date, clients.name, clients.number, alarms.controller, 
     alarmstype.type, alarms.alarmstatus, alarms.starttime, alarms.endtime 
     FROM alarms 
     INNER JOIN clients ON alarms.clientid = clients.id 
     INNER JOIN alarmstype ON alarms.typeid = alarmstype.id 
     WHERE alarms.alarmstatus = 'ON' ORDER BY alarms.date ASC"; 
$result = mysql_query($sql); 

,并为每一行我已经在while循环assinged按钮:

 while ($row = mysql_fetch_array($result)) { 
     print "<tr> 
     <td>" . $row['date'] . "</td> 
     <td>" . $row['number'] . " | " . $row['name'] . "</td> 
<td>" . $row['controller'] . "</td> 
    <td>" . $row['type'] . "</td> 
    <td style='color: red'> 
     <select name = 'statusupdate' style='font-size:10px;'> 
      <option> " . $row['alarmstatus'] . " </option> 
      <option> OFF </option> 
     </select> 
     </td> 
      <td>" . $row['starttime'] . "</td> 
      <td>" . $row['endtime'] . "</td> 
      <td><input type='submit' name='delete' value='delete' /></td> 

到目前为止好。行显示正常,按钮在那里。 (所有while循环是一种形式标记,以便投入凉爽 任何方式 我要让这样的事:。

} 
    if (isset($_POST['delete'])) { 
     delete_alarm_from_database($alarmid) 
    } 

和功能是这样的:

function delete_alarm_from_database($id) { 
    //find alarm by id and delete: 
    $sql = "SELECT * FROM alarms WHERE id = " . $id; 
    $result = mysql_result($sql); 
    if (!$result) { 
    print "couldn't find record."; 
    } 
    //delete record from database: 
    else { 
    $sql = "DELETE FROM alarms WHERE id = " . $id; 
    $result = mysql_result($sql); 
    } 
} 

我的问题是这样的: 每一行都有一个id,但将它设置为一个变量将始终覆盖,直到他将最后一个循环到达的变量放入变量中(意味着每一行的每个删除按钮将简单地删除最后一个id页面加载)

问题是这样的。我怎样才能让每个删除按钮识别它的行ID?

在此先感谢 - 干杯。

回答

1

我建议改变你的程序了一下。将删除按钮更改为复选框,并允许用户一次删除多个。

变化

<td><input type='submit' name='delete' value='delete' /></td> 

<td><input type='checkbox' name='ids_to_delete[]' value='<?php echo $row['id']; ?>' /></td> 

然后在桌子

<input type='submit' name='delete' value='Delete selected rows' /> 
的末尾添加一个新的 Delete按钮

改变你的PHP现在来处理值的数组

if (isset($_POST['ids_to_delete']) && count($_POST['ids_to_delete']) > 0) { 
    foreach($_POST['ids_to_delete'] as $alarmid) { 
     delete_alarm_from_database($alarmid) 
    } 
} 

或甚至更好 - 更改您的delete_alarm_from_database函数以处理数组并一次删除它们。

+0

感谢您的回复,您的方法就是我的解决方案。认为它有一个小问题。如果你按下删除按钮而没有检查任何东西,它会产生一个错误casue,它甚至没有设置$ _POST ['id ...'],所以它输出了一个不明的索引。所以我改变了你的PHP想法一点,所以它会工作:而不是计数我处理isset的Isset提交内的isset。欢呼声谢谢你。 – FedeSc

1

您需要为每条记录使用单独的表格。

While ($row=mysql_fetch_array($result)){ 

    <form method="post" .....> 
    ..... 
    <select> 
     <option value="'.$value.'">title</option> 
    </select> 
    ..... 

    </form> 
}