Uploader ikke billede

Tags:    php

Hej på udvikleren.dk,

Jeg er i øjeblikket igang med, at lave et script til at uploade billeder med.

Mit script er som følger:

<?php
session_start();
if($_SESSION['access'] == "true") {
require_once("classes/dbconn.php");
$db = new DbConnector();
$db->connect();
$oprettetaf = $_SESSION['name'];
$mappenavn = strtolower(str_replace(" ", "_", $_POST['gallerinavn']));

if(isset($_POST['opretgalleri'])) {
mkdir($_SERVER['DOCUMENT_ROOT'].'/gallery/'.$mappenavn);
chmod("./gallery/$mappenavn/",0777);

//$query = mysql_query("INSERT INTO galleri(oprettetaf, oprettetdato, navn, sti) VALUES('$oprettetaf', NOW(), '$gallerinavn', '$mappenavn')");
//$hentgalleri = mysql_query("SELECT navn FROM galleri WHERE navn = '$gallerinavn'");
//$row = mysql_fetch_array($hentgalleri);
//$gallerietsnavn = $row['navn'];
}

if(isset($_POST['upload'])) {
$dir = $_POST['mappenavn'];
$dist = $_SERVER['DOCUMENT_ROOT'].'/gallery/'.$dir.'/';

for ($i=0;$i<10;$i++) {
if (is_uploaded_file($_FILES['upfil']['tmp_name'][$i])) {
$filnavn = $_FILES['upfil']['name'][$i];
$tempnavn = $_FILES['upfil']['tmp_name'][$i];
$sti = $dist;
move_uploaded_file($tempnavn, $sti . $filnavn);
echo "$filnavn er uploadet!<br /><br />";
echo $dist . $filnavn;
}
}

} else {
echo "
<form action=\"index.php?page=uploadpics\" method=\"post\" enctype=\"multipart/form-data\">";
for ($i=1;$i<11;$i++) {
echo "<input type=\"file\" name=\"upfil[]\" size=\"20\">";
if ($i%2 == 0)
echo "<br /><input type=\"hidden\" value=\"".$mappenavn."\" name=\"mappenavn\">";
}
echo "<input type=\"submit\" value=\"Send filer\" name=\"upload\">
</forms>
";
}

} else {
header("location: /");
}

?>

Som I kan se, så har jeg lavet et hidden field i bunden for at sende det nyoprettede mappenavn med til selve for-løkken, der skal uploade billedet.

Mit problem er så, at den ikke kan finde ud af, at uploade billedet i den angivne mappe, men hvis jeg fjerner mappenavnet, så den bare får lov til at uploade i ./gallery, så virker det perfekt.

Jeg har dobbelttjek'et, at den nyoprettede mappe rent faktisk bliver chmod'et til 777! Yderligere har jeg udskrevet alle mine variabler og det ser helt fint ud.

F.eks. udskriver echo $dist - $sti følgende:

/hsphere/local/home/hellum/kvarterets-drenge.dk/gallery/testgallery/testpic.jpg

.. hvilket jo ser meget rigtigt ud.

Nogen forslag til hvad jeg har gjort galt?

På forhånd tak for svaret.

Med venlig hilsen,

Bo



9 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
name="mappenavn"
$_POST['gallerinavn'])

Der er noget der ikke stemmer.



Hey Erik og tak for dit svar.

Jo, det stemmer fint nok. Skulle måske have skrevet at $_POST['gallerinavn'] kommer fra en form på en anden side :)



Det kan den ikke. Den kan kun komme fra den <form> du viser her.



Øhm, ikke for at lyde arrogant eller noget, jeg undrer mig bare ;)

Hvordan kan det så være, at den fint kan oprette en mappe, med det input den får fra formen på den foregående side?

Den laver jo fint nok mappen med det man har skrevet i feltet :)



Side 1: <form> med eet felt: "a", POST-er til side 2

Side 2: Bruger et andet navn: "b": $_POST['b']

Er det sådan det er sat op? Det kan man ikke - vel?



Du får lige noget kode, det er vist nemmere at se :)

OPRETGALLERI.PHP
-----------------

<?php
session_start();
if($_SESSION['access'] == "true") {
require_once("classes/dbconn.php");
$db = new DbConnector();
$db->connect();
$oprettetaf = $_SESSION['name'];

if(getenv("HTTP_REFERER") == "http://www.kvarterets-drenge.dk/index.php?page=galleri") {
echo "
<table border=2 align=center width=400px>
<tr>
<td>
Step 1: Opret et nyt galleri. F.eks. Nytår 2008.
<form action=\"index.php?page=uploadpics\" method=\"post\">
<input value=\"Galleriets navn...\" type=\"text\" name=\"gallerinavn\">
<input align=\"right\" type=\"submit\" name=\"opretgalleri\" value=\"Opret galleri\">
</form>
</td>
</tr>
</table>
";
}
}

?>


UPLOADPICS.PHP
----------------

<?php
session_start();
if($_SESSION['access'] == "true") {
require_once("classes/dbconn.php");
$db = new DbConnector();
$db->connect();
$oprettetaf = $_SESSION['name'];
$mappenavn = strtolower(str_replace(" ", "_", $_POST['gallerinavn']));

if(isset($_POST['opretgalleri'])) {
mkdir($_SERVER['DOCUMENT_ROOT'].'/gallery/'.$mappenavn);
chmod("./gallery/$mappenavn/",0777);

//$query = mysql_query("INSERT INTO galleri(oprettetaf, oprettetdato, navn, sti) VALUES('$oprettetaf', NOW(), '$gallerinavn', '$mappenavn')");
//$hentgalleri = mysql_query("SELECT navn FROM galleri WHERE navn = '$gallerinavn'");
//$row = mysql_fetch_array($hentgalleri);
//$gallerietsnavn = $row['navn'];
}

if(isset($_POST['upload'])) {
$dir = $_POST['mappenavn'];
$dist = $_SERVER['DOCUMENT_ROOT'].'/gallery/'.$dir.'/';

for ($i=0;$i<10;$i++) {
if (is_uploaded_file($_FILES['upfil']['tmp_name'][$i])) {
$filnavn = $_FILES['upfil']['name'][$i];
$tempnavn = $_FILES['upfil']['tmp_name'][$i];
$sti = $dist;
move_uploaded_file($tempnavn, $sti . $filnavn);
echo "$filnavn er uploadet!<br /><br />";
echo $dist . $filnavn;
}
}

} else {
echo "
<form action=\"index.php?page=uploadpics\" method=\"post\" enctype=\"multipart/form-data\">";
for ($i=1;$i<11;$i++) {
echo "<input type=\"file\" name=\"upfil[]\" size=\"20\">";
if ($i%2 == 0)
echo "<br /><input type=\"hidden\" value=\"".$mappenavn."\" name=\"mappenavn\">";
}
echo "<input type=\"submit\" value=\"Send filer\" name=\"upload\">
</forms>
";
}

} else {
header("location: /");
}

?>


Jeg prøvede at udskrive $_POST['gallerinavn'] (fra uploadpics.php) og den udskriver helt fint det, man indtaster i opretgalleri.php form feltet :)




Men det gør den vel ikke når du trykker på "Send filer" - knappen



Nej der bliver den godt nok "slettet", det er derfor jeg har lavet det der hidden field 'hax', så det alligevel kommer med. Ved godt det måske ikke er det mest logiske ;)

Med andre ord, så kommer $mappenavn alligevel med via:

<input type=\"hidden\" value=\"".$mappenavn."\" name=\"mappenavn\">



Det er nok ikke den mest overskuelige måde at gøre det på ;)

Dvs du rent faktisk bruger "mappenavn" fra <form>-en - men den kommer jo mere end een gang, sådan ca 5 gange. Prøv at se i "vis kilde" på siden. Hvilken værdi kommer der så ind i $_POST['mappenavn'] ?

Og mens jeg husker det: Det er noget nær verdens mest usikre script: Man kan uploade PHP-filer i dit galleri, og så kan man overtage dit website. Du lægger det ikke ud, inden det er i orden. Vel? Nu skal det selvfølgelig lige virke først.



t