2016-01-21 41 views
0

即时试图删除PHP行(我做到了),但是,总是删除最后一排,我知道为什么...因为每次我在页面刷新或输入,每次我得到了id =“lastrow”,我的问题是,我不知道为什么每次我得到最后一行id ...`$ query =“SELECT * FROM ph”; $ rs = mysql_query($ query);删除一行用PHP问题

while ($ph = mysql_fetch_array($rs)) { 
     echo utf8_encode(" 
     <tr class='etapastext'> 
      <td > 
      ".$ph['name']." 
      </td> 
      <td> 
      <input type='submit' name='".$ph['id']."' value='Eliminar' > 
      <input type='hidden' name='name' value='".$ph['id']."'> 
      </td> 
      "); }` 

然后我可以访问我想删除的项目的ID,我用这个代码

$query = "DELETE FROM ph WHERE ph.id = '".$_POST['name']."'"; 
mysql_query($query); 

我使用$_POST['name']因为是一个形式,以及我不知道如果即时通讯做的最好的办法还是什么IM做坏事

我附和$query我得到DELETE FROM ph WHERE ph.id = '24'当“24”始终是我的表中的最后一行

+3

SQL注入风险... – wogsland

回答

1

由于定义,应该是在一个单一的形式,每个输入类型独特的名字,你在做什么是允许多个用户输入的类型与

name="name" 

从技术上讲,当您的表单将被提交最后一个输入类型的名称='名称'与表格一起发送。那就是你做错了的地方。我不是专业人士,但根据我的观点,您有3个选项可以从数据库表中删除一行。

  1. 使用GET方法与URL(最好的方式)像

    www.xyz.com/delete.php?id=5

  2. (会搞乱送您价值代码)使用单独的表单和提交按钮为每个输入类型和最重要的,你的表格应该开始在td

  3. 你将创建一个JavaScript运行时的表单,并基于 选定的行值将填充和形式将提交, (建议,如果你想使用后,因为它会让你的代码 干净)

希望这将有助于

0

你需要一个形式每各html.tr.td

由于您提交的整个结果,最后一个始终覆盖以往任何一次当form.input.name相同。

除非你改变你的input.name到别的

while ($ph = mysql_fetch_array($rs)) { 
    echo ' 
     <form ....> 
     <tr class="etapastext"> 
      <td>', $ph['name'], '</td> 
      <td> 
       <input type="submit" value="Eliminar"> 
       <input type="hidden" name="name" value="', $ph['id'], '"> 
      </td> 
     </tr> 
     </form> 
    '; 
) 
0

从我所看到的迄今为止的东西,你的<tr>标签不被关闭while()循环中。我会假设对于$ph中的每个数组项目,您都希望它们各自拥有自己的表格行。

固定码下面

while ($ph = mysql_fetch_array($rs)) { 
    echo utf8_encode(" 
     <tr class='etapastext'> 
      <td > 
       ".$ph['name']." 
      </td> 
      <td> 
       <input type='submit' name='".$ph['id']."' value='Eliminar' > 
       <input type='hidden' name='name' value='".$ph['id']."'> 
      </td> 
     </tr> 
    "); 
} 

希望这有助于