Pagina 1 van 1

sourcefile voor ftp via php meedragen

Geplaatst: 02 jul 2005, 13:48
door Pi R²
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:

Geplaatst: 02 jul 2005, 14:29
door Breen
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é ;)

Geplaatst: 02 jul 2005, 15:33
door meon
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

Geplaatst: 02 jul 2005, 15:53
door Pi R²
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?

Geplaatst: 02 jul 2005, 16:19
door meon
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.");
  }
}?>

Geplaatst: 04 jul 2005, 13:57
door Pi R²
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.

Geplaatst: 04 jul 2005, 14:10
door Sensei Zeon
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.

Geplaatst: 04 jul 2005, 14:22
door Pi R²
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

Geplaatst: 04 jul 2005, 14:41
door Pi R²
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

Geplaatst: 04 jul 2005, 16:23
door Sub Zero
Ik kan u anders ook altijd eens mijn cursus aanraden :)
Met dank aan Mr Van der Linde *klik*

Geplaatst: 04 jul 2005, 18:43
door Pi R²
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:

Geplaatst: 04 jul 2005, 22:42
door Sub Zero
Je kan ook gewoon de voorbeeld-code rippen :)

Geplaatst: 05 jul 2005, 16:32
door Pi R²
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: