2015-09-07 107 views
1

我想創建一個表來管理上傳的音樂,我想這樣當用戶按'刪除'它刪除條目。這是我正在使用的代碼。當一個元素被點擊時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 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>"; 
    } 
?> 
+0

'回聲 「<跨越的onclick = '的mysql_query(' DELETE FROM內容WHERE ID =」 $發聲。[ 'ID']「。 ')'>刪除「;'試試這個 – aldrin27

+0

您沒有關閉onclick函數的單引號,並且在> –

+1

之前可能重複[客戶端和服務器端編程有什麼區別?]( http://stackoverflow.com/questions/13840429/what-is-the-difference-between-client-side-and-server-side-programming) – Mike

回答

1

這真的很簡單

例如稱爲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 "<td width='50' class='keywords'><a href=\"process.php?id=".$sound['id']."\">Delete</a></td>"; 

希望這個hel PS。

編碼愉快!

+0

感謝這在正確的方向發送!過程頁面出來了一點點簡單 – Jeff

+0

@Jeff如果這個答案對你有幫助並回答你的問題,請不要忘記[接受那個答案](http://meta.stackexchange.com/questions/5234/how -does接受-的回答工作)。 另請參閱[回答「接受」時的含義是什麼?](http://meta.stackexchange.com/help/accepted-answer)和[爲什麼投票重要?](http://meta.stackexchange .COM /幫助/爲什麼票)。 – Kuya

1

我不是一個PHP開發人員,但我相信你應該提交數據到服務器。看起來你的代碼只是在html頁面上輸出'mysql_query('DELETE FROM contents WHERE id =「。$ sound ['id']。'')

你應該做的是

  1. 或者通過POST提交數據到服務器或GET例(deleteSound.php?soundId = 1)
  2. deleteSound.php然後將刪除ID爲聲音= 1使用刪除聲音重定向回原來的頁面(soundlist.php)
-1

試試下面的代碼與阿賈克斯後的PHP代碼(服務器代碼)

  • 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> 
    

    deleteContent.php

    <?php 
    $id=$_GET['id']; 
    mysql_query('DELETE FROM content WHERE id = ".$id." ') 
    echo "done"; 
    
    ?> 
    

    以上代碼發送從視圖頁面請求通過Ajax刪除頁面,並獲得當repsonse重新加載頁面。

  • +0

    您不應該使用mysql_ *函數,因爲它們已被棄用。另外,你還沒有在PHP中定義'$ sound'。假設你的意思是'$ id'而不是'$ sound ['id']',你的代碼是開放給SQL注入的。 – Mike

    +0

    只是一個演示Ajax功能的示例代碼。不能解釋代碼優化使用PDO等,因爲它超出了這個問題的範圍。我的意思是$ id,併爲那個錯誤感到抱歉。 –

    +0

    我不同意。你提供了一個答案,所以在某種意義上它是*你的*代碼。這就是您推薦OP在其服務器上執行的操作,因此您應該採取預防措施,以防止常見攻擊,並且不使用已棄用的功能。 – Mike

    0

    我只是relized一個更安全的方法是使用$ _POST ......通過使用$ _GET任何用戶可以通過更改刪除其他用戶進入「process.php?ID = X」

    我不得不使用表單按鈕做到這一點....

    錶行:

    echo "<td width='50' class='keywords'><form name='deletesound' class='deletesound' method='post' action='process.php'> 
    

    「;

    過程。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(); 
    } 
    ?> 
    
    相關問題