[PHP] Unlink obwohl bedingung nicht erfüllt

Ghostfox

Cadet 1st Year
Registriert
Juni 2004
Beiträge
8
PHP:
if ($userdata['vorschlag']==0 AND $step==0 AND $file!="user") {
	@unlink("vorschlag/Vorschlag_User_$userdata[uid].jpg");
	echo "Gelöscht";
}
so, hier das ist der momentane Test Code... das echo hab ich rein gemacht da ich geglaubt hab, ich würde leicht spinnen.
Das Problem wo ich habe, wenn die bedingungen stimmen, wird alles korrekt gemacht, also gelöscht und der echo ausgegeben. Und jetzt wirds spezial!

Wenn $step mit 1 via web übergeben wird (egal direkt oder via $_GET) dann wird unlink ausgeführt, aber der echo nicht, obwohl die bedingung nicht mehr erfüllt ist! Ich hab auch zum test hinter der geschichte echo $step mal gemacht, und darin steht auch wirklich die 1. Ich bekomme langsam kopfweh, warum wird dieser verfluchte unlink ausgeführt, obwohl die bedingung nicht erfüllt ist?

Grüße Thomas.... gehe jetzt frustriert ins bett und hoffe morgen eine Intelligente antwort zu bekommen ;)
 
Zuletzt bearbeitet von einem Moderator: (Multiple Satzzeichen)
Re: PHP - Unlink obwohl bedingung nicht erfüllt

Ähm... wäre ganz nett, wenn du mal einen etwas grösseren Code-Fetzen (in der Grössenordnung erste bis letzte Zeile) posten könntest...
 
Ich verstehe nicht denn sinn warum ich den Code ganz schreiben soll... es ist alles gesagt was für das Problem von essenzieller bedeutung ist.

Und zu sehen ist auch der notwendige teil... würd ich jetzt den kompletten code hier posten würde 1. das Forum hier total gesprengt werden (dieser quelltext ist 435 zeilen lang), 2. würde es in keinster weiße was bringen, da der rest des quelltext nichts hiermit zu tun hat und 3. würde ich code rausgeben der eigentlich nicht an die öffentlichkeit soll....

um es ganz ohne quelltext mal zu erklären....

es ist eine abfrage die nicht erfüllt wird, darin wird aber dennoch der lösch (unlink) befehl ausgeführt aber die ausgabe (echo) nicht.
Die frage die jetzt besteht, hat unlink in irgendeinerweise mit bestimmten vorraussetzungen mehr rechte, also die abfrage zu umgehen, oder ist mein apache reif für die klapsmühle? Ich hab den auch schon neu gestartet, aber ausschließen tu ich das noch immer nicht.

Wie unlink funzt braucht mir bitte jetzt auch keiner zu erklären ;) falls wer auf den dummen gedanken kommt... aber vom logischem ablauf her, dürfte unlink doch auf keinen fall ausgeführt werden wenn die bedingung nicht erfüllt ist, oder?
 
Zuletzt bearbeitet:
Unlink hat keine besonderen Rechte. Es muss also an was anderem liegen.

Weiteres Vorgehen:

1. vor unlink eine Ausgabe einbauen. Vielleicht schießt unlink dein Script ungewollt ab.
2. unlink ausbauen, Zustände der Variablen in diesem IF ausgeben.
3. Klammern um die Bedingungen machen

btw: so toll kann der Code garnicht sein (Strichwort register_globals, keine Ahnung wie man selbstständig debuggt). Du benutzt sicher auch Scripts, die die rechte Maustaste sperren...
Passwörter kann man unkenntlich machen und irgendwelche tollen Funktionen kannst ja auch rausnehmen. Naja, deine Entscheidung.

HTH, erazor
 
Unlink hat keine besonderen Rechte. Es muss also an was anderem liegen.
Ok...
Weiteres Vorgehen:

1. vor unlink eine Ausgabe einbauen. Vielleicht schießt unlink dein Script ungewollt ab.
2. unlink ausbauen, Zustände der Variablen in diesem IF ausgeben.
3. Klammern um die Bedingungen machen
Naja, bevor ich mich mal an ne Community wende werde ich wohl son kinderkram sicher schon gemacht haben
btw: so toll kann der Code garnicht sein (Strichwort register_globals, keine Ahnung wie man selbstständig debuggt).
Natürlich weiß ich wie man selbständig debuggt... warum glaubst du das ich das nicht kann?
Du benutzt sicher auch Scripts, die die rechte Maustaste sperren...
Ja danke, genau das hat mir geholfen... es ist ein unterschied ob man nen html code hat oder das script mit den ganzen sicherheitsfunctionen, inputverarbeitung, mysqlverkettung und den functionen der seite veröffentlicht, oder? Vorallem kann ich es gern zum DRITTEN mal sagen, der rest des quelltext hat NICHTS mit dem problem zu tun... stell dir einfach vor, es steht sonst nix drin, und du übergibst an diesen kleinen code via post die variable $step mit dem wert 1..... wofür soll ich jetzt den rest zeigen???
Passwörter kann man unkenntlich machen und irgendwelche tollen Funktionen kannst ja auch rausnehmen. Naja, deine Entscheidung.
ja, weißte was danach noch über wär? genau, das was ich hier gezeigt hab....

aber last es gut sein.... wenn ich hier nur meine quelltexte veröffentlichen soll, dann las ich die ganze sache einfach und machs wie immer... lös mein problem irgendwie selbst.........

Danke

EDIT: unlink beendet übrigens nicht das script, das modul mit dem teil wird als erstes abgearbeitet, und somit dürfte sonst nichts mehr aufm browser zu sehen sein. Außerdem ist vor unlink ein @ was das bedeutet weiß du sicherlich.
 
Zuletzt bearbeitet:
Ghostfox schrieb:
Naja, bevor ich mich mal an ne Community wende werde ich wohl son kinderkram sicher schon gemacht haben
Hab (u.a. hier) schon viele gesehen, die dazu nicht in der Lage sind.
Genau das selbe mit einfachem Debuggen von Hand.
Außerdem hab ich das mit echo $size => 1 überlesen.
Hab dich falsch eingeschätzt und möchte mich in aller Form entschuldigen.

Ghostfox schrieb:
Ja danke, genau das hat mir geholfen...
Ok, das war unfair.
Ich hatte dich als Scriptkiddie eingeschätzt, das sich wichtig tut. Nochmals sorry.

Ghostfox schrieb:
Außerdem ist vor unlink ein @ was das bedeutet weiß du sicherlich.
Ja, das etwaige Warnungen/Fehlermeldungen unterdrückt werden. Nichts weiter.

Zurück zu deinem Problem:
Ums besser nachzuvollziehen und evtl. auch nachzubauen bitte ich dich ein vardump von $userdata, $size und $file vor dem IF zu machen und hier zu posten. Auch wenns sinnlos erscheint. Meist steckt der Teufel im Detail.
An sich kann ich aber in diesem Codefragment nichts fehlerhaftes finden und eigentlich sollte es auch ganz oder garnicht ausgeführt werden.

Entwickelst du auf Windows? Welcher Apache? 1 oder 2? welche PHP Version?
Ich vermute einen Bug in der Kombination Apache 2 / PHP 4/5 als Modul. Die Kombi ist ja bisher noch experimentell.
 
Also es liegt ganz klar nicht an de Variablen...

in einem versuch hab ich dia Variablen vorher und nachher abgefragt. Die Bedingungen wurden ganz klar nicht erfüllt, was sich auch darin gezeigt hatte, dass das echo nicht ausgeführt wurde. Jedoch der unlink.... Das erstaunlichste fand ich ja darin, wenn ich die Variablen vorher definiere, also vor dem Code, dann wird die abfrage korrekt ausgeführt, obwohl die Variable den gleichen wert hat.

Ich bin mir wirklich langsam sicher das es an meiner Test ebene liegt... wobei ich noch weitere unlinks in abfragen stehen hab, welche alle korrekt arbeiten.

ich hab inzwischen eine lösung gefunden, das ganze zu umgehen, bin aber nicht wirklich überzeugt davon, vorallem da das problem damit nicht aus der welt ist....

im neuem Code hab ich aus der negativen abfrage von $file eine Positive gemacht, d.h. das jetzt die bedingung nur erfüllt ist, wenn der benutzter ein bestimmtes modul (jetzt der Home teil da dieser am meisten aufgerufen wird) abruft. Also statt im "nicht im" user bereich, wo er sich in der Zeit des Script ablaufes befand. Wird jetzt verlangt das er im Home bereich sein soll. Im prinziep das gleiche, nur das es jetzt auf den Home bereich reduziert ist. Um es gleich vorweg zu nehmen, dies war nicht der auslöser, dass die Abfrage ausgeführt wurde. Es wurde zuvor unlink ausgeführt, auch wenn $file= "user" war.


Den Code erstellen tu ich auf meinem Rechner, eine Windows ebene, installiert ist xampp mit folgenden versionen:

ApacheFriends XAMPP (basic package) version 1.4.2 (win32)

+ Apache 2.0.49
+ MySQL 4.0.18
+ PHP 4.3.6 + PEAR
+ mod_php 4.3.6
+ MiniPerl 5.8.3
+ SQLite 2.8.11
+ PHPMyAdmin 2.5.6
+ ADODB 4.21
+ Mercury Mail Transport System for Win32 and NetWare Systems v4.01a
+ FileZilla FTP Server 0.8.9
+ Webalizer 2.01-10

ich weiß das einiges wohl nicht mehr aktuell ist, aber für die lokale testebene reicht es....
aber ich denke wirklich es liegt eher am Indianer selbst als an irgendeinem bestantteil meines Codes... nur sollte es eben umbedingt auf meiner Testebene auch laufen da die Seite auch dort weiter gebaut wird. Momentan kann ich allerdings mit der jetztigen lösung leben, nur verstehen würd ich das problem dennoch gerne...

Für deinen letzten Beitrag bin ich wirklich dankbar, hab ich wirklich noch nicht erlebt, dass jemand sich für das gesagte in einem Forum entschuldigt. Vielen dank dafür! Das Problem ist sicher, Du hast schon weit mehr als 500 antworten/postings gegeben und da hatest du sicherlicht oftmals Leute die es ohne selbst zu probieren, sich direkt sich an Communitys wenden. Aus eigener erfahrung weiß ich, dass man irgendwann die nase voll von solchen leuten hat. Jedoch sollte man niemals jemanden aufgrund seines "Newbie" statuses als solcher einschätzen bzw. dennoch ihnen die Hilfe anbieten.

Ich für meinen Teil versuche Probleme immer selbst zu lösen, so bringe ich mir die Sprachen bei ( die gute alte Try n error methode ) mitlerweile brauch ich das schon garnicht mehr weil ich sie weitgehend behersche (XHTML, Javascript, PHP, MySql, Gdlib, CSS1+2). Nur bei diesem teil hat leider die Logik total versagt, und somit wußte ich mir auch nicht mehr zu helfen. Server sind leider nicht mein Fachgebiet, ich Programmiere nur. Jedoch wird ja Praktisch bei meinem Problem hier behauptet das 1==0 ist.... und ich kann kaum noch glauben, dass irgendwas mit meinem code da falsch sein soll, da dieser ja recht klar und logisch aufgebaut ist.
 
Ghostfox schrieb:
Jedoch sollte man niemals jemanden aufgrund seines "Newbie" statuses als solcher einschätzen bzw. dennoch ihnen die Hilfe anbieten.
Ich beachte diese Stati garnicht. Alle sind erstmal gleich. Wär ja noch schöner wenn man nur Leuten hilft die viel bei Forumbase spammen ;)
Dieser einfache, fehlerfreie (sollte man meinen) Codeschnipsel sah halt so trivial aus, dass ich mir dachte, dass es an irgendwas anderem liegen muß und du das nur noch nicht gemerkt hast. Ich will meist schnell helfen, weil ich die Zeit auch nicht gepachtet habe. Das kann ich am schnellsten mit möglichst viel Information. Viele muss man zu ihrem Glück zwingen.
Das scheint bei dir anders zu sein und ich finde es auch erfreulich, dass du alles selbst machst/lernst in dieser "gib mir, am besten kostenlos oder vorgekaut" Gesellschaft.

Zur Entschuldigung: Ich hab keine Probleme damit, Fehler einzugestehen.

Zu meinen Posts: viele sind im Programmieren Forum entstanden, die meisten aber im Off Topic glaube ich...

Zu deinem Problem: Ich hab immer noch den Verdacht, dass es an deinem Code liegen könnte, denn die anderen (bedingten) unlinks tun ja.
Hast du irgendwo ein anderes System, auf dem du das Script mal probieren könntest? Wenns da den selben seltsamen Fehler gibt (was ich nicht glaube), liegts sicher am Code.
Ein sehr mysteriöser Fehler...
 
Ich könnte es auf meinem Webserver stellen, aber ich will das Script noch nicht verfügbar machen... von daher muss es noch warten.
Ein sehr mysteriöser Fehler...
Allerdings, wie gesagt, ich hab vor dem schnippsel die Variablen gecheckt, und danach auch... die Bedingung war auf keine Fall erfüllt. Das auch nur Unlink ausgeführt wird und der echo nicht, ist noch ein zeichen dafür, dass wohl eher die Abfrage falsch verarbeitet wird. Das Argument, dass Unlink das script vielleicht beendet kann auch nicht sein, da das echo mit bewußt erfüllter bedingung ausgegeben wird. Das script ist im eigentlichen dafür da, um meinen Webspace zu schonen, falls jemand den 4 schritte upload prozess mittendrin abricht, und das vorschau Bild dann nicht unnötig auf dem Server rum gammeln soll. Daher die variable in seiner user datenbank (vorschlag) der bereich wo man das bild hochladen kann ist user und die variable step beinhaltet die position des upload schrittes.

Daher sollte das vorschau bild gelöscht werden, wenn Keine Vorschau in der Datenbank gesetzt ist, der user nicht mehr im user befehls bereich ist und er sich nicht im 4 schritte menü befindet... also, dass das Bild nicht gelöscht wird, wenn man grad die Beschreibung etc dazu eingibt. Nur durch den Bug ist eben genau das passiert. Von den drei Variablen war im eigentlichen nur die $userdata[vorschau] mit 0 erfüllt, step und file waren falsch (step>1 und $file war user, was ja nicht sein sollte zum erfüllen der der Bedingung)

und wie gesagt, ich hab die Variablen vorher abgefragt und sie waren definitiv so, wie sie sein sollten, um die bedingung NICHT zu erfüllen.

Aber mit der aktuellen lösung kann ich vorerst leben, wenn die ganze sache online geht, werde ich kurz nochmal den bug auf dem webserver testen. Falls es dort geht, werd ich es so lassen, falls nicht, kommen lange schlaflose nächte auf mich zu...
 
Zuletzt bearbeitet:
Versuchs in einem Unterverzeichnis auf deinem Webserver. Solange niemand die URL kennt, kannst du da relativ gefahrlos testen. Brauchst damit ja nicht sofort live zu gehen.
Nur so als Vorschlag.
 
Zurück
Oben