Formulier op site samen met foto's uploaden...
10 februari 2009 - 15:13   
geplaatst door: Franky2002
Ik wil een formulier op een site plaatsen en daarbij moeten mensen op hun harde schijf een foto kunnen kiezen en die mee kunnen sturen.

a: kan ik dit zelf bouwen? (niet al te technisch persoon)
b: waar vind ik op internet een tutorial om dit te realiseren?

Formulier op site samen met foto's uploaden...
10 februari 2009 - 20:44    reactie #1
geplaatst door: Fix
dit kun je zeker zelf bouwen.
handig als je al wat ervaring met html en de form-tag hebt.
Je code moet er ongeveer zoiets uitzien:

< form action="blahblah.php" enctype="multipart/form-data" method="post">
< input type="file" name="data" size="50">
< input type="submit" value="verzend">
< /form>

Waar in de 2e regel je dus een 'browse knop' krijgt.
Formulier op site samen met foto's uploaden...
10 februari 2009 - 21:02    reactie #2
geplaatst door: Godfather
blahblah.php is echt een goeie ja, die werkt altijd...  :dontgetit:
Mac Pro '08 - iPad 16GB - iPhone 6 - Next Gen MB Pro
Formulier op site samen met foto's uploaden...
11 februari 2009 - 07:21    reactie #3
geplaatst door: Franky2002
Prachtig, maar snap het nog niet.
Ik zie bijvoorbeeld in de tweede regel geen browse-knop (als je de code tenminste bedoeld).
Formulier op site samen met foto's uploaden...
11 februari 2009 - 08:14    reactie #4
geplaatst door: Blender
Als je even googled naar:
‘php file upload script’
dan zie je genoeg voorbeelden.

Als je niet genoeg php-kennis hebt is dit veiliger
dan zelf rommelen.

Formulier op site samen met foto's uploaden...
11 februari 2009 - 08:50    reactie #5
geplaatst door: mvdg
Gezien de vraag 'ik zie geen browse knop' trek ik de conclusie dat je op dit gebied een beginner bent. Ik bedoel dat niet onaardig hoor, je kunt immers niet overal een expert in zijn.

Is dit voor een hobby project, dan is het inderdaad een goed idee om bestaande scripts als basis te nemen. Is het voor werk of iets anders wat wat meer serieus is, dan zou ik aanraden om het door iemand te laten maken die weet wat hij doet. Dat scheelt jou tijd, en je krijgt waarschijnlijk een beter resultaat. En, wat bij websites heel belangrijk is, minder kans dat je script op de een of andere manier misbruikt kan worden door een hacker.

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
Formulier op site samen met foto's uploaden...
11 februari 2009 - 15:42    reactie #6
geplaatst door: Franky2002
Gelukt mensen.
Happy noob here!  :cool:

Maar nu komen de bestanden (gif's/jpeg's) in een UPLOAD-map terecht op de server.
Op zich prima, maar invulgegevens als naam, adres, enz komen dan niet mee.
Ik wil ook graag dat deze meegestuurd worden met de foto.
Voor de latere verwerking is dat wel noodzakelijk.

Het formulier kun je hier bekijken.

De code voor verwerking is nu als volgt:

<?php<br>if ((($_FILES["file"]["type"] == "image/gif")<br>|| ($_FILES["file"]["type"] == "image/jpeg")<br>|| ($_FILES["file"]["type"] == "image/pjpeg"))<br>&& ($_FILES["file"]["size"] < 20000))<br>  {<br>  if ($_FILES["file"]["error"] > 0)<br>    {<br>    echo "Return Code: " $_FILES["file"]["error"] . "<br />";<br>    }<br>  else<br>    {<br>    echo "Upload: " $_FILES["file"]["name"] . "<br />";<br>    echo "Type: " $_FILES["file"]["type"] . "<br />";<br>    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";<br>    echo "Temp file: " $_FILES["file"]["tmp_name"] . "<br />";<br>    if (file_exists("upload/" $_FILES["file"]["name"]))<br>      {<br>      echo $_FILES["file"]["name"] . " already exists. ";<br>      }<br>    else<br>      {<br>      move_uploaded_file($_FILES["file"]["tmp_name"],<br>      "upload/" $_FILES["file"]["name"]);<br>      echo "Stored in: " "upload/" $_FILES["file"]["name"];<br>      }<br>    }<br>  }<br>else<br>  {<br>  echo "Invalid file";<br>  }<br>?>
Formulier op site samen met foto's uploaden...
11 februari 2009 - 16:03    reactie #7
geplaatst door: mvdg
Je zou direct boven of onder de regel 'move_uploaded_file' een stukje code kunnen toevoegen waarmee je een bestandje aanmaakt met de gegevens uit het formulier. Heel simpel kan dat met de volgende code:


$tekst = "";
foreach ($_POST as $veld=>$inhoud) $tekst .= $veld." : ".$inhoud . "\n";
file_put_contents("upload/" . $_FILES["file"]["name"] . ".info.txt");

Bij het uploaden van foto.jpg wordt er dan een bestandje toegevoegd "foto.jpg.info.txt".

Overigens, houd er wel rekening mee dat de bestanden (en ook het bestandje met de info) voor buitenstaanders gewoon zichtbaar zijn, gewoon door urls te proberen. De informatie is dus niet erg veilig. Maar misschien hoeft dat niet, dat kan ik natuurlijk niet beoordelen.

En is het de bedoeling dat de foto's kleiner dan 20 kb moeten zijn? Die beperking zit nu immers in het script ingebakken : $_FILES["file"]["size"] < 20000 .

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
Formulier op site samen met foto's uploaden...
11 februari 2009 - 16:20    reactie #8
geplaatst door: Franky2002
Het heeft inderdaad niet de grootste veiligheidsprioriteiten.
Daar was ik me van bewust, mede door jouw eerdere waarschuwing,
mede door de waarschuwingen bij deze code.

Die 20 kb's had ik al opgevoerd tot 2 mb  (op de server) mede doordat
een upload van een 1,3 mb bestand niet lukte.

Ik ga je code proberen. Kom ik vandaag niet meer aan toe, maar als er wat is meld ik me weer.
Alvast bedankt voor jullie meedenken.

Formulier op site samen met foto's uploaden...
16 februari 2009 - 15:19    reactie #9
geplaatst door: Franky2002
Ben ik weer.
Ik heb de code ingevoegd zoals mvdg aangaf, althans ik hoop dat ik het goed doe, want ik krijg een foutmelding: Fatal error: Call to undefined function: file_put_contents() in... enz.

a: Nou weet ik niet of de code daar mag staan
en als dat wel goed is,
b: wat nog aangepast moet worden in de code zodat de invulvelden in het formulier meekomen
Ik neem aan dat die invulvelden (met namen als "fotograaf" "wanneeer" en "ijsbaan") ergens tussen de code moeten terecht komen, maar ik heb geen idee waar.

Ik heb al het een en ander geprobeerd maar geen resultaten dusver.



<?php<br>if ((($_FILES["file"]["type"] == "image/gif")<br>|| ($_FILES["file"]["type"] == "image/jpeg")<br>|| ($_FILES["file"]["type"] == "image/pjpeg"))<br>&& ($_FILES["file"]["size"] < 2000000))<br>  {<br>  if ($_FILES["file"]["error"] > 0)<br>    {<br>    echo "Return Code: " $_FILES["file"]["error"] . "<br />";<br>    }<br>  else<br>    {<br>    echo "Upload: " $_FILES["file"]["name"] . "<br />";<br>    echo "Type: " $_FILES["file"]["type"] . "<br />";<br>    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";<br>    echo "Temp file: " $_FILES["file"]["tmp_name"] . "<br />";<p>    if (file_exists("upload/" $_FILES["file"]["name"]))<br>      {<br>      echo $_FILES["file"]["name"] . " already exists. ";<br>      }<br>    else<br> {<br>     $tekst ""; <br>foreach ($_POST as $veld=>$inhoud$tekst .= $veld." : ".$inhoud "\n"; <br>file_put_contents("upload/" $_FILES["file"]["name"] . ".info.txt");<br> move_uploaded_file($_FILES["file"]["tmp_name"],<br>      "upload/" $_FILES["file"]["name"]);<br>      echo "Stored in: " "upload/" $_FILES["file"]["name"];<br>      }<br>    }<br>  }<br>else<br>  {<br>  echo "Invalid file";<br>  }<br>?>
Formulier op site samen met foto's uploaden...
16 februari 2009 - 15:37    reactie #10
geplaatst door: mvdg
Sorry, file_put_contents werkt alleen in PHP 5.
Je kunt de regel die daarmee begint, vervangen door:

$fp = fopen("upload/" . $_FILES["file"]["name"] . ".info.txt");
fwrite($fp, $tekst);
fclose($fp);

Dit doet hetzelfde en werkt ook in PHP 4.

De velden 'fotograaf' enzovoort, worden in de regel daarvoor (die met foreach begint)
onder elkaar in een tekst geplaatst. Daarna wordt die tekst dus opgeslagen met het
stukje code hierboven.

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
Formulier op site samen met foto's uploaden...
16 februari 2009 - 16:07    reactie #11
geplaatst door: Franky2002
Tnx Mvdg.
De foto word nu in ieder geval ge-upload.
Maar ik snap je vervolg niet.
Hoe gaat het er dan uitzien?
De waarden die de invulvakken bevatten zijn "fotograaf", "wanneer", "ijsbaan", "adres" en "toelichting".
Formulier op site samen met foto's uploaden...
17 februari 2009 - 08:31    reactie #12
geplaatst door: mvdg
Als de foto is geupload, dan is er nu als het goed is ook een bestandje op de server gezet met dezelfde naam als de foto, maar met '.info.txt' erachter. Dat bestandje bevat de ingevoerde velden voor 'fotograaf', 'wanneer', enzovoort.

Dat gebeurt namelijk in deze regels:


$tekst = "";   // tekst leegmaken
foreach ($_POST as $veld=>$inhoud) $tekst .= $veld." : ".$inhoud . "\n";   // alle meegestuurde formulier-variabelen toevoegen aan de tekst
$fp = fopen("upload/" . $_FILES["file"]["name"] . ".info.txt");  // bestandje aanmaken
fwrite($fp, $tekst);  // tekst erin zetten
fclose($fp);  // bestandje sluiten

Of bedoel je dat je vervolgens ook automatisch alle foto's wilt gaan laten zien? Dan zul je toch iets meer moeten doen, namelijk een soort mini databaseje maken waarin je dit alles opslaat...

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
Formulier op site samen met foto's uploaden...
24 februari 2009 - 09:53    reactie #13
geplaatst door: Franky2002
Nee het moet geen automatisch systeem worden. Ik haal de foto met bijbehorende gegevens uit het mapje upload en ga dat later in de site verwerken. Handmatig werk dus.
Nu wil ik het de bezoekers zo makkelijk mogelijk maken, dus een emailadres geven en dan van 'schrijf ook even erbij waar de foto gemaakt is' wil ik voorkomen.
Hoewel dat voor mij nu een stuk makkelijker is  :wink: want er komen steeds meer foutmeldingen tevoorschijn.

Ik haal nog een keer diep adem en tel weer tot tien.... :wink:

De code die in het bestand upload_file.php staat is nu als volgt:


<?php<br>if ((($_FILES["file"]["type"] == "image/gif")<br>|| ($_FILES["file"]["type"] == "image/jpeg")<br>|| ($_FILES["file"]["type"] == "image/pjpeg"))<br>&& ($_FILES["file"]["size"] < 4000000))<br>  {<br>  if ($_FILES["file"]["error"] > 0)<br>    {<br>    echo "Return Code: " $_FILES["file"]["error"] . "<br />";<br>    }<br>  else<br>    {<br>    echo "Upload: " $_FILES["file"]["name"] . "<br />";<br>    echo "Type: " $_FILES["file"]["type"] . "<br />";<br>    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";<br>    echo "Temp file: " $_FILES["file"]["tmp_name"] . "<br />";<p>    if (file_exists("upload/" $_FILES["file"]["name"]))<br>      {<br>      echo $_FILES["file"]["name"] . " already exists. ";<br>      }<br>    else<br> {<br>      $tekst "upload_file.php"; <br>foreach ($_POST as $veld=>$inhoud$tekst .= $veld." : ".$inhoud "\n"; <br>$fp fopen("upload/" $_FILES["file"]["name"] . ".info.txt"); <br>fwrite($fp$tekst); <br>fclose($fp);<br> move_uploaded_file($_FILES["file"]["tmp_name"],<br>      "upload/" $_FILES["file"]["name"]);<br>      echo "Stored in: " "upload/" $_FILES["file"]["name"];<br>      }<br>    }<br>  }<br>else<br>  {<br>  echo "Invalid file";<br>  }<br>?>

Als ik dan het formulier invul krijg ik de volgende melding:

Upload: logo.gif
Type: image/gif
Size: 11.8056640625 Kb
Temp file: C:\PHP4\uploadtemp\php246E.tmp

Warning: fopen() expects at least 2 parameters, 1 given in c:\domains\kansopvorst.nl\wwwroot\upload_file.php on line 26

Warning: fwrite(): supplied argument is not a valid stream resource in c:\domains\kansopvorst.nl\wwwroot\upload_file.php on line 27

Warning: fclose(): supplied argument is not a valid stream resource in c:\domains\kansopvorst.nl\wwwroot\upload_file.php on line 28
Stored in: upload/logo.gif

Waar o waar gaat het mis?

Formulier op site samen met foto's uploaden...
24 februari 2009 - 10:33    reactie #14
geplaatst door: mvdg
Sorry, ik doe het uit mijn hoofd dus maak wel eens een vergissinkje.
De regel met "fopen" moet zijn:
$fp = fopen("upload/" . $_FILES["file"]["name"] . ".info.txt" ,"w");

Door mijn vergissing wordt inderdaad het bestand niet aangemaakt en
krijg je die 3 foutmeldingen.. Het niet juist kunnen openen werkt immers
door in het niet kunnen schrijven en afsluiten van het tekstbestandje.
Het aantal foutmeldingen is dus niet zo rampzalig hoor. :)

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
Formulier op site samen met foto's uploaden...
24 februari 2009 - 12:41    reactie #15
geplaatst door: Franky2002
Tnx mvdg,
dat het in zulke simpele toevoegingen kan zitten.
Het werkt nu perfect, en ik ben een beetje wijzer geworden, alleen in het teksttoevoegingsgedeelte, ben ik je kwijtgeraakt.
Maar zoals je al zei: je kan niet overal specialist in zijn.
In ieder geval: bedankt voor je geduld en hulp. :thumbs-up:
Formulier op site samen met foto's uploaden...
24 februari 2009 - 12:42    reactie #16
geplaatst door: mvdg
Tja zo is het altijd met programmeren. Elke punt en komma moet goed zijn.
Normaal probeer je het steeds uit terwijl je dingen toevoegt en dan zie je het meteen als je iets fout doet. Dat is nu wat lastiger natuurlijk. Maar we komen er wel :) Fijn dat het nu goed voor je werkt!
Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl