Hilfe bei if-elseif Funktion

qsrs

Erfahrenes Mitglied
Hallo,

habe ein Script geschrieben mit welchem ich Artikel per PHP und MySQL Datenbank pflege. An die Artikel kann ich eine Datei anhängen. Der Artikel kann bearbeitet werden und die angehängte Datei kann ausgetauscht werden (alte Datei wird gelöscht, neue hochgeladen). Datei kann auch nur gelöscht werden. Alles funktioniert. Nur wenn ich nach dem Löschen der Datei eine neue Datei hochlade, kommt der Fehler, dass die angegebene Datei nicht gelöscht werden kann. Klar, da keine vorhanden ist. Der Fehler muss in meinen if-elseif-Anweisungen liegen. Es funktioniert aber alles wie gewünscht. Nur kommt eben die Meldung, dass die angegebene Datei nicht gelöscht werden kann. Hier das Script, die wesentlichen Funktionen sind kommentiert:
PHP:
<?php
if(file_exists("../library/php/config.php"))
{
include("../library/php/config.php");
}
else
{
die("<font face=\"Verdana\" size=\"2\"><b>Fehler:</b> config.php wurde nicht gefunden.</font>");
}
$filevolume = round (($file_size/1024),2);
$dbconnect = mysql_connect($dbhost, $dbuser, $dbpass);
$query = "UPDATE `kb_content` SET `subject` = '$subject', `content` = '$content', `link` = '$link', `articledate` = '$setdate', `subcategory` = '$subcategory' WHERE `id` = '$id' LIMIT 1"; 
$delete = "DELETE FROM `$dbtable` WHERE `id` = '$id' LIMIT 1";
$delete2 = "UPDATE `kb_content` SET `filename` = '', `filelink` = '', `filevolume` = '', `filetype` = '' WHERE `id` = '$id' LIMIT 1";
$query2 = "UPDATE `kb_content` SET `filename` = '$file_name', `filelink` = 'files/$maincategory/$file_name', `filevolume` = '$filevolume KB', `filetype` = '$file_type' WHERE `id` = '$id' LIMIT 1";
 
//Der Wert delete wird durch ein Formular-Kontrollkästchen mitgeliefert. Wird der Wert mitgeliefert, lösche den Artikel, wenn nicht update Artikel
if ($delete_article=="delete" && (file_exists("../files/$maincategory/$filename")))
{
mysql_select_db($dbname, $dbconnect);
mysql_query($delete, $dbconnect);
unlink("../files/$maincategory/$filename");
}
else
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query, $dbconnect);
}
//Der Wert delete wird durch ein Formular-Kontrollkästchen mitgeliefert. Wird der Wert mitgeliefert, lösche die Datei, wenn nicht fahre fort mit elseif
if ($delete_file=="delete") 
{
mysql_select_db($dbname, $dbconnect);
mysql_query($delete2, $dbconnect);
unlink("../files/$maincategory/$filename"); 
}
//Wird eine neue Datei angegeben, prüfe ob alte Datei noch im Verzeichnis und lösche diese, kopiere neue Datei und aktualisiere Inforamtionen in Datenbank
elseif (file_exists("../files/$maincategory/$filename") && (!empty($file)))
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query2, $dbconnect);
//HIER WIRD DIE FEHLERMELDUNG AUSGEGEBEN - Beim Hochladen einer neuen Datei kommt ein Fehler, dass die Datei nicht gelöscht werden kann - Logisch, da nicht vorhanden
unlink("../files/$maincategory/$filename");
copy($file, "../files/$maincategory/$file_name");
}
elseif (!file_exists("../files/$maincategory/$filename") && (!empty($file)))
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query2, $dbconnect);
copy($file, "../files/$maincategory/$file_name");
}
elseif (!file_exists("../files/$maincategory/$filename") && (empty($file)))
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query, $dbconnect); 
}
else
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query, $dbconnect);
}
?>
 
Die einzige Stell wo ich es nicht prüfe, ist
PHP:
if ($delete_file=="delete")
und die habe ich jetzt mit
PHP:
if (($delete_file=="delete") && (file_exists("../files/$maincategory/$filename")))
ergänzt. Hat nicht funktioniert. In diese Richtung habe ich schon ziemlich viel versucht. Ich komme gerade leider überhaupt nicht weiter.
 
Die Fehlermeldung lautet:

Warning: unlink(../files/Software/): Is a directory in /localhost/knowledgebase/admin/edit_article_execute.php on line 46

Line 46 ist
PHP:
unlink("../files/$maincategory/$filename");
Ich gebe durch ein verstecktes Formularfeld filename den Wert der alten Datei mit. Die Variable filename ist, wenn ich eine neue Datei hochlade und keine alte vorhanden ist, natürlich ohne Wert. Das versuche ich aber mit der ifelse-Anweisung zu regeln. Ich sage doch hier wenn die Datei existiert und das Dateifeld file nicht leer ist, lösche die Datei und kopiere neue Datei
PHP:
elseif (file_exists("../files/$maincategory/$filename") && (!empty($file)))
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query2, $dbconnect); 
unlink("../files/$maincategory/$filename");
copy($file, "../files/$maincategory/$file_name");
}
Und hier sage ich wenn die Datei nicht existiert, jedoch im Dateifeld file ein Wert steht, dann lösche sie nicht, sondern kopiere nur die neue.
PHP:
elseif (!file_exists("../files/$maincategory/$filename") && (!empty($file)))
{
mysql_select_db($dbname, $dbconnect);
mysql_query($query2, $dbconnect);
copy($file, "../files/$maincategory/$file_name");
}
Und genau das funktioniert nicht. Er nimmt die ifelse Anweisung in welcher die unlink Funktion steht. Und das verstehe ich nicht ganz.
 
Die gleiche Fehlermeldung kommt auch hier.
ausserdem fragst Du beide Male nach !empty
Muss ich doch, weil bei der esten Anweisung gefragt wird, ob ein Wert vorhanden ist und wenn ja, lösche alte Datei und bei der zweiten muss ebenfalls mit !empty gefragt werden, ob ein Wert vorhanden ist damit der die neue Datei kopiert, jedoch nicht versucht die Datei zu löschen weil sie nicht vorhanden ist.
 
Wenn die Fehlermeldung die eigenltiche Funktionalität nicht begindert, kannst du die Ausgabe der Fehlermeldung auch mit einem @ vor dem unlink unterdrücken. Unsauber aber du hast ruhe... ;-]
 
Danke für den Tipp, wußte ich auch noch nicht. Allerdings würde ich gerne den Fehler finden um ihn in Zukunft zu vermeiden. Also ich denke das Problem liegt in dieser Zeile:
PHP:
elseif (file_exists("../files/$maincategory/$filename") && (!empty($file)))
Könnte es sein, dass wenn eine der beiden Bedingungen erfüllt wird, die Anweisung erfolgt und nicht wie gewünscht wenn beide erfüllt werden? Dann hätte ich das Problem gefunden. Dann müsste ich nur wissen wie es funktioniert, dass wenn ausschließlich beide Bedingungen erfüllt werden, die Anweisung erfolgt. Ich dachte, dass das mit && klappen müsste.
 
Nein, das mit && ist schon richtig, ich hab mir jetzt allerdings nicht den Thread durchgelesen und weiss jetzt nciht wo das Problem liegt, mach ich jetzt mal noch und schreibe dann was dazu.


byez

ps.: Ist der obige Code aktuell, oder muss man sich jetzt aus den ganzen Beiträgen den aktuellen Code zusammenbasteln?
 
Zuletzt bearbeitet:
Zurück