2016-03-19 20 views
-1

Sitem için mesajlaşma sistemi oluşturdum ve bu, farklı kullanıcı mesajlarını profillerinde görüntülemek için kullandığım kod. Bu, iletileri veritabanından alır ve bunları sayfada div'larda görüntüler (her mesajda yeni div). Belirli mesajı silmek için kullanıcıya 'SİLME MESAJI' ekledim ancak nasıl çalışacağını bilmiyorum. Div ve veritabanı kaydını silmeyi istiyorum. PHP'de yeniyim ve bunu yapmam benim için çok karmaşık.Tanılama ve silme kayıtlarını sil

<div style='height: auto; margin-top: 0px; padding: 50px;' id='content'> 
<?php 
    session_start(); 
    if (!isset($_SESSION['name'])) { 
     header('Location:vhod.php'); 
     exit; 
    } 

    $pageTitle = 'СЪОБЩЕНИЯ'; 
    include 'includes/header.html'; 

    $email = $_SESSION['email']; 
    $name = $_SESSION['name']; 

    include 'php/db_connect.php'; 

    $msgs = ''; 
    $query = "SELECT * FROM `msg` WHERE `to` = '$name'"; 
    $result = mysqli_query($conn, $query); 

    if (mysqli_num_rows($result) > 0) { 
     while($row = mysqli_fetch_assoc($result)) { 
      echo "<div class='msg_box'>" . "<strong>>> Дата и час: </strong>" . $row["timestamp"] . "<br>" . " <strong>>> От: </strong>" . "<i>" . $row["sender"] . "</i>" . "<br>" . " <strong>>> Тема: </strong>" . "<i>" . $row["subject"] . "</i>" . "<br>" . "<strong>>> Съобщение: </strong>" . "<i>" . $row["msg"] . "</i>" . "<br>" ."<br>" ."<strong><a href='' >DELETE MESSAGE</a></strong>" . "</div>" . "<br>" . "<br>" . "<br>" ; 
     } 
    } else { 
     echo "<h2>Нямате съобщения :(</h2>"; 
    } 
?> 

</div> 
+0

Kişisel koduyla sorguda $row["id"] ve id yerine

Not sözde sql enjeksiyon saldırısına karşı savunmasız olduğunu. Sonuç olarak ** herhangi biri ** veritabanınızı silebilir (ya da diğer kötü şeyler). Lütfen [PHP'de SQL-enjeksiyonunu nasıl önleyebilirim?] Okuyun (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) burada stackoverflow.com adresinde – Jacco

cevap

0

Veritabanındaki bir öğeyi silmek için sütun değerlerinden birine başvuruyorsunuz. Bunun için kaydın ID değerini kullanmak en iyisidir. Dolayısıyla, her iletinin kimliğini 'iletiyi sil' bağlantınızda geçirmeniz gerekir. Daha sonra mesajın kimliğini girilen "SİLME MESAJI" düğmesi için ayrı bir komut dosyası işlevi oluşturmanız gerekir.

<div style='height: auto; margin-top: 0px; padding: 50px;' id='content'> 
<?php 
session_start(); 
if (!isset($_SESSION['name'])) { 
    header('Location:vhod.php'); 
    exit; 
} 

$pageTitle = 'СЪОБЩЕНИЯ'; 
include 'includes/header.html'; 

$email = $_SESSION['email']; 
$name = $_SESSION['name']; 

include 'php/db_connect.php'; 

$msgs = ''; 
$query = "SELECT * FROM `msg` WHERE `to` = '$name'"; 
$result = mysqli_query($conn, $query); 

if (mysqli_num_rows($result) > 0) { 
    while($row = mysqli_fetch_assoc($result)) { 
     echo "<div class='msg_box'>" . 
      "<strong>>> Дата и час: </strong>" . $row["timestamp"] . "<br>" . 
      " <strong>>> От: </strong>" . "<i>" . $row["sender"] . "</i>" . "<br>" . 
      " <strong>>> Тема: </strong>" . "<i>" . $row["subject"] . "</i>" . "<br>" . 
      "<strong>>> Съобщение: </strong>" . "<i>" . $row["msg"] . "</i>" . "<br>" ."<br>" . 
      "<strong><a href='deletemsg.php?id=".$row["id"]."' >DELETE MESSAGE</a></strong>" . "</div>" . "<br>" . "<br>" . "<br>" ; 
    } 
} else { 
    echo "<h2>Нямате съобщения :(</h2>"; 
} 
?> 

</div> 

deletemsg.php:

<?php 
$msgsid = $_GET("id"); 
include 'php/db_connect.php'; 

//create connection if you need it 

$query = "DELETE FROM `msg` WHERE `id` = '$msgsid'"; 
$result = mysqli_query($conn, $query); 

sayfayı yenileyin Daha

bu kodu deneyin. (Farklı ise) satırların kimliğini içeren db sütun adına

+0

" Bir öğeyi veritabanından silmek için kimliğine benzersiz olarak erişebilirsiniz. " basitçe doğru değildir: herhangi bir sütunda herhangi bir değeri eşleştirerek herhangi bir kaydı silebilirsiniz. – Jacco

+0

bana -1 vermek için gerekli mi? Ben yardımcı olmak için çalışıyorum @Jacco – Yeti82

+0

İyi niyetli bir hata yaptınız görünüyor, bu yüzden benim -1 undid ve yerine cevabınızı düzenledi. Umarım sakıncası yoktur. – Jacco