![]() |
[PHP] PHP Funktion aus Formular aufrufen
Ich habe folgende Funktion in einer PHP Datei:
Code:
und folgendes Formular:
function upload_file($source, $dest, $mode)
{ $conn = ftp_connect(SERVER); ftp_login($conn, USER, PW); $result = f_put($conn, $source, $dest, $mode); ftp_close($conn); return $result; }
Code:
Wie kann ich jetzt die Funktion aus der Datei aufrufen, ihr die nötigen Parameter übergeben und da nach wieder die Seite mit dem Formular anzeigen?
<form ENCTYPE="multipart/form-data" ACTION="???" METHOD=POST>
<input NAME="uploadfile" SIZE=75 TYPE="file"> <input TYPE="submit" VALUE="Send File"> </form> |
Re: [PHP] PHP Funktion aus Formular aufrufen
du kannst dem apache doch nicht sagen, er soll bitte php sagen, es solle eine funktion aufrufen und gleichzeitig variablen zuweisen..... ;)
include die funktion in einer php-datei in der du sie mit den $_REQUEST-paramtern aufrufst, und schicke deine form da hin. |
Re: [PHP] PHP Funktion aus Formular aufrufen
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Meinst du in etwa so?
Code:
Grüße
<?php
function upload_file($source, $dest, $mode) { $conn = ftp_connect(SERVER); ftp_login($conn, USER, PW); $result = f_put($conn, $source, $dest, $mode); ftp_close($conn); return $result; } if ($_POST['sent'] == '1') { upload_file(....); } ?> <form ENCTYPE="multipart/form-data" ACTION="<?=$_SERVER['PHP_SELF'] ?>" METHOD=POST> <input type="hidden" name="sent" value="1"> <input NAME="uploadfile" SIZE=75 TYPE="file"> <input TYPE="submit" VALUE="Send File"> </form> Faux |
Re: [PHP] PHP Funktion aus Formular aufrufen
@faux: Ich denke schon. Die Upload-Funktion liegt jetzt aber bei dir in der gleichen Datei wie das Formular oder? Und wie kommt die Funktion an die Parameter ran?
@ripper8472: Das habe ich auch schon gefunden, bin nur nicht damit klar gekommen. |
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Nun ja, die Funktion ist ja schon in einer Datei die per include eingebunden ist. Wie komme ich jetzt aber an die Werte aus dem Formular, damit ich sie der Funktion übergeben kann?
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Es gibt eine Variable, die $_FILES heißt.
Anmerkung: Dieses Array wurde mit PHP 4.1.0 eingeführt. In älteren Versionen benutzen Sie das Array $HTTP_POST_FILES. Da sind alle wichtigen Informationen über die übertragenen Dateien (in deinem Fall ist es nur eine) drinnen. In deinem Fall:
Code:
Du kannst jetzt zum Beispiel so aufrufen:
$_FILES['uploadfile']['name'] //Name der Datei wie sie auf den System des Uploaders hieß
$_FILES['uploadfile']['size'] //Größe $_FILES['uploadfile']['typ'] //Mime-Typ der Datei $_FILES['uploadfile']['tmp_name'] //Name wie die upgeloadene Datei im Temp-Verzeichnis des Servers heißt
Code:
Wobei ich glaube, dass in der Funktion ein Fehler ist.
$file = fopen($_FILES['uploadfile']['tmp_name'], 'r');
upload_file($file, 'pfad/am/ftp/server', FTP_ASCII); //oder FTP_BINARY Es müsste nicht $result = f_put($conn, $source, $dest, $mode); sondern $result = f_put($conn, $dest, $source, $mode); heißen. |
Re: [PHP] PHP Funktion aus Formular aufrufen
Wie so Temp Verzeichnis? Und was spielt hier in dem Zusammenhang move_uploaded_file für eine Rolle?
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Also, ich habe es jetzt so:
Code:
Als Fehlermeldung kommt:
<?php
if ($_POST['sent'] == '1') { $file = fopen($_FILES['uploadfile']['tmp_name'], 'r'); upload_file($newpath, $file, FTP_BINARY); $_POST['sent'] = '0'; } ?> <form ENCTYPE="multipart/form-data" ACTION="<?=$_SERVER['PHP_SELF'].'?newpath='.$newpath ?>" METHOD=POST> <input type="hidden" name="sent" value="1"> <input NAME="uploadfile" SIZE=75 TYPE="file"> <input TYPE="submit" VALUE="Send File"> </form> Zitat:
Code:
ist ja auch logisch, fopen gibt ja ein Dateihandle zurück, da müsste aber der Pfad und der Name der lokalen Datei stehen. Wie bekomm eich den aus dem Formular raus?
$result = ftp_put($conn, $dest, $source, $mode);
Hardgecodet:
Code:
kommt die Meldung:
upload_file($newpath.'\style.css', 'H:\Downloads\style.css', FTP_BINARY);
Zitat:
|
Re: [PHP] PHP Funktion aus Formular aufrufen
:oops:
Sorry. Hab gerade ftp_fput() mit ftp_put() verwechselt. DU hast natürlcih recht, dass 1. die Argumente richtig waren und 2. kein Dateizeiger sondern ein String mit dem Pfad erwartet wird. |
Re: [PHP] PHP Funktion aus Formular aufrufen
Roter Kasten.
Woran kann es jetzt liegen, dass er auf die Datei keinen Zugriff hat? Und wie komme ich an den Text aus dem Edit des Formulares? Puh, das wird eine schwere Geburt. Aber dann ist für heute auch schluss. Versprochen. ;) |
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
Probiere mal so: upload_file($_FILES['uploadfile']['tmp_name'], '/style.css', FTP_BINARY); Dann müsste die Datei direkt aus dem Temp-Verzeichnis auf den FTP geladen werden, und zwar mit dem Namen style.css. (Wieso gerade style.css, dann wird ja immer die Datei überschrieben). |
Re: [PHP] PHP Funktion aus Formular aufrufen
Logisch, ich will ja eine Datei von meinem lokalen Rechner auf meinen Webspace laden. Und den Dateinamen habe ich nur erstmal hardgecodet, um zu probieren, ob es überhaupt funktioniert. Das soll natürlich nicht so bleiben.
Zitat:
Aber egal wie, später irgendwann muss ich ja auf den Text aus dem Eingabefeld zugreifen, wie komme ich da dran? |
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
PHP wird auf dem Server ausgeführt - der weiß nichts von deinen lokalen Verzeichnissen. Wenn du die Datei in einer form als Upload-Feld definiert hast, dann ist deren Inhalt zusammen mit der Anfrage schon auf den Rechner übertragen worden und steht jetzt eben in der angesprochenen temporären Datei. Du machst jetzt also einen FTP-Upload vom Server auf den Server (derselbe Rechner), um die Save-Mode-Restriktionen zu umgehen. |
Re: [PHP] PHP Funktion aus Formular aufrufen
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt verstehe ich gar nichts mehr. :? Wie kann eine 5 MB Datei, die ich mit "Durchsuchen" ausgewählt habe, nach Schließen des Dialoges schon auf dem Server sein? Das PHP auf dem Server ausgeführt wird ist mir klar, aber wenn da steht, dass man mit dftp_put eine Datei hochladen kann, dann verstehe ich darunter vom lokalen Rechner auf den Server. Die anderen FP-Scripte haben auch mit FTP-put gearbeitet:
Code:
switch ($action) {
case 'upload': $r = $ftp->put( $dir.$_upload['uploadfile']['name'], $_upload['uploadfile']['tmp_name']); if ($r) { echo 'Fileupload erfolgreich'; } else { echo 'Fileupload leider fehlgeschlagen'; }
Code:
das mal der Code aus einem Script, aber ich habe das nicht zusammengebracht, deswegen habe ich hier gefragt. Das ganze Script mal im Anhang.
function put ( $file, $sourcefile ) {
return ftp_put( $this->conn, $file, $sourcefile, FTP_BINARY); } Gerade habe ich das hier gefunden: HTML-Datei:
Code:
PHP-Datei:
<html>
<head> <title>Datei Upload</title> </head> <body bgcolor="#FFFFFF" text="#000000"> <h1>Schicken Sie uns ihre Texte</h1> <form action="ftpbeispiel.php" enctype="multipart/form-data" method="POST"> Wählen Sie eine Textdatei (txt, html usw.) von Ihrem Rechner aus: <input name="lokale_datei" type="file" size="50" maxlength="1024" accept="text/*"> </p> Verzeichnis/Zieldatei <input type="text" name="zieldatei"> </p> <input type="submit" name="Abschicken" value="Abschicken"> </p> </form> </body> </html>
Code:
Das funktioniert wunderbar, aber was anderes mache ich doch auch nicht. :wall:
<?php
// Diese Variablen bitte aendern $ftp_server = "luckie-online.de"; $benutzername = "foo"; $passwort = "bar"; // Die Verbindung herstellen $connection_id = ftp_connect("$ftp_server"); // Mit Benutzername und Kennwort anmelden $login_result = ftp_login($connection_id, "$benutzername", "$passwort"); // überprüfen ob alles gutgegangen ist if ((!$connection_id) || (!$login_result)) { echo "<H1>Ftp-Verbindung nicht hergestellt!<H1>"; echo " Verbindung mit ftp_server als Benutzer $benutzername nicht möglich!</p>"; die; } else { echo " Verbunden mit ftp_server als Benutzer $benutzername </p>"; } // Hochladen der datei $upload = ftp_put($connection_id, $zieldatei, $lokale_datei, FTP_ASCII); // Upload-Status überprüfen if (!$upload) { echo " Ftp upload war fehlerhaft!</p>"; } else { echo " Datei $slokale_datei auf $host als $zieldatei geschrieben </p>"; } // Schließen der Verbindung ftp_quit($connection_id); ?> |
Re: [PHP] PHP Funktion aus Formular aufrufen
So, ich habe es jetzt geschaft. :)
Code:
Nur einen Haken hat es. echo $uploadfile ergibt:
<?php
if ($_POST['sent'] == '1') { echo '<pre>'; $destfile = 'test.xyz'; echo $uploadfile; upload_file('/'.$newpath.'/'.$destfile, $uploadfile, FTP_BINARY); echo '</pre>'; } ?> <form ENCTYPE="multipart/form-data" ACTION="<?=$_SERVER['PHP_SELF'].'?newpath='.$newpath ?>" METHOD=POST> <input type="hidden" name="sent" value="1"> <input NAME="uploadfile" SIZE=75 TYPE="file"> <input TYPE="submit" VALUE="Send File"> </form> Zitat:
Habs:
Code:
Nur noch eins, wenn ich die Seite aktualisiere mit F5, dann will er wieder was hochladen, kann ich das $_POST['sent'] == '1' irgendwie wieder zurücksetzen?
<?php
if ($_POST['sent'] == '1') { echo '<pre>'; upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY); echo '</pre>'; } ?> <form ENCTYPE="multipart/form-data" ACTION="<?=$_SERVER['PHP_SELF'].'?newpath='.$newpath ?>" METHOD=POST> <input type="hidden" name="sent" value="1"> <input NAME="uploadfile" SIZE=75 TYPE="file"> <input TYPE="submit" VALUE="Send File"> </form> Und wenn ich ein zweites Formular habe, kann ich dann dies machen:
Code:
Nur noch diese Kleinigkeit und ich bin super glücklich. :angel:
<?php
if ($_POST['sent'] == '1') { echo '<pre>'; upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY); echo '</pre>'; } else if ($_POST['sent'] == '2') { deletefile(...); } ?> |
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
Zitat:
Jetzt überleg' noch mal 1. wie soll der Webserver denn auf eine Datei auf deiner Platte kommen 2. wie soll ein FTP-Kommando, dass auf dem Server abgesetzt wird, eine Datei von deiner Platte übertragen? |
Re: [PHP] PHP Funktion aus Formular aufrufen
Hallo. :hi: Ich habe es doch geschafft. ;)
Ich muss es nur irgendwie schaffen, dass dieser Post-Flag zurückgesetzt wird, sonst will er die letzte Aktion bei jedem F5 ausführen und das kann ich nicht brauchen. |
Re: [PHP] PHP Funktion aus Formular aufrufen
Du setzt sie doch selbst in das Formular rein
Code:
<input type="hidden" name="sent" value="1">
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Ich weiß, aber wenn ich F5 drücke will er noch mal eine Datei hochladen, weil if ($_POST['sent'] == '1') das zutrifft. Ich dachte, ich könnte nach dem Hochladen das machen:
Code:
damit er, wenn man F5 drückt eben nichts macht. Aber so geht es leider nicht.
$_POST['sent'] = '0';
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Zwischen dir und dem PHP-Skript gibt es keinen Dialog!
1. Du stellst eine Anfrage (z.B. ich möchte die Datei soundso hochladen) 2. Der Server empfängt die Anfrage und führt das PHP-Skript aus. 3. Du erhälst das Ergebnis von (2) Ganz wichtig: Nach (2) ist das PHP-Skript beendet! Alle zugewiesenen Variablen sind weg (ok, du könntest Sessions nehmen)! Wenn du die Seite noch einmal anforderst, dann wird wieder das komplette Skript ausgeführt. Deine Zuweisung an $_POST['sent'] kommt nirgendwo an. ... und jetzt in die Delphi-Welt gezogen: Denke dir eine Delphi-Konsolen-Anwendung, die dasselbe macht wie dein PHP-Skript. Diese Anwendung wird jedesmal beendet, nachdem sie eine Anfrage behandelt hat. Für die nächste (F5, Link anklicken) wird das Programm wieder komplett neu gestartet und weiß nichts vom letzten Durchlauf. |
Re: [PHP] PHP Funktion aus Formular aufrufen
Hm. OK. Wenn ich die Seite lade, ohne eine Datei hochzuladen, dann kann ich so oft aktualisieren, wie ich will und es passiert nichts. So bald ich aber einmal eine Datei hochgeladen habe und dann aktualisiere, dann kommt erst der Dialog vom IE, dass die Daten noch mal gesendet werden müssten, dann läd er natürlich noch mal was hoch und zeigt dann die Seite an. Und genau DAS will ich nicht haben. Deswegen bin ich davon ausgegangen, dass er sich das noch irgendwo gemerkt hätten. Aber es scheint wohl noch im Cache vom Browser zu sein. Gibt es einen PHP Befehl, um das Cachen abzuschalten, damit genau das nicht passiert?
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Ist eigentlich der falsche Weg - wie wäre es, wenn du nach dem erfolgreichen Hochladen einfach auf eine andere Seite weiterleitest? Z.B. die Übersicht über die hochgeladenen Dateien.
// Nachtrag: oder auf die Seite selbst? Dann hast du einen Puffer dazwischen und F5 richtet keinen Schaden mehr an (nur noch der Zurück-Button). Also nach erfolgreichem Hochladen setzt du einfach
Code:
rein.
header('Location: ' . $_SERVER['REQUEST_URI']);
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Liste der Anhänge anzeigen (Anzahl: 1)
Die ist ja auch auf der Seite, siehe Anhang. Deswegen will ich ja dahin zurück. ;)
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Zitat:
Code:
Führt zu der folgenden Fehlermeldung:
<?php
echo ' '; if ($_POST['sent'] == '1') { upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY); echo $_FILES['userfile']['error']; } else if ($_POST['sent'] == '2') { echo 'Delete: '.$deletefile; } header('Location: ' . $_SERVER['REQUEST_URI']); echo '</p>'; ?> Zitat:
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Ok, dann mache
Code:
nach dem erfolgreichen Hochladen.
{
header('Location: ' . $_SERVER['REQUEST_URI']); exit; } Dann musst du natürlich *VOR* allem anderen Code auf einen Upload prüfen und diesen durchführen. Oder ganz am Anfang deines Skripts
Code:
benutzen.
ob_start(...);
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Auch das Exit bringt nichts. Der Code ist jetzt ganz am Ende der Datei:
Code:
Aber da ist es ja schon zu spät, weil der Header schon gesendet wurde. Und wenn ich das ganz am Anfang der Seite stelle, dann habe ich ja dann eine leere Seite im Browser wegen dem Exit oder nicht?
<?php
echo ' '; if ($_POST['sent'] == '1') { upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY); echo $_FILES['userfile']['error']; echo '</p>'; header('Location: ' . $_SERVER['REQUEST_URI']); echo '[img]line.png[/img]'; echo '<table class="copy">'; echo '<tr><td class="ver">LittleWebFTP Ver.: 1.0</td><td class="copy">Copyright © 2005 Michael Puff Homepage: [url="http://www.luckie-online.de"]http://www.luckie-online.de[/url]</td></tr>'; echo '</table>'; echo '</body>'; echo '</html>'; exit; } else if ($_POST['sent'] == '2') { echo 'Delete: '.$deletefile; echo '</p>'; header('Location: ' . $_SERVER['REQUEST_URI']); echo '[img]line.png[/img]'; echo '<table class="copy">'; echo '<tr><td class="ver">LittleWebFTP Ver.: 1.0</td><td class="copy">Copyright © 2005 Michael Puff Homepage: [url="http://www.luckie-online.de"]http://www.luckie-online.de[/url]</td></tr>'; echo '</table>'; echo '</body>'; echo '</html>'; exit; } ?> [img]line.png[/img] <table class="copy"> <tr><td class="ver">LittleWebFTP Ver.: 1.0</td><td class="copy">Copyright © 2005 Michael Puff Homepage: [url="http://www.luckie-online.de"]http://www.luckie-online.de[/url]</td></tr> </table> </body> </html> Dein zweiter Vorschlag mit ob_start(...); hat auch nicht geholfen:
Code:
<?php
echo ' '; if ($_POST['sent'] == '1') { upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY); echo $_FILES['userfile']['error']; echo '</p>'; ob_start(); } |
Re: [PHP] PHP Funktion aus Formular aufrufen
1. du hast keine leere Seite, weil du mit header/Location ja den Browser anweist, eine neue Seite zu laden.
2. Hättest mal ins PHP-Manual zu "ob_start" sehen sollen: das muss ganz am Anfang stehen, bevor überhaupt irgendeine Ausgabe gemacht wurde. Problem ist: 1. Wenn du keine Redirection nimmst (also header/Location), dann schickt der Browser bei F5 die Daten noch einmal weg. 2. Wenn du eine Redirection machen willst, dann bevor du überhaupt irgendetwas mit "echo" ausgibst (da darf auch kein HTML vorher sein). Andere Alternative: der Holzhammer 8) - mach' die Umleitung mit JavaScript.
Code:
echo '<script type="text/javascript">location.href="' . htmlspecialchars($_SERVER['PHP_SELF']); . '"; </script>';
|
Re: [PHP] PHP Funktion aus Formular aufrufen
Hallo,
Zitat:
Gruß xaromz |
Re: [PHP] PHP Funktion aus Formular aufrufen
Also mit
Code:
ganz am Anfang der Seite, hat er sie gar nicht erst geladen. Als wenn er sie sich selber immer wieder die Datei schickt.
<?php
header('Location: ' . $_SERVER['REQUEST_URI']); exit; ?> Und:
Code:
Hat auch nichts genutzt.
<?php
ob_start(); echo ' '; if ($_POST['sent'] == '1') { upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY); echo $_FILES['userfile']['error']; also ich denke, wenn das nicht klappt, werde ich wohl auf eine extra Seite ausweichen müssen. :? |
Re: [PHP] PHP Funktion aus Formular aufrufen
So, ich habe es jetzt mit einer extra Datei gemacht, das war mir dann doch zu umständlich. Ich betrachte damit das Thema als erledigt. Besten Dank noch mal für eure Mühe. :thumb:
Wenn LittleWebFTP fertig ist, stelle ich es euch hier vor. ;) |
Re: [PHP] PHP Funktion aus Formular aufrufen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein kleiner Vorgeschmack oder Teaser wie man so schön auf Neudeutsch sagt: Screenshot im Anhang. Nur damit ihr seht, dass es sich gelohnt hat und eure Mühe nicht umsonst war. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz