2016-02-20 89 views
0

我有一个从我的sql数据库输出数据的网页。每一行都有一个删除按钮,应该删除这个特定行中的数据。我遇到了一个问题,当我单击删除按钮时,无论点击哪个按钮,它都会删除具有第一个/最低ID的行。它不删除我想要删除的行。这里是我的代码: HTML从表中删除行的按钮 - PHP SQL

<form action="process.php" method="post"> 
<?php 
$sql = " 
    SELECT * 
     FROM playerTeam 
"; 
$result = mysqli_query($connection, $sql); 
?>  
<table> 
    <?php 
    if (mysqli_num_rows($result) > 0) { 
     while ($row = mysqli_fetch_assoc($result)) { ?> 
      <tr> 
       <td><input type="text" name="id" value="<?php echo $row['id']?>"></td> 
       <td><input type="text" name="fName[]" value="<?php echo $row['firstName']?>"></td> 
       <td><input type="text" name="sName[]" value="<?php echo $row['surName']?>"></td> 
       <td><input type="text" name="team[]" value="<?php echo $row['team']?>"></td> 
       <td><input type="submit" name="delete" value="Delete"></td> 
       <td><input type="submit" name="update" value="Update"></td> 
      </tr> 
      <?php 
     } 
    } 
    ?> 
    </table> 
</form> 

process.php

if (isset($_POST['delete'])) { 
    $id = $_POST['id']; 
    $sql = "DELETE FROM playerTeam WHERE id='$id'"; 

    if (mysqli_query($connection, $sql)) { 
     echo "Record deleted"; 
    } else { 
     echo "Error: " . $sql . "<br>" . mysqli_error($connection); 
    } 
} 

请可能有人帮助我。由于

+0

'输入型=“submit”'没有名字,所以'name = delete'被忽略 –

+0

尝试回显'$ id'来仔细检查它是否是你想删除的行 – Panda

+0

@luweiqi当我回显'$ id '它没有输出正确的值,每个按钮总是输出我的第一个ID表。如果我将隐藏的id输入到数组中并对其进行迭代,则会输出所有的id。 – SnowmanPusha

回答

0

因为你在,而每次运行删除最后id的值在

$id = $_POST['id']; 

$sql = "DELETE FROM playerTeam WHERE id='$id'"; 

$_POST['id']的值等于最后一行<?php echo $row['id']?>$_POST['id']值换成新$row['id']所以最后的将被读入$_POST['id']

0

因为您使用的是while($row = mysqli_fetch_assoc($result)),它将循环到MySQL表的最后一行,因此每次它都会有最后一个表id

你可以用你的删除脚本得到id的方式进行编码。因此,每行的删除按钮将具有row id,例如, process.php?1,process.php?2,process.php?3等。

tablepage.php(不知道你的页面的真实姓名)

替换此行:

<td><input type="submit" name="delete" value="Delete"></td> 

有了这个:

<td><p><a href="/process.php?id=<?php echo $id; ?>"></td> 

process.php?id=1

// this will get `id=1` and thus your `id` will be `1`, and it will delete row `1`. 
$id = $_GET['id']; 

$sql = "DELETE FROM playerTeam WHERE id='$id'"; 

if (mysqli_query($connection, $sql)) { 
    echo "Record deleted"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($connection); 
} 

希望有帮助,谢谢!

+0

感谢您的回答,如果我使用例如'$ sql =“SELECT * FROM playerTeam WHERE id = 1”'不会这只是输出一行包含ID值为1 – SnowmanPusha

+0

@SnowmanPusha是的,但不是你想要删除一行? – Panda

+0

是我想要删除一行,但我希望用户通过单击删除按钮来选择行。每行都有一个删除按钮,单击时删除该特定行。道歉,如果我的手术不清楚。 – SnowmanPusha

0

在这种情况下实际,使用Ajax和jQuery是更容易,我认为。但也只有php会是使用逻辑代码

$i = 0; 
    while($row = mysqli_fetch_assoc($result)) 
    { 
    ?> 
     <tr> 
      <td><input type="text" name="id_<?= $i ?>" value="<?php echo $row['id']?>"></td> 
      <td><input type="text" name="fName[]" value="<?php echo $row['firstName']?>"></td> 
      <td><input type="text" name="sName[]" value="<?php echo $row['surName']?>"></td> 
      <td><input type="text" name="team[]" value="<?php echo $row['team']?>"></td> 
      <td><input type="submit" name="delete[<?= $i ?>]" value="Delete"></td> 
      <td><input type="submit" name="update[<?= $i ?>]" value="Update"></td> 
     </tr> 
     <?php 
     $i++; //for unique num for each row 
    } 

process.php

if (isset($_POST['delete'])){ 
    $delete_id = array_keys($_POST['delete']);//print array key as a array 
    $delete_id = $delete_id[0];//so get array key 
    $id = $_POST["id_$delete_id"];//get its relative id 
    ..... 
}