[php] uploadform

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Dit is onderdeel van een schoolproject.
Ik heb het volgende stukje code:

PHP:
1
2
3
4
$pos = strrpos($foto['naam'],".");
$foto['ext'] = substr($foto['naam'],$pos+1);
$foto['naam'] = $chipnr . "." . $foto['ext'];
move_uploaded_file($_FILES['foto']['tmp_name'],$_SERVER['DOCUMENT_ROOT'] . "/images/dieren/" . $foto['naam']);


Het bestand wordt via een POST formulier opgehaald (met enctype multipart). Op mijn localhost wordt $foto['naam'] zoals ie hoort (combinatie van chipnr en extensie) en wordt het bestand op de juiste plaats opgeslagen onder de aangepaste naam.
Maar als ik het script upload maakt ie op de een of andere manier '1' van $foto['naam'].
Ziet iemand een fout?

[ Voor 60% gewijzigd door marcovtwout op 14-01-2005 00:07 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik zie eigenlijk zo even niks wat het zou kunnen zijn. Is dit al je code? Staat er uberhaupt wel iets in $foto['naam']? Hoe kom je aan deze variabele?

En heb je zelf al gedebugd? Je kunt toch even de variabelen na elke regel code even op het scherm kwakken. Dan zie je vanzelf op welke regel het fout gaat.

[ Voor 15% gewijzigd door Noork op 14-01-2005 00:04 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Nee dit is niet al mn code :P
Zoals ik al zei, op mijn localhost werkt alles perfect.
Maar als ik het script online uitvoer gaat er iets mis.
Is het een foute serverinstelling ofzo?
En bij het debuggen komt er '1'.

Acties:
  • 0 Henk 'm!

Verwijderd

meestal kan je wel maar 2 meg per bestand uploaden...
mss gaat het daar fout?
max upload size is een servervar
kan je opvragen met phpinfo()

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Waar komt er 1? Op de eerste regel al? Of pas aan het eind als de image wordt gesaved?

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
De grootte van het plaatje maakt niet uit.

- bij het ophalen van de variabele in $foto['naam'] komt de opgegeven bestandsnaam eruit
- $pos = strrpos($foto['naam'],"."); //blijft leeg.
- $foto['ext'] = substr($foto['naam'],$pos+1); //blijft ook leeg.
- $foto['naam'] = $chipnr . "." . $foto['ext']; //wordt 1111.(vierkantje), waarvan 1111 het chipnr is.
- move_uploaded_file() // wordt 1

Blijkbaar gaat het in het begin al fout.
Ook al bevat $foto['naam'] toch echt een '.'

[ Voor 53% gewijzigd door marcovtwout op 14-01-2005 00:25 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
marcovtwout schreef op vrijdag 14 januari 2005 @ 00:19:
Blijkbaar gaat het in het begin al fout.
Aha, en wat is de waarde van $foto['naam'] dan voor dit stuk code, wat doe je met deze variabele en waar komt ie vandaan???

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Wordt opgeslagen in $foto['naam']
Zo wordt ie opgehaald:

PHP:
1
$foto['naam'] = trim(htmlspecialchars(strip_tags($_FILES['foto']['name']), ENT_QUOTES));

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
marcovtwout schreef op vrijdag 14 januari 2005 @ 00:26:
Wordt opgeslagen in $foto['naam']
Zo wordt ie opgehaald:

PHP:
1
2
$foto['naam'] = trim(htmlspecialchars
(strip_tags($_FILES['foto']['name']), ENT_QUOTES));
Aha, en zit er vervolgens een waarde in $foto['naam']? En doe het eens zonder trim, htmlspecialchars en strip tags.

[ Voor 36% gewijzigd door Noork op 14-01-2005 00:30 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
$foto['naam'] = $_FILES['foto']['name'];
$foto['naam'] is vervolgens 'Image.jpg'
En daarna gaat het weer fout :P

*zo, ff wat slaap halen na een avondje programmeren

[ Voor 38% gewijzigd door marcovtwout op 14-01-2005 00:37 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Geef gewoon eens een var_dump van $_FILES['foto'] en daarna van $foto['naam']

Btw op welk niveau heb je error_reporting staan?

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Je variabelen kloppen niet, je moet niet $foto['naam'] gebruiken, maar gewoon $foto. Wat een vreemde constructie is dat. Ik ben geen php goeroe dus ik zat te denken dat dat bepaalde array variabelen waren of zo. Maar 't klopt gewoon voor geen kant.

Dit werkt wel:
code:
1
2
3
4
5
6
7
<? 
$chipnr = "chipnr"; 
$foto = "image.jpg";
$pos = strrpos($foto,"."); 
$ext = substr($foto,$pos+1); 
$foto = $chipnr . "." . $ext; 
?>

[ Voor 88% gewijzigd door Noork op 14-01-2005 00:42 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Noork schreef op vrijdag 14 januari 2005 @ 00:39:
Je variabelen kloppen niet, je moet niet $foto['naam'] gebruiken, maar gewoon $foto. Wat een vreemde constructie is dat. Ik ben geen php goeroe dus ik zat te denken dat dat bepaalde array variabelen waren of zo. Maar 't klopt gewoon voor geen kant.
Het kan wel hoor, php is daar bijhoorlijk makkelijk in.
Als je $var['foo'] = 'blaat'; doet dan zal $var automatisch een array worden.
Als je $var['foo'] = $bar['foo']; doet dan zal je met $var['foo'] dezelfde waarde krijgen als in $bar['foo'] staat.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Tja, ik verwachte het niet maar als ik het inderdaad als $foto doe doet ie het wel.
Het heeft vast met de serverinstellingen te maken want op mn localhost deed ie het perfect.

Bedankt! :)

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Later nog wat probleempjes tegengekomen.
En ook weer gefixt.
$ext en $pos, een van de twee is volgens mij een gereserveerde variabele, want al hernoem ik ze naar $ext1 en $pos1 doet ie het.

Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Geen antwoord op je vraag maar je kan om de extentie eruit te halen beter het volgende doen:
PHP:
1
2
$temp = explode(".", $foto['naam']);
$foto['ext'] = $temp[ count($temp)-1 ];


Voor als de foto naam meerdere .'s bevat

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
chuxiej schreef op vrijdag 14 januari 2005 @ 20:45:
Geen antwoord op je vraag maar je kan om de extentie eruit te halen beter het volgende doen:
PHP:
1
2
$temp = explode(".", $foto['naam']);
$foto['ext'] = $temp[ count($temp)-1 ];

Voor als de foto naam meerdere .'s bevat
Nee, met strrpos pak je altijd het laatste voorkomen van je "needle" in de haystack. Het maakt dus niet uit hoeveel punten er in de bestandsnaam staan. Exploden is dus een beetje overkill.
Zelf haal ik de extensie er meestal uit met strrchr():
PHP:
1
$f_ext = strtolower(strrchr($file['name'], '.')); //let op puntje zit er dan nog aan

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Maar php zou php niet zijn als ze hiervoor een eigen functie hadden:
PHP:
1
2
3
4
5
6
7
<?php
$path_parts = pathinfo('/www/htdocs/index.html');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
?> 

Acties:
  • 0 Henk 'm!

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Zo ook weer wat geleerd :D

www.dannyhiemstra.nl


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Sjaaky schreef op vrijdag 14 januari 2005 @ 21:26:
Maar php zou php niet zijn als ze hiervoor een eigen functie hadden:
PHP:
1
2
3
4
5
6
7
<?php
$path_parts = pathinfo('/www/htdocs/index.html');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
?> 
Van dezelfde pagina:
If you want only the file extension, use this:
<?php
$extension = substr(strrchr($filename, "."), 1);
?>
This is many times faster than using pathinfo() and getting the value from array.

Regeren is vooruitschuiven

Pagina: 1