Avatar billede fdtaskin Nybegynder
05. januar 2010 - 19:39 Der er 8 kommentarer og
1 løsning

Slet indlæg i Gæstebog direkte på hjemmesiden

Hej alle
Jeg har et gæstebog php script som jeg bruger.
Men kunne godt tænke mig lidt hjælp til hvordan scriptet skal se ud så man som admin kan gå ind og slette indlæg direkte fra hjemmesiden ? Altså hvor den henter oplysningerne fra Mysql og så kan man tryk slet ud for de indlæg som skal slettes. Det lidt provokerende nogen spammer i ens gæstebog.

jeg ved man skal bruge DELETE funktionen, men ved bare ikke hvordan. Hvordan skal såden et script nøjagtig se ud?

Mit gæstebog script ser således ud:

<?php
ob_start();
mysql_connect("???", "???", "KODE") or die(mysql_error());
mysql_select_db("???") or die(mysql_error());
?>
<html>

<head>
<meta http-equiv="Content-Language" content="da">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
</head>

<body bgcolor="#FEC0CC">
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $besked = mysql_real_escape_string(stripslashes($_POST['kommentarbesked'])) ;
    $navn = mysql_real_escape_string(stripslashes($_POST['navn'])) ;
    $mail = mysql_real_escape_string(stripslashes($_POST['mail'])) ;
    if(empty($navn)) { print("Du mangler at udfylde fylde dit navn"); }
        elseif(empty($besked)) { print("Du mangler at udfylde en besked"); }
        else
    {
    $dato = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    mysql_query("INSERT INTO tagwall (navn, dato, ip, besked, mail) values ('$navn', '$dato', '$ip', '$besked', '$mail')") or die(mysql_error());
    header("LOCATION: gaestebog.php");
    }
}
?>
<form name="tagwall" method="post" action="?p=tagwall">
<p align="center"><font size="2" face="Verdana">Skriv endelig en hilsen i vores
gæstebog</font></p>
<p align="center"><font size="2" face="Verdana">Er du i tvivl om noget spørger
du løs. Vi svarer så hurtig vi nu kan!</font></p>
<p align="center"> </p>
<p align="center"><font face="Verdana" size="2"><b>Navn:  </b></font> 
<input type="text" name="navn" id="navn" size="20" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC">                </p>
<p align="center"><b><font size="2" face="Verdana">Email: </font></b> 
<input type="text" name="mail" id="mail" size="20" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC">
<font size="2" face="Verdana">(Valgfrit)</font></p>
<p align="center"><b><font size="2" face="Verdana">Besked: </font></b> 
<textarea rows="9" id="textfield" name="kommentarbesked" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC" cols="27"></textarea></p>
<p align="center">
<input name="addartikel" type="submit" id="addnyhed" value="Tilføj besked" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC; font-family:Verdana"></p>
</form>
<p align="center">-----------------</p>


        <table border="0" cellpadding="2" width="48%" align="center">
        <?PHP
        $result = mysql_query("SELECT * FROM tagwall ORDER BY id DESC") or die(mysql_error());
        while ($r = mysql_fetch_array($result)) {
        $besked = nl2br($r["besked"]);
        ?>
        <tr>
        <td width="100%">

        <table border="1" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="83%" align="center">
        <tr>
        <td width="50%" bgcolor="#C0C0C0"><b><?=$r["navn"];?></b> </td>
        <td width="50%" bgcolor="#C0C0C0"><b><a href="mailto:<?=$r["mail"];?>" title="Mail <?=$r["navn"];?>"><?=$r["mail"];?></a></b></td>
        </tr>
        <tr>
        <td width="100%" colspan="2" bgcolor="#FFFFFF"> <?=$besked;?></td>
        </tr>
        <tr>
        <td width="50%" bgcolor="#C0C0C0"> </td>
        <td width="50%" bgcolor="#C0C0C0">
        <p align="right"><b><?= date("j/n-Y  H:i", $r["dato"]);?></b></td>
        </tr>
        </table>
   
        </td>
        </tr>
          <tr>
        <td width="100%" colspan="2" height="20"></td>
        </tr>

        <?php
        }
        ?>
        </table>

</body>

</html>
Avatar billede Slettet bruger
05. januar 2010 - 20:33 #1
Disse linjer vil slette en besked:
if(isset($_GET['deleteId'])){
  mysql_query("DELETE FROM `tagwall` WHERE `id` = '" . $_GET['deleteId'] . "'");
}

Du skal slette før denne linje (ellers henter du en besked, som er ved at blive slettet, og den vil derfor fremstå som ikke slettet indtil siden reloaded):
$result = mysql_query("SELECT * FROM tagwall ORDER BY id DESC") or die(mysql_error());

Denne linje vil tilføje et link til at slette.
$besked = nl2br($r["besked"] & " - <a href='?deleteId" . $r["id"] . "'>slet</a>");

Denne løsning kræver ikke admin login, men gør det muligt for alle at slette i din tagwall.
Avatar billede repox Seniormester
05. januar 2010 - 21:11 #2
Mmm... sql injection når det er bedst...
Avatar billede fdtaskin Nybegynder
05. januar 2010 - 21:32 #3
det ser rigtigt ud det du skrev, men er det muligt du vil overfør de koder du skrev ind i scriptet for ved seriøs ikke hvor jeg skal placer de koder du skrev..??
Avatar billede Slettet bruger
05. januar 2010 - 21:39 #4
Her er hele koden. Som repox skriver, gav mit forslag mulighed for injections. Det er der taget højde for nu.

<?php
ob_start();
mysql_connect("???", "???", "KODE") or die(mysql_error());
mysql_select_db("???") or die(mysql_error());
if(isset($_GET['deleteId'])){
  mysql_query("DELETE FROM `tagwall` WHERE `id` = '" . mysql_real_escape_string($_GET['deleteId']) . "'");
}


?>
<html>

<head>
<meta http-equiv="Content-Language" content="da">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
</head>

<body bgcolor="#FEC0CC">
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $besked = mysql_real_escape_string(stripslashes($_POST['kommentarbesked'])) ;
    $navn = mysql_real_escape_string(stripslashes($_POST['navn'])) ;
    $mail = mysql_real_escape_string(stripslashes($_POST['mail'])) ;
    if(empty($navn)) { print("Du mangler at udfylde fylde dit navn"); }
        elseif(empty($besked)) { print("Du mangler at udfylde en besked"); }
        else
    {
    $dato = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    mysql_query("INSERT INTO tagwall (navn, dato, ip, besked, mail) values ('$navn', '$dato', '$ip', '$besked', '$mail')") or die(mysql_error());
    header("LOCATION: gaestebog.php");
    }
}
?>
<form name="tagwall" method="post" action="?p=tagwall">
<p align="center"><font size="2" face="Verdana">Skriv endelig en hilsen i vores
gæstebog</font></p>
<p align="center"><font size="2" face="Verdana">Er du i tvivl om noget spørger
du løs. Vi svarer så hurtig vi nu kan!</font></p>
<p align="center"> </p>
<p align="center"><font face="Verdana" size="2"><b>Navn:  </b></font> 
<input type="text" name="navn" id="navn" size="20" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC">                </p>
<p align="center"><b><font size="2" face="Verdana">Email: </font></b> 
<input type="text" name="mail" id="mail" size="20" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC">
<font size="2" face="Verdana">(Valgfrit)</font></p>
<p align="center"><b><font size="2" face="Verdana">Besked: </font></b> 
<textarea rows="9" id="textfield" name="kommentarbesked" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC" cols="27"></textarea></p>
<p align="center">
<input name="addartikel" type="submit" id="addnyhed" value="Tilføj besked" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC; font-family:Verdana"></p>
</form>
<p align="center">-----------------</p>


        <table border="0" cellpadding="2" width="48%" align="center">
        <?PHP
        $result = mysql_query("SELECT * FROM tagwall ORDER BY id DESC") or die(mysql_error());
        while ($r = mysql_fetch_array($result)) {
        $besked = nl2br($r["besked"] & " - <a href='?deleteId" . $r["id"] . "'>slet</a>");
        ?>
        <tr>
        <td width="100%">

        <table border="1" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="83%" align="center">
        <tr>
        <td width="50%" bgcolor="#C0C0C0"><b><?=$r["navn"];?></b> </td>
        <td width="50%" bgcolor="#C0C0C0"><b><a href="mailto:<?=$r["mail"];?>" title="Mail <?=$r["navn"];?>"><?=$r["mail"];?></a></b></td>
        </tr>
        <tr>
        <td width="100%" colspan="2" bgcolor="#FFFFFF"> <?=$besked;?></td>
        </tr>
        <tr>
        <td width="50%" bgcolor="#C0C0C0"> </td>
        <td width="50%" bgcolor="#C0C0C0">
        <p align="right"><b><?= date("j/n-Y  H:i", $r["dato"]);?></b></td>
        </tr>
        </table>
   
        </td>
        </tr>
          <tr>
        <td width="100%" colspan="2" height="20"></td>
        </tr>

        <?php
        }
        ?>
        </table>

</body>

</html>
Avatar billede Slettet bruger
05. januar 2010 - 21:41 #5
Jeg kan se, jeg har brugt forkert concatenation operator - det er rettet her:

<?php
ob_start();
mysql_connect("???", "???", "KODE") or die(mysql_error());
mysql_select_db("???") or die(mysql_error());
if(isset($_GET['deleteId'])){
  mysql_query("DELETE FROM `tagwall` WHERE `id` = '" . mysql_real_escape_string($_GET['deleteId']) . "'");
}


?>
<html>

<head>
<meta http-equiv="Content-Language" content="da">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
</head>

<body bgcolor="#FEC0CC">
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $besked = mysql_real_escape_string(stripslashes($_POST['kommentarbesked'])) ;
    $navn = mysql_real_escape_string(stripslashes($_POST['navn'])) ;
    $mail = mysql_real_escape_string(stripslashes($_POST['mail'])) ;
    if(empty($navn)) { print("Du mangler at udfylde fylde dit navn"); }
        elseif(empty($besked)) { print("Du mangler at udfylde en besked"); }
        else
    {
    $dato = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    mysql_query("INSERT INTO tagwall (navn, dato, ip, besked, mail) values ('$navn', '$dato', '$ip', '$besked', '$mail')") or die(mysql_error());
    header("LOCATION: gaestebog.php");
    }
}
?>
<form name="tagwall" method="post" action="?p=tagwall">
<p align="center"><font size="2" face="Verdana">Skriv endelig en hilsen i vores
gæstebog</font></p>
<p align="center"><font size="2" face="Verdana">Er du i tvivl om noget spørger
du løs. Vi svarer så hurtig vi nu kan!</font></p>
<p align="center"> </p>
<p align="center"><font face="Verdana" size="2"><b>Navn:  </b></font> 
<input type="text" name="navn" id="navn" size="20" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC">                </p>
<p align="center"><b><font size="2" face="Verdana">Email: </font></b> 
<input type="text" name="mail" id="mail" size="20" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC">
<font size="2" face="Verdana">(Valgfrit)</font></p>
<p align="center"><b><font size="2" face="Verdana">Besked: </font></b> 
<textarea rows="9" id="textfield" name="kommentarbesked" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC" cols="27"></textarea></p>
<p align="center">
<input name="addartikel" type="submit" id="addnyhed" value="Tilføj besked" style="color: #000000; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1; background-color: #FEC0CC; font-family:Verdana"></p>
</form>
<p align="center">-----------------</p>


        <table border="0" cellpadding="2" width="48%" align="center">
        <?PHP
        $result = mysql_query("SELECT * FROM tagwall ORDER BY id DESC") or die(mysql_error());
        while ($r = mysql_fetch_array($result)) {
        $besked = nl2br($r["besked"] . " - <a href='?deleteId" . $r["id"] . "'>slet</a>");
        ?>
        <tr>
        <td width="100%">

        <table border="1" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="83%" align="center">
        <tr>
        <td width="50%" bgcolor="#C0C0C0"><b><?=$r["navn"];?></b> </td>
        <td width="50%" bgcolor="#C0C0C0"><b><a href="mailto:<?=$r["mail"];?>" title="Mail <?=$r["navn"];?>"><?=$r["mail"];?></a></b></td>
        </tr>
        <tr>
        <td width="100%" colspan="2" bgcolor="#FFFFFF"> <?=$besked;?></td>
        </tr>
        <tr>
        <td width="50%" bgcolor="#C0C0C0"> </td>
        <td width="50%" bgcolor="#C0C0C0">
        <p align="right"><b><?= date("j/n-Y  H:i", $r["dato"]);?></b></td>
        </tr>
        </table>
   
        </td>
        </tr>
          <tr>
        <td width="100%" colspan="2" height="20"></td>
        </tr>

        <?php
        }
        ?>
        </table>

</body>

</html>
Avatar billede fdtaskin Nybegynder
05. januar 2010 - 22:04 #6
jeg har nu prøvet det script du gav mig og det ser fint ud MEN MEN den sletter altså ikke indlæg når man klikker på slet..?
Avatar billede Slettet bruger
06. januar 2010 - 09:32 #7
Find linjen
$besked = nl2br($r["besked"] . " - <a href='?deleteId" . $r["id"] . "'>slet</a>");
Og erstat den med
$besked = nl2br($r["besked"] . " - <a href='?deleteId=" . $r["id"] . "'>slet</a>");
Avatar billede fdtaskin Nybegynder
06. januar 2010 - 09:54 #8
tak for hjælpen!!
Avatar billede Slettet bruger
06. januar 2010 - 09:57 #9
Husk på, at denne funktion ikke er beskyttet af et admin login - alle vil kunne slette dine beskeder!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester