sourcefile voor ftp via php meedragen

Plaats reactie
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Beste mensen,

Ik moet ne nieuwe site ineen steken voor de redstar (ondertussen al tweede klasse, dus achtereen is da eerste klasse éh) :-D
Het meeste van de vorige keer weet ik ondertussen al vrij goed, maar nu zit ik met een probleem over ftp. Het is dus de bedoeling dat de mensen, wanneer ze een bericht typen, een bijhorend fotoke kunnen uploaden da bij het bericht wordt ingevoerd en dat de bestandsnaam dan automatisch aan het juiste nieuwsbericht in de database wordt gelinkt.

Hoe ge ietske in een db moet steken enzo, tis voor mij geen geheim meer :wink: maar diene ftp-transfer die zuigt.

Concreet heb ik:
1. een blad waar ge u bericht kunt intypen, da zijn een paar formuliervelden. Op dat blad staat ook een inputschermke van het type="file" om het fotobestand te selecteren.
Wa ge hier intypt, wordt gepost naar blad 2
2. een blad om uwe preview te zien waarna ge eventueel onverrichter zake nog eens kunt terugkeren om het één en ander aan te passen. Hier wordt voor het gemak een reeks "hidden" formuliervelden gevuld die ge nogmaals kunt posten om alles werkelijk naar de database te sturen.

Ik heb op php.net een scriptje gehaald om ftp te versturen. Nu in dat formulier zit een "enctype" dat moet behouden blijven. Da scriptje hier werkt perfect als ge vanaf u formulier na het bevestigen direct gaat uploaden, maar mijn probleem is: tussen het formulier en het scriptje om werkelijke up te loaden, zit de tussenstap van ne preview en ik slaag er maar niet in om de link voor de lokale bron op een geldige manier tijdens de tussenstap van de preview eventjes bij te kunnen houden om achteraf werkelijk te kunnen publiceren. Heeft er iemand een oplossing (als ge da vraag al verstaat :-D )

formulier met file-knop

Code: Selecteer alles

<form name="Attachments"  method=POST action="sendimage.php" enctype="multipart/form-data">

<input type=hidden name=box value="">

<tr>
<td nowrap width="1%">&nbsp;&nbsp;<b>Image:</b></td>
<td colspan=2>
<input type=file name=source_file size=20> <br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

</td>
</tr>
<input type=submit name=btnSubmit value=Submit size=20 style="border: 1px solid #0000FF"></form>
</body>
</html>



Script om up te loaden

Code: Selecteer alles

 
<?php
       
   $ftp_server='190.148.20.201';//serverip
   $conn_id = ftp_connect($ftp_server);
   
   
   // login with username and password
   $user="username";
   $passwd="*****";
   $login_result = ftp_login($conn_id, $user, $passwd);

// check connection
   if ((!$conn_id) || (!$login_result)) {
       echo "FTP connection has failed!";
       echo "Attempted to connect to $ftp_server for user $ftp_user_name";
       die;
   } else {
       echo "<br>Connected to $ftp_server, for user $user<br>";
   }
//directorylike /www.velibaba.com/images
  ftp_chdir($conn_id, "www.velibab.com");
  ftp_chdir($conn_id, "compimages");

//$destination_file=ftp_pwd($conn_id);

$destination_file="x.jpg";
echo ("<br>");
print $destination_file;

echo ("<br>");

// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

// check upload status
if (!$upload) {
       echo "FTP upload has failed!";
   } else {
       echo "Uploaded $source_file to $ftp_server as $destination_file";
   }

// close the FTP stream
ftp_close($conn_id);
?>


ps: na 5 jaar afwezigheid is tees toevallig mijn 600e bericht, sjiek éh :lol:
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Breen
Starter
Starter
Berichten: 5
Lid geworden op: 30 jun 2005, 21:54

Mogelijk oplossing: (geen zekerheid, heb het niet getest, maar ik zie niet in waarom het niet zou werken)

beschouw even volgend stuk code

Code: Selecteer alles

//xHTML
<input type=file id="fileInput" name="userfile" />

//javascript
document.forms[0].fileInput.value



je kan nu na de onclick van die fileinput in javascript opvragen wat de string is van de te uploaden file, lokaal bij de gebruiker, die gegevens kan je dan meegeven naar het volgende scherm en daar terug invoegen in het nieuwe verborgen form dat je daar hebt staan. Ik zie niet in waarom bij die submit het dan niet zou werken... laat iets weten hé ;)
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

A) gebruik geen FTP
B) Kopieer gewoon het bestand naar je locatie waar je ze wilt opslaan.

Tenzij je de images op een andere server wilt opslaan natuurlijk.

Kijk eens naar de PHP-functie http://php.belnet.be/move_uploaded_file
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Mijn javascriptees is nie zo goed, moar dus gij zegt, in plaats van me ne php-variabele te werken, da meepakken in een javascriptvariabele?

Ik weet niet of het zou werken. Het werkt blijkbaar namelijk niet als ge het in gewone tekst zet. Mijns inziens is die file-input ietske speciaal. Ik heb al varianten geprobeert als volgt en zoals ge verwacht naar analogie van een gewoon inputveld, zou ge als ge zoietske geeft dat al ingevuld moeten zien staan, en das hier zelfs niet het geval.

Code: Selecteer alles

<input type="file" value="C:\map\bestand.php">



En meon, voorwa mag ik geen ftp gebruiken? Hoe moet ik anders een fotoke vanaf eender welke pc nor de server krijgen? :-D

En wa van move_uploaded_file, was het verschil met ietske als ftp_put?
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Uw methode:
1) Gebruiker surft naar formulier
2) Gebruiker gebruikt het veld voor bestand om te bladeren
3) Gebruiker drukt op verzenden
4) Server slaat uploaded file op in /tmp
5) Server voert FTP-script uit en zet een ftp-connectie op naar localhost met uw gebruikersnaam, wachtwoord, timeouts, etc
6) Server uploadt via FTP naar localhost
7) Server destroyed /tmp

Mijn methode:
1) idem
2) idem
3) idem
4) idem
5) Server verplaatst van /tmp naar de locatie waar het moet staan (duurt 1 ms of zo en is 1 functie, namelijk move_uploaded_file()

Ik zal eens een beetje code geven (en merk het verschil):

In het formulier heet het veld met het het bladerveld "bestand".

upload.php:

Code: Selecteer alles

<? if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $uploadpath = "/pad/naar/de/map/op/de/server/";
  $filename = $uploadpath .$_FILES['bestand']['name'];
  if (!move_uploaded_file($_FILES['bestand']['tmp_name'],$filename)) {
    die ("Er is een probleem met de upload.");
  }
}?>
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Ik slaag dermee nu ook wel in om een bestandje up te loaden naar de server, maar nu zit ik nog altijd met hetzelfde probleem, namelijk: het mag niet direct in het volgende scriptje uploaden, het mag maar 2 scriptjes verder worden upgeload nadat er een previewbladzijde is geweest waar de gebruiker niets aan kan veranderen, maar alleen maar kan zien wat hij wil invoeren, het enigste dat die daar op heeft is ne knop "bevestigen".

Da wil dus zeggen: tussen het selecteren van het bestand in een formulier, en het eigenlijke uploaden, zit nog een ander script en zolang dat script (namelijk de preview) niet is uitgevoerd, mag hij nog niets uploaden. De vraag is dus: hoe kan ik der een script tussensteken zodat hij onthoud wat ge 2 scriptjes dervoor in een fileveld hebt doorgestuurd, pas 2 scriptjes later zal uploaden?

De de volgorde is in mijn systeem:

pagina 1. formulier met fileveld om een bestand te selecteren
pagina 2. preview van teksten + tonen foto vanop eigen lokatie (<img src= c:\...\)
pagina 3. als preview goedgekeurd in 2, dan mag hij de teksten naar een db sturen + uploaden vanaf het pad dat ge in 1 hebt geselecteerd.

Da wilt dus zeggen, ge moet diene file op één of andere manier een tijdje kunnen meenemen via enkele variabelen voor den upload, en tis da da ik moet weten.
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Sensei Zeon
Administrator
Administrator
Berichten: 4143
Lid geworden op: 15 sep 2002, 09:08
Locatie: Belgium, Haacht
Contacteer:

Dat is met hidden forms te doen, de php variabele $_FILE[' '] geeft u alle gegevens over het file, wat je dan als inhoud n een hidden form zet, deze commit ge dan naar uw volgend script om te uploaden.
Als dat niet werkt (niet getest dus) laat ze gewoon uploaden en move het pas als het goed gekeurd is, anders staat dat in een tmp dir en die wordt toch geleegd.
Your Sensei sends his greetz, SeNsEi Ze0n

Afbeelding
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

het zal dus de 2e oplossing worden:

eerst upload ik direct al naar een vast bestandje dat de gebruikersnaam zal zijn van de gebruiker (zoda 2 gebruikers tegelijk geen interferentie kunnen opleveren), en dan verplaats ik als de preview wordt goedgekeurd het bestandje naar de naam waar het definitief zal worden opgeslagen.

Nu moet ik just nog weten hoe ge zonder ftp een bestandje van de ene lokatie op de server kunt verplaatsen naar een andere lokatie op de server :-D
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Alle, om zelf den topic nog te vervolledigen voor latere gevallen:

een bestandje hernoemen is vrij simpel, er is namelijk een eenvoudige php-functie "rename" (nogal wiedes eigenlijk :-D )

Alle, das dan ook weer aufgelöst :-)

http://be.php.net/manual/nl/function.rename.php
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Sub Zero
Administrator
Administrator
Berichten: 6181
Lid geworden op: 15 sep 2002, 12:14
Locatie: Herzele
Uitgedeelde bedankjes: 74 keer
Bedankt: 121 keer
Contacteer:

Ik kan u anders ook altijd eens mijn cursus aanraden :)
Met dank aan Mr Van der Linde *klik*
Afbeelding
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

da doet mij denken aan ne cursus fysica :-D
ge snapt wel wa der staat als ge da allemaal gaat bestuderen, moar als ge maar 10 seconden per slide krijgt, kunde nie volgen :twisted:
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Sub Zero
Administrator
Administrator
Berichten: 6181
Lid geworden op: 15 sep 2002, 12:14
Locatie: Herzele
Uitgedeelde bedankjes: 74 keer
Bedankt: 121 keer
Contacteer:

Je kan ook gewoon de voorbeeld-code rippen :)
Afbeelding
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Ik rip ekik niets, ik maak da allemaal schonekes zelf, dan zijn ik zeker da het kwaliteit is :-D

Het systeem is trouwens af, kmoet het just nog implementeren in mijn administratiesysteem (da ik nog moet bouwen). Kzal ulder dan ies een paswoordje geven achtereen da ge het ies uitvoerig kunt testen op lekken als ge goesting hebt :wink:
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Plaats reactie

Terug naar “Development”