Php Mysql在单击元素时删除表中的条目

Php Mysql在单击元素时删除表中的条目,php,jquery,mysql,Php,Jquery,Mysql,我正在尝试创建一个表来管理上传的音乐,我希望这样,当用户按下“删除”时,它会删除条目。这是我正在使用的代码 <?php $sql="SELECT * FROM content WHERE `uploader` = '" . $user_data['username'] . "' ORDER BY id DESC"; $records=mysql_query($sql); while($sound=mysql_fetch_assoc($records)){ echo "<tr

我正在尝试创建一个表来管理上传的音乐,我希望这样,当用户按下“删除”时,它会删除条目。这是我正在使用的代码

<?php
$sql="SELECT * FROM content WHERE `uploader` = '" . $user_data['username'] . "' ORDER BY id DESC";
$records=mysql_query($sql);
while($sound=mysql_fetch_assoc($records)){
    echo "<tr class='adder'>";
    echo "<td width='40' class='player'>&nbsp;&nbsp;<a href='".$sound['link']."' class='sm2_button'>Play/</a></td>";
    echo '<td width="75" class="name">'.$sound['date'].'</td>';
    echo '<td width="150" class="name">'.$sound['name'].'</td>';
    echo "<td width='58' class='bpm'>".$sound['uploader']."</td>";
    echo "<td width='220' class='keywords'>".$sound['keywords']."</td>";
    echo "<td width='50' class='keywords'>Edit</td>";
    echo "<td width='50' class='keywords'><span onclick='mysql_query('DELETE FROM content WHERE id = ".$sound['id']." ')>Delete</span></td>";
    echo "</tr>";
    }
?>

我不是php开发人员,但我相信您应该向服务器提交数据。您的代码似乎只是在打印
'mysql_query('DELETE FROM content WHERE id=“.$sound['id']”中的DELETE)

转到html页面

你应该做的是

  • 通过POST或GET示例(deleteSound.php?soundId=1)向服务器提交数据
  • deleteSound.php然后将使用php代码(服务器代码)删除id=1的声音
  • 删除声音后,将其重定向回原始页面(soundlist.php)

  • 使用ajax尝试下面的代码

    viewContent.php

    <?php
    $sql="SELECT * FROM content WHERE `uploader` = '" . $user_data['username'] . "' ORDER BY id DESC";
    
    $records=mysql_query($sql);
    while($sound=mysql_fetch_assoc($records)){
    ?>
      <tr class='adder'>
        <td width='40' class='player'>&nbsp;&nbsp;<a href='<?php echo $sound['link']; ?>' class='sm2_button'>Play/</a></td>
        <td width="75" class="name"><?php echo $sound['date']; ?></td>
        <td width="150" class="name"><?php echo $sound['name']; ?></td>
        <td width='58' class='bpm'><?php echo $sound['uploader']; ?></td>
        <td width='220' class='keywords'><?php echo $sound['keywords']; ?></td>
        <td width='50' class='keywords'>Edit</td>
        <td width='50' class='keywords'><span onclick='deleteContent(<?php echo $sound['id']; ?>)'>Delete</span></td>
        </tr>
        }
    ?>
    
    <script>
    function deleteContent(id)
    {
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        window.location="/viewContent.php";
        }
      }
    xmlhttp.open("GET","deleteContent.php?q="+id,true);
    xmlhttp.send();
    }
    </script>
    
    <?php
    $id=$_GET['id'];
    mysql_query('DELETE FROM content WHERE id = ".$id." ')
    echo "done";
    
    ?>
    
    
    编辑
    
    这真的很简单

    创建一个名为process.php的页面

    <?php
    // include your connection file
    
    $id = "0";
    if (isset($_GET['id'])) {
      $id = $_GET['id'];
    }
    
    try {
        $sql = "DELETE FROM table-name WHERE id=:id";
        $stmt = $conn->prepare($sql);
        $stmt->bindValue(':id', $id, PDO::PARAM_INT);
        $stmt->execute();
    } catch (PDOException $e) {
        die("Could not delete from the table: " . $e->getMessage());
    }
      $GoTo = "/the/path/where/you/want/to/send/the/visitor.php";
      header(sprintf("Location: %s", $GoTo));
    ?>
    
    
    
    那就换一行

    echo "<td width='50' class='keywords'><span onclick='mysql_query('DELETE FROM content WHERE id = ".$sound['id']." ')>Delete</span></td>";
    

    echo”我刚刚重申了一个更安全的方法是使用$\u POST…通过使用$\u GET,任何用户都可以通过更改“process.php?id=x”删除另一个用户条目

    我不得不用一个表单按钮来做这个

    表格行:

    echo "<td width='50' class='keywords'><form name='deletesound' class='deletesound' method='post' action='process.php'> 
    
    <?php
    ob_start();
    include 'core/init.php'; 
    include 'includes/header.php';
    protect_page();
    
    $id = $_POST['getid'];
    if (isset($_POST['getid'])) {
      $id = $_POST['getid'];
      mysql_query("DELETE FROM content WHERE id = $id");
      header('Location: manage.php');
      exit();
    }
    ?>
    
    echo”
    

    process.php:

    echo "<td width='50' class='keywords'><form name='deletesound' class='deletesound' method='post' action='process.php'> 
    
    <?php
    ob_start();
    include 'core/init.php'; 
    include 'includes/header.php';
    protect_page();
    
    $id = $_POST['getid'];
    if (isset($_POST['getid'])) {
      $id = $_POST['getid'];
      mysql_query("DELETE FROM content WHERE id = $id");
      header('Location: manage.php');
      exit();
    }
    ?>
    
    
    
    echo“删除";
    Try this您还没有关闭onclick函数末尾和之前的单引号>php中不推荐使用可能重复的mysql模块。最佳实践是使用。您不应该使用mysql_*函数,因为它们已被弃用。另外,您还没有在PHP中定义
    $sound
    。假设您的意思是
    $id
    而不是
    $sound['id']
    ,那么您的代码可以接受SQL注入。这只是演示ajax功能的示例代码。无法解释使用PDO等进行代码优化,因为它超出了本问题的范围。辩护地说,我的意思是$id,对于那个错误我很抱歉。我不同意。您提供了一个答案,所以在某种意义上,它是您的代码。这是您建议OP在其服务器上执行的操作,因此您应该采取预防措施,使其免受常见攻击,并且不要使用不推荐使用的功能。感谢您向正确的方向发送此消息!流程页面出现了一些问题simpler@Jeff如果这个答案对你有帮助并且回答了你的问题,请不要忘记。另请参见和。