30. maj 2005 - 07:50Der 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);
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
- 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.
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..... ?????
//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);
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);
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
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?
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
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
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"]
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
<?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);
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...
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...
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']."\">";
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);
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.