copy()-Befehl im Formular
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
action
are
attribut
befehl
benutzer
bild
button
control
datei
dateiname
fehlermeldung
formular
funktion
galerie
ineinander
manual
ordner
sen
tutorial
unterschiedlichen weiteren behandlung
-
Hi Leude,
ich hab mich gestern mal dran gemacht und versucht meine User-Galerie vor missbrauch zu sch?tzen, indem die Datei nicht direkt in die Galerie geladen wird, sondern erst in einen Testordner.
Sinn ist es, zu entscheiden ob das Bild wirklich in die User-Galierie geh?rt oder nicht.
Die Datei hab ich mal control.php genannt (passend oder..?)
http://darknight.pyrokar.lima-city.de/usrgal_test/control.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>-=] RC-Crushers v3 [=- .:: User Galerie CONTROL ::.</title>
</head>
<body>
<?PHP
$verz=opendir ('.');
while ($file = readdir ($verz)) {
if($file != "." && $file != ".." && $file != "control.php" && $file !="org")
echo "<a href=\"$file\" target=\"_blank\">
<img src=\"$file\" width=\"200\" height=\"100\" alt=\"$file\">
</a> $file
<form action=\"copy($file,'../usrgal_fotos/'.$file)\" method=\"post\">
<input type=\"submit\" name=\"Submit\" value=\"Kopieren\">
</form>
<br>";
}
closedir($verz);
?>
</body>
</html>
Das Script hat die eine Datei von /usrgal_test in ../usrgal_fotos kopieren.
Die beiden Ordner sind im home-Verzeichniss und nicht ineinander verschachtelt.
Bevor man ausw?hlen kann ob die Dateien kopiert werden, wird in der control.php das Bild angezeigt und ein Link zum File gesetzt, desweiteren wird der Name des Bildes ausgegeben.
Danach sollen 2 Formulare kommen, eines mit dem man das Bild in den Ordner /ustgal_fotos kopieren kann (nach dem Kopiervorgang soll das bild aus dem Ordner /usrgal_test gel?scht werden)
und ein Formular mit dem man das Bild sofort l?schen kann (also ohne copy())
Ich h?tte das mit 2 Formularen gemacht, vllt ist es auch mit einem Formular pro Bild leichter.
Ich hoffe mir kann hier jemand helfen ^^
Gru?
DarkNight -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi darknight!
Ich wei? nicht genau, was du erreichen willst (meine Lesef?higkeiten scheinen in letzter Zeit nachzulassen ), aber schau dir mal die Funktion move_uploaded_file() im PHP-Manual, an:
http://www.php.net/de/manual/function.move-uploaded-file.php
Die erspart dir das Kopieren und nachtr?gliche L?schen, weil sie beides in einem Rutsch erledigt (und dies auch nur mit hochgeladenen Dateien tut).
--
Ich glaube, jetzt habe ichs kapiert: Du musst dem Formular einfach zwei Submit-Buttons mitgeben, einen f?rs Kopieren (nat?rlich mit move_uploaded_file() ) und einen f?rs L?schen. Jeder Button bekommt ein eigenes name-Attribut.
http://de.selfhtml.org/html/formulare/formularbuttons.htm
Zitat:
Mit <input type="submit"> definieren Sie einen Absendebutton (input = Eingabe, submit = best?tigen). Beim Anklicken dieses Buttons werden die Formulardaten abgeschickt, und es wird die Adresse aufgerufen, die im einleitenden <form>-Tag beim Attribut action angegeben ist. Zur unterschiedlichen weiteren Behandlung der ?bermittelten Daten k?nnen Sie mehrere Absendebuttons mit name-Attribut verwenden.
MfG
alopex -
Hi alopex!
ersmal Danke f?r die Antwort ^^
Diesen Befehl hab ich schon lange gesucht aber irgenwie bei selfPHP nicht gefunden.
Ich hab das Formular jetzt mal so abge?ndert:
<form action=\"move_uploaded_file($file,'../usrgal_fotos/'.$file)\" method=\"post\">
<input type=\"submit\" name=\"move\" value=\"Kopieren\">
</form>
Aber irgendwas mach ich anscheinend mit dem String ('../usrgal_fotos/'.$file) falsch.
Denn ich bekommen eine 404-Fehlermeldung, das ein File nicht existiert. Aber ich hab absolut keine Ahnung welches File der meint !
Wei? jemand Rat?
Gru?
DarkNight -
Ich glaube, du musst in das Formular-Tag das PHP-Script eintragen, welches dann move_uploaded_file() aufruft. Direkt die Funktion anzugeben, funktioniert nicht. Das Attribut action="" eines Formulars will eine g?ltige URL (oder URI?) haben:
<form action="mein_php_script.php" method="POST" enctype="multipart/form-data">
So wird ein Datei-Upload-Formular draus.
MfG
alopex -
Hmm ja das hab ich mir auch schon ?berlegt.
Nur mein Problem ist, wo soll ich dann den move_uploaded_file()-Befehl hinhaun?
Geht das vllt mit Checkboxen also mit 2 (eine f?rs verschieben, die andere f?rs l?schen) und dann nur noch einen Button zum Absenden des Formulars?
Gru?
DarkNight -
?hm, die Erkl?rung k?nnte etwas l?nger werden:
1.) Du schreibst ein PHP-Script, nennen wir es mal "uploaded.php".
2.) In dein Formular kommen zwei Submit-Buttons, einer bekommt das die Attribute: name="move" value="Verschieben", der andere: name="delete" value="L?schen".
3.) Klickt jetzt jemand in deinem Formular auf "Verschieben" muss das Script "upload.php" move_uploaded_file() aufrufen. Dr?ckt er auf "L?schen" muss das Script die Datei l?schen. Das kann mit unlink() geschehen.
Wie erkennt "upload.php", welcher Submit-Button gedr?ckt wurde? Es fragt das superglobale Array $_POST ab:
if( isset($_POST['move']) ) {
// ...
move_uploaded_file();
// ...
}
elseif( isset($_POST['delete']) ) {
// ...
unlink();
// ...
}
else {
print("Etwas ganz Abartiges ist passiert!<br />");
die();
}
Der else()-Zweig d?rfte im Normalfall nicht auftreten, es sei denn, das Formular war fehlerhaft.
Die W?rter 'move' und 'delete' haben also eine Bedeutung f?r das Script. "L?schen" und "Verschieben" sind nur dazu da, dass der Browser seine Submit-Buttons f?r den Benutzer verst?ndliche beschriftet.
Checkboxen w?rden auch gehen, aber dann m?sste der Benutzer zwei mal "klicken": einmal f?r die Auswahl "L?schen oder Verschieben" und einmal, um die Aktion auszul?sen.
Ich hab auch gerade ein Tutorial zum "Uploaden" von Bildern gefunden, vielleicht erhellt es ja ein bisschen den Hintergrund der Thematik:
http://www.lima-city.de/tutorials?m=show&id=1266
MfG
alopex
-
Probleme ?ber Probleme..
Das hier ist der derzeitige Code der Datei control.php
<?PHP
$verz=opendir ('.');
while ($file = readdir ($verz)) {
if($file != "." && $file != ".." && $file != "control.php" && $file !="org")
echo "<a href=\"$file\" target=\"_blank\">
<img src=\"$file\" width=\"200\" height=\"100\" alt=\"$file\">
</a> $file
<form action=\"$PHP_SELF\" method=\"post\">
<input type=\"submit\" name=\"move\" value=\"Verschieben\">
<input type=\"submit\" name=\"delete\" value=\"L?schen\">
</form>
<br>";
}
if( isset($_POST['move']) ) {
// ...
move_uploaded_file($file, "../usrgal_fotos/".$file);
// ...
}
elseif( isset($_POST['delete']) ) {
unlink($file);
}
else {
print("Etwas ganz Abartiges ist passiert!<br />");
die();
}
closedir($verz);
?>
Beim versuch etwas zu verschieben, wird alles wie in der Ausgangsposition nur ohne "Etwas ganz Abartiges ist passiert!" angezeigt.
Wenn ich etwas l?schen will kommt:
Warning: unlink(): Unable to access in /home/webpages/lima-city/darknight/html/usrgal_test/control.php on line 32
Wer das gerne selber mal ausprobieren will, geht auf:
http://darknight.pyrokar.lima-city.de/usrgal_test/control.php
Und erleben sie die t?cken des PHP..
Gru?
DarkNight -
Wenn ich die Sache richtig betrachte, hast du ein so genanntes Affenformular programmiert: Ein PHP-Script, das ein HTML-Formular ausgibt und sich dann selbst wieder aufruft. In diesem Fall ist der else()-Zweig nicht f?r Fehlermeldungen da, sondern der Zweig, in dem du die Ausgabe des Formulars vornehmen musst. Du kannst das ?brigens auch ohne \" l?sen. Benutze einfach die "here document"-Syntax:
echo <<<MEINHTML
Hier den HTML-Quelltext f?r das Formular reinschreiben, $variablen werden dabei durch ihre Werte ersetzt.
MEINHTML
http://www.php.net/manual/de/function.echo.php
Das Problem mit unlink():
Schreib mal vor unlink($file) die Anweisung
printf("file_to_unlink[%s]<br />\n", $file);
Dann zeigt dir der Browser, wie die Datei hei?t. Das postest du hier. Dann ?berlegen wir uns, welchen Pfad wir noch vor den Dateinamen h?ngen m?ssen. Ich denke mal, dass nur der Dateiname alleine nicht ausreicht.
MfG
alopex
-
Hi alopex,
hab gar nicht gemerkt dass du nochmal was gepostet hasst.
Also wenn ich das so einbinde wie du das geschrieben hasst ("printf("file_to_unlink[%s]<br />\n", $file);")
gibt er mir daf?r garnix aus.
F?r was is eigentlich das %s?
EDIT:
Mir ist grad so aufgefallen, dass dem Skript keiner sagt, was f?r ein $file er denn moven soll, oder?
Gru?
DarkNight -
das %s is ein platzhalter
aber ich glaube du solltest einfach
echo file_to_unlink($file); schreiben ;)
ich glaub, dass wird dir mehr n?tzen, da es f?r dich auch verst?ndlicher is
aber ich find die funktion bei php.net gar nich, der spukt nur das aus
Sorry, but the function file_to_unlink is not in the online manual. Perhaps you misspelled it, or it is a relatively new function that hasn't made it into the online documentation yet. The following are the 20 functions which seem to be closest in spelling to file_to_unlink (really good matches are in bold). Perhaps you were looking for one of these:
-
Hi lucas,
ich hab die Funktion eben auch nicht bei php.net gefunden.
Es gab auch nur 1 Suchergebnis bei google.
Hab das jetzt mal so umge?ndert wie von dir gesagt, funktioniert aber immer noch nicht, d. h. es wird keine Datei angezeigt.
Gru?
DarkNight -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage