login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Eerst files deleten en daarna map

Offline juser100 - 21/11/2007 11:35
Avatar van juser100MySQL interesse Ik kan een map deleten en een file deleten, maar nu is de vraag of deze ook beide tegelijk kunnen, oftewel dat ik eerst in een map alle files tegelijk kan deleten en dat daarna de map zelf verwijderd wordt.

Ik heb de volgende twee tabellen, 1 voor de groepen, 1 voor de files (foto's).

Groepen:
  1. CREATE TABLE `fotogroep` (
  2. `FotogroepID` int(4) NOT NULL AUTO_INCREMENT,
  3. `Fotogroep` varchar(50) DEFAULT NULL,
  4. UNIQUE KEY `FotogroepID` (`FotogroepID`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;


Foto's:
  1. CREATE TABLE `foto` (
  2. `FotoID` int(11) NOT NULL AUTO_INCREMENT,
  3. `Fotogroep` varchar(50) DEFAULT NULL,
  4. `Titel` varchar(200) NOT NULL DEFAULT '',
  5. `Foto` varchar(200) NOT NULL DEFAULT '',
  6. `Datum` date NOT NULL DEFAULT '0000-00-00',
  7. `Omschrijving` varchar(200) NOT NULL DEFAULT '',
  8. UNIQUE KEY `FotoID` (`FotoID`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=77 ;


Ik neem aan dat ik eerst met het verwijderen van de bestanden moet beginnen, en daarna de map zelf. Hiervoor gebruik ik:
  1. <?
  2. INCLUDE("connect.php");
  3.  
  4. $sql1 = mysql_query("SELECT * FROM foto WHERE Fotogroep='".$Fotogroep."'");
  5. WHILE ($rij = mysql_fetch_array($sql1))
  6. $Foto = "$rij[3]";
  7.  
  8. unlink("$Foto");
  9. $result=mysql_query("DELETE FROM foto WHERE Fotogroep='".$Fotogroep."'");
  10.  
  11. $sql = mysql_query("SELECT Fotogroep FROM fotogroep WHERE FotogroepID='".$FotogroepID."'");
  12. WHILE ($data = mysql_fetch_array($sql))
  13.  
  14. RMDIR("../../uploads/foto/".$data['Fotogroep']."");
  15.  
  16. $result=mysql_query("DELETE FROM fotogroep WHERE FotogroepID='".$FotogroepID."'");
  17.  
  18. ?>


Als ik een map wil verwijderen zonder foto's dan werkt het script wel, maar als er een bestand inzit dan krijg ik telkens de melding:
  1. Warning: unlink() [function.unlink]: No such file or directory in /foto/fotogroep_verwijderen.php on line 9
  2.  
  3. Warning: rmdir(../../uploads/foto/Test) [function.rmdir]: Directory not empty in /foto/fotogroep_verwijderen.php on line 15


Wat doe ik hierin fout?

4 antwoorden

Gesponsorde links
Offline Stefan14 - 21/11/2007 12:26
Avatar van Stefan14 PHP gevorderde Begin eens met bij $rij3 (regel 6) en $Foto (regel 8) de aanhalingstekens weg te halen, deze zijn niet nodig.

Heb jij een veld in je database met de naam 3? Wat is dat voor naam, hier kun je beter een zinvolle naam die iets zegt over de inhoud aan geven, daarnaast weet ik niet of een cijfer als kolomnaam wel is toegestaan.

Je hebt geen accolades rond je while staan, zodoende wordt alleen het laatste bestand wat aan $Foto toegekend wordt door de unlink gehaald, de unlink, de toekenning van de waarde aan $Foto en het verwijderen van de foto uit de db moet allemaal binnen de accolades van de while.

Dit geldt overigens ook voor de while voor de fotogroepen.

$Fotogroep en $FotogroepID worden neem ik aan eerder in het script gedefinieerd? zoniet, dan hebben deze geen waarde.
Offline Wim - 21/11/2007 12:56
Avatar van Wim Crew algemeen
Stefan14 schreef:
Begin eens met bij $rij3 (regel 6) en $Foto (regel 8) de aanhalingstekens weg te halen, deze zijn niet nodig.

Heb jij een veld in je database met de naam 3? Wat is dat voor naam, hier kun je beter een zinvolle naam die iets zegt over de inhoud aan geven, daarnaast weet ik niet of een cijfer als kolomnaam wel is toegestaan.

Je hebt geen accolades rond je while staan, zodoende wordt alleen het laatste bestand wat aan $Foto toegekend wordt door de unlink gehaald, de unlink, de toekenning van de waarde aan $Foto en het verwijderen van de foto uit de db moet allemaal binnen de accolades van de while.

Dit geldt overigens ook voor de while voor de fotogroepen.

$Fotogroep en $FotogroepID worden neem ik aan eerder in het script gedefinieerd? zoniet, dan hebben deze geen waarde.

die aanhalingstekens mogen er zijn, maar op deze site wordt er gewoon erg veel kritiek op gegeven omdat het minder ordelijk is. De echte reden waarom je het beter niet doet is voor de laadtijd (1/3de minder zonder quotes dan met!). Dat van ordelijkheid verschilt trouwens van mens tot mens; wat je het liefst ziet!

--

juser: No such file or directory --- geen bestand of map dat zo noemt. De naam spreekt voor zich.

Volgens mij moet je regel 8 zoiets worden:
unlink("../../uploads/foto/".$data['Fotogroep']."/".$Foto);


Als je een directory inclusief bestanden niet ineens kan verwijderen, kan je dit evt met PHP.net: shell_exec doen. Vereiste: safe_mode moet uit staan! + je moet eigenaar zijn van de map! (of beter gezegd, je moet voldoende rechten (PHP.net: chmod - Google.be: chmod) hebben!)
  1. shell_exec('rm -rf /path/to/fotodir');
Offline juser100 - 21/11/2007 13:46
Avatar van juser100 MySQL interesse Ik heb het gedeelte van het unlink() nu aangepast in:
  1. unlink("../../uploads/foto/".$Fotogroep."/".$Foto);


Maar ik krijg nu deze melding:
  1. Warning: unlink(../../uploads/foto//) [function.unlink]: Operation not permitted in /foto/fotogroep_verwijderen.php on line 9


Nu zit het probleem het denk ik in "//". Maar hoe krijg ik hier wel de juiste namen?
Offline Wim - 21/11/2007 13:54
Avatar van Wim Crew algemeen misschien je php code even geven? wrs bevat $Foto enkel /, hoe je anders aan die // zou komen is zonder code een raadsel
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.204s