Avatar billede anderseiler Nybegynder
30. maj 2005 - 07:50 Der er 27 kommentarer og
1 løsning

Slette billede fra mappe og database

Hejsa... :) Koden først:


<?php
require("../db.tools/connect.php");

//Dette udføres hvis der slettes et billede
if ($mode == "slet")
{
    $billede = "../images/$billednavn";
    mysql_query("DELETE FROM billeder WHERE billednavn='$billednavn'",$db);
    unset($billede);
}

//Dette er formen
$query = mysql_query("SELECT * FROM billeder WHERE zerovalue='0'",$db);

while($billede = mysql_fetch_assoc($query))
{
    echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
    echo "<input type=\"hidden\" name=\"mode\" value=\"slet\">";
    echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billedenavn']."\">";
    echo "<table width=\"500\">";
    echo "<tr>";
    echo "<td class=\"boksheading\">";
    echo "<b>".$billede['billednavn']."</b>";
    echo "</td>";
    echo "</tr>";
    echo "<tr><td>";
    echo "<img src=\"/images/".$billede['billednavn']."\" height=\"100\"><br><input type=\"submit\" value=\"Slet billede\">";
    echo "</td></tr>";
    echo "</table>";
    echo "</form>";
}
?>


Det er første gang jeg forsøger mig med dette her "slette fra mappe og database på samme tid" noget.. Funktionen unset fandt jeg på php.net, da jeg søgte under delete, så fandt jeg en funktion kaldet "delete", og derefter unset. Men er der så nogen som kan fortælle mig, hvorfor der hverken bliver slettet i databasen eller i mappen? :P
Avatar billede Daniel.E Praktikant
30. maj 2005 - 09:00 #1
- unset, kan du ikke slette filer med, der skal du bruge delete, eller unlink.

unlink("file.txt");

Hvis du vil slette en fil, og filnavnet skal komme fra en database, kan du godt gøre som  vist i toppen.  Men bare ikke med "unset", det er kun til variabler.
Avatar billede Daniel.E Praktikant
30. maj 2005 - 09:01 #2
Du skal ikke give mig points, jeg samler ikke.  Giv mig hellere noget karma.

håber du får løst problemet.
Avatar billede anderseiler Nybegynder
30. maj 2005 - 09:43 #3
Ja.. Det viker stadig ikke helt efter planen.. Jeg har ændret til følgende:

//Dette udføres hvis der slettes et billede
if ($mode == "slet")
{
    $billede = "../images/$billednavn";
    unlink($billede);
    mysql_query("DELETE FROM billeder WHERE billednavn='$billednavn'",$db);
}

Når jeg trykker på "Slet billede" knappen, så loader den bare siden igen, stadig uden at slette billedet i mappen eller i databasen..... ?????
Avatar billede sukos Juniormester
30. maj 2005 - 10:52 #4
<?php
require("../db.tools/connect.php");

//Dette udføres hvis der slettes et billede
if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    $billede = "../images/$billednavn";
    mysql_query("DELETE FROM billeder WHERE billednavn='$_POST[billednavn]'",$db);
    unlink($billede . $_POST["billede"]);
}

//Dette er formen
$query = mysql_query("SELECT * FROM billeder WHERE zerovalue='0'",$db);

while($billede = mysql_fetch_assoc($query))
{
    echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
    echo "<input type=\"hidden\" name=\"mode\" value=\"slet\">";
    echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billedenavn']."\">";
    echo "<table width=\"500\">";
    echo "<tr>";
    echo "<td class=\"boksheading\">";
    echo "<b>".$billede['billednavn']."</b>";
    echo "</td>";
    echo "</tr>";
    echo "<tr><td>";
    echo "<img src=\"/images/".$billede['billednavn']."\" height=\"100\"><br><input type=\"submit\" value=\"Slet billede\">";
    echo "</td></tr>";
    echo "</table>";
    echo "</form>";
}
?>

Du skal evt. bruge den fulde sti til hvor billedet ligger.
Avatar billede anderseiler Nybegynder
30. maj 2005 - 11:54 #5
Nu sker der i det mindste en lille smule, men jeg får den her fejl:

Warning: unlink(../images/): Permission denied in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 18

Og som du nok kan se, så kører jeg serveren lokalt, så jeg kan ikke forstå hvorfor den kommer??? Det kan jo ikke være noget med CHMOD... ??
Avatar billede sukos Juniormester
30. maj 2005 - 12:43 #6
Njah, nok mere fordi du med koden prøver at slette et dir som ikke er tomt! (min slåfejl)


<?php
require("../db.tools/connect.php");

//Dette udføres hvis der slettes et billede
if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    mysql_query("DELETE FROM billeder WHERE billednavn='$_POST[billednavn]'",$db);
    unlink("../images/". $_POST["billednavn"]);

// Vil da anbefale at du definerer den fulde sti i stedet for.
// F.eks. med
//    unlink($_SERVER["DOCUMENT_ROOT"] ."/images/". $_POST["billednavn"]);

// "images" ligger så i roden af dit domain
// $_SERVER["DOCUMENT_ROOT"] er ikke altid gangbar, hvis siden f.eks. er et subdomain
// kan den gi' forkert sti

}

//Dette er formen
$query = mysql_query("SELECT * FROM billeder WHERE zerovalue='0'",$db);

while($billede = mysql_fetch_assoc($query))
{
    echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
    echo "<input type=\"hidden\" name=\"mode\" value=\"slet\">";
    echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billedenavn']."\">";
    echo "<table width=\"500\">";
    echo "<tr>";
    echo "<td class=\"boksheading\">";
    echo "<b>".$billede['billednavn']."</b>";
    echo "</td>";
    echo "</tr>";
    echo "<tr><td>";
    echo "<img src=\"/images/".$billede['billednavn']."\" height=\"100\"><br><input type=\"submit\" value=\"Slet billede\">";
    echo "</td></tr>";
    echo "</table>";
    echo "</form>";
}
?>
Avatar billede anderseiler Nybegynder
30. maj 2005 - 14:20 #7
Jeg bliver ved med at få den samme fejl:

kode:
if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    mysql_query("DELETE FROM billeder WHERE billednavn='$_POST[billednavn]'",$db);
    unlink($_SERVER["DOCUMENT_ROOT"] ."/images/". $_POST["billednavn"]);
}



fejl:
Warning: unlink(C:/Programmer/Apache Group/Apache2/htdocs/websted/images/): Permission denied in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 17

Line 17 er så den hvor unlink står på...
Avatar billede sukos Juniormester
30. maj 2005 - 15:49 #8
Vil tro at
$_SERVER["DOCUMENT_ROOT"] == C:/Programmer/Apache Group/Apache2/htdocs

Så du skal bruge
unlink($_SERVER["DOCUMENT_ROOT"] ."/websted/images/". $_POST["billednavn"]);
Avatar billede anderseiler Nybegynder
30. maj 2005 - 21:38 #9
Jeg forstår det simpelt hen ikke, samme fejl kommer stadig frem.. :(


Warning: unlink(/images/): No such file or directory in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 17

Hehe skørt :(
Avatar billede sukos Juniormester
30. maj 2005 - 21:43 #10
unlink(/images/):

PHP kikker efter et dir "/images/" i roden af din disk!
Avatar billede anderseiler Nybegynder
30. maj 2005 - 21:55 #11
Det her begynder at blive irriterende

if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    mysql_query("DELETE FROM billeder WHERE billednavn='$_POST[billednavn]'",$db);
    unlink("/images/".$_POST["billednavn"]);
}

og fejl:


Warning: unlink(/images/): No such file or directory in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 17

Men nu siger den at den destination ikke findes... Er det så mig som laver en fejl når jeg angiver mappen?
Avatar billede sukos Juniormester
30. maj 2005 - 22:01 #12
Hehe, kan jeg godt forstå! :O)

Men hvis filen som skal slette billedet, ligger som "overdir" til images, så fjern den første / i din unlink()

if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    mysql_query("DELETE FROM billeder WHERE billednavn='$_POST[billednavn]'",$db);
    unlink("images/".$_POST["billednavn"]);
}


Ligger filen i et helt andet dir, vil jeg klart anbefale at bruge den fulde sti, en sti som er defineret forskelligt fra domain til domain
Avatar billede anderseiler Nybegynder
30. maj 2005 - 22:05 #13
Så prøver vi igen, fordi det her script kan ikke lide mig (er tilgengæld glad for du kan, ellers var jeg sq på røven :P) Igen får jeg denne fejl (og scriptet er en kopi af det du har skrevet):

Warning: unlink(images/): No such file or directory in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 17


Billedet som vises på siden har den her url: <img src="/images/Matrix.gif">, og det er det som jeg vil slette, når jeg trykker på den lille grimme knap :P
Avatar billede sukos Juniormester
30. maj 2005 - 22:09 #14
Ok,
hvis du kikker på:
Warning: unlink(images/): No such file or directory in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 17

vil du jo kunne se at filen som skal slette billedet ligger et helt andet sted end billedet som skal slettes!

Filen som sletter ligger i:
C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\

men filen som skal slettes, ligger i:
C:\Programmer\Apache Group\Apache2\htdocs\images\
eller
C:\Programmer\Apache Group\Apache2\htdocs\websted\images\

du kan formodentlig godt bruge
unlink($_SERVER["DOCUMENT_ROOT"] ./images/". $_POST["billednavn"]);

men som sagt, det vil ikke virke på alle hosts, $_SERVER["DOCUMENT_ROOT"]
Avatar billede sukos Juniormester
30. maj 2005 - 22:10 #15
Iøvrigt er filnavnet jo ikke med i fejlmeddelsen?????
Avatar billede anderseiler Nybegynder
30. maj 2005 - 22:13 #16
Det er også der min kæde hopper af.. Men tror nu det emd $_SERVER["DOCUMENT_ROOT"] virker fint.. Nu får jeg nemlig en fejlmeddelse om at jeg ikke har lov til det jeg har gang i:

Warning: unlink(C:/Programmer/Apache Group/Apache2/htdocs/websted/images/): Permission denied in C:\Programmer\Apache Group\Apache2\htdocs\websted\administration\gallery.php on line 17

men igen står der ikke noget billede??
Avatar billede sukos Juniormester
30. maj 2005 - 22:14 #17
Prøv at vise den kode du bruger
Avatar billede sukos Juniormester
30. maj 2005 - 22:16 #18
Og forresten, du skriver jo
echo "<img src=\"/images/".$billede['billednavn']."\"

så dir'et "images" ligger jo i roden af dit host!

Er Document_root
"C:/Programmer/Apache Group/Apache2/htdocs/websted/"

er det ikke
"C:/Programmer/Apache Group/Apache2/htdocs/"

?????
Avatar billede anderseiler Nybegynder
30. maj 2005 - 22:16 #19
Hele lortet:

<?php
//Checker om brugeren er logget ind..
session_start();
if ($_SESSION['logged_in'] !== "ja") {
    $errormsg = "Du skal logge ind for at se denne side!";
    include("login.php");
} else {
?>
<link href="../css/style.css" rel="stylesheet" type="text/css">
<?php
require("../db.tools/connect.php");

//Dette udføres hvis der slettes et billede
if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    mysql_query("DELETE FROM billeder WHERE billednavn='$_POST[billednavn]'",$db);
    unlink($_SERVER["DOCUMENT_ROOT"] ."/images/". $_POST["billednavn"]);}

//Dette er formen
$query = mysql_query("SELECT * FROM billeder WHERE zerovalue='0'",$db);

while($billede = mysql_fetch_assoc($query))
{
    echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
    echo "<input type=\"hidden\" name=\"mode\" value=\"slet\">";
    echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billedenavn']."\">";
    echo "<table width=\"500\">";
    echo "<tr>";
    echo "<td class=\"boksheading\">";
    echo "<b>".$billede['billednavn']."</b>";
    echo "</td>";
    echo "</tr>";
    echo "<tr><td>";
    echo "<img src=\"/images/".$billede['billednavn']."\" height=\"100\"><br><input type=\"submit\" value=\"Slet billede\">";
    echo "</td></tr>";
    echo "</table>";
    echo "</form>";
}
?>
<?php
}
?>


(vil lige tilføje, at jeg tvivler på at det er mit session/login noget, da det virker på alle de andre sider)..
Avatar billede sukos Juniormester
30. maj 2005 - 22:21 #20
echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billedenavn']."\">";

er ikke det samme som

echo "<b>".$billede['billednavn']."</b>";
og
<img src=\"/images/".$billede['billednavn']."\" height=\"100\">

:O)
Avatar billede sukos Juniormester
30. maj 2005 - 22:22 #21
Det er som regel altid de mest f...... små fejl der gør det ikke virker!
Avatar billede sukos Juniormester
30. maj 2005 - 22:24 #22
Og iøvrigt, når man laver noget som ikke virker, er det altid en go' ide at bruge "Vis kilde" for at sikre det man forventer rent faktisk også er der.

SAMT:

<?php
ini_set('error_reporting', "E_ALL");

resten af scriptet...........................

SÅ vises ALLE fejlmeddelser :O)
Avatar billede anderseiler Nybegynder
30. maj 2005 - 22:24 #23
Det er ikke den vaiabel, fordi jeg får samme fejl... Hvis du kigger på navnet i den hidden, og så på det jeg bruger i min mysql_query("DELETE... så er det den samme.. Det er den jeg bruger til at slette med...
Avatar billede anderseiler Nybegynder
30. maj 2005 - 22:24 #24
fra databasen... men det virker heller ikke kan jeg se... tror jeg skal have mine variabler kigget igennem igen... Men du har ret, det er ofte de små mega irriterende fejl som er afgørende...
Avatar billede sukos Juniormester
30. maj 2005 - 22:26 #25
Jow, men din <img src.........>
den virker vel?

Så skal $billede['billedenavn'] i
echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billedenavn']."\">";
jo ændres til:
echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billednavn']."\">";
Avatar billede sukos Juniormester
30. maj 2005 - 22:26 #26
Osse defor du ikke har fået vist noget filnavn i fejlmeddelsen
Avatar billede anderseiler Nybegynder
30. maj 2005 - 22:29 #27
Jeg sad lige og kiggede på det, og jeg faldt over samme ting lige i det jeg modtog mailen fra Eksperten om dit svar.. Og det virker sgu nu :D:D:D:D:D:D :):):) :D:D:D:D:D... Poster lige hele scriptet så du kan se hvordan det skal se ud:


<?php
//Checker om brugeren er logget ind..
session_start();
if ($_SESSION['logged_in'] !== "ja") {
    $errormsg = "Du skal logge ind for at se denne side!";
    include("login.php");
} else {
?>
<link href="../css/style.css" rel="stylesheet" type="text/css">
<?php
require("../db.tools/connect.php");

//Dette udføres hvis der slettes et billede
if (isset($_POST["mode"]) && $_POST["mode"] == "slet")
{
    mysql_query("DELETE FROM billeder WHERE billednavn='".$_POST['billednavn']."'",$db);
    unlink($_SERVER["DOCUMENT_ROOT"] ."/images/". $_POST["billednavn"]);}

//Dette er formen
$query = mysql_query("SELECT * FROM billeder WHERE zerovalue='0'",$db);

while($billede = mysql_fetch_assoc($query))
{
    echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
    echo "<input type=\"hidden\" name=\"mode\" value=\"slet\">";
    echo "<input type=\"hidden\" name=\"billednavn\" value=\"".$billede['billednavn']."\">";
    echo "<table width=\"500\">";
    echo "<tr>";
    echo "<td class=\"boksheading\">";
    echo "<b>".$billede['billednavn']."</b>";
    echo "</td>";
    echo "</tr>";
    echo "<tr><td>";
    echo "<img src=\"/images/".$billede['billednavn']."\" height=\"100\"><br><input type=\"submit\" value=\"Slet billede\">";
    echo "</td></tr>";
    echo "</table>";
    echo "</form>";
}
?>
<?php
}
?>


Såå... Men den giver point hvis du smider et svar... Og lidt karma fordi du holder ud så længe... mange mange mange tak.. :)
Avatar billede sukos Juniormester
30. maj 2005 - 22:43 #28
Så lidt da
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