Avatar billede thomasdaco Nybegynder
16. september 2011 - 12:32 Der er 18 kommentarer

PHP udfordring - images upload driller

Mit php upload script virker fint. Men hvis jeg vælger ikke at medtage et image i mit upload, så bliver mit upload ikke gennemført

Mit script er et copy/past og hvis det kan trimmes så vil det være et plus.
Endmasse varabler kommer fra HTML side
og bliver sendt videre til  en script side med følgende kode ->

$uploadDir = 'upload/';

if(is_uploaded_file($_FILES['userfile']['tmp_name'])
&& ($_FILES['userfile']['size'] > 0))

if(isset($_POST['newfounding'])) {

$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
if ((($_FILES["userfile"]["type"] == "image/gif") ||
    ($_FILES["userfile"]["type"] == "image/jpeg") ||
    ($_FILES["userfile"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
{
$fileType = $_FILES['userfile']['type'];
}
else
{
header("location:newfoundings.php");
echo "Der kan kun anvendes filer af typen Gif & Jpeg";
exit;

}

// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);

// make the random file name
$randName = md5(rand() * time());

// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);

if (!$result) {
echo "Fejl, prøv igen.";
exit;
}

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}

Herefter kommer der en SQL kommando, hvor jeg indsætter $filePath i min DB.

Takker på forhånd.
Avatar billede michael_stim Ekspert
16. september 2011 - 12:35 #1
"Mit php upload script virker fint. Men hvis jeg vælger ikke at medtage et image i mit upload, så bliver mit upload ikke gennemført"??? Øhh, nej det gør det ikke.
Avatar billede skelboe Nybegynder
16. september 2011 - 13:15 #2
Får du en fejlmeddelse, eller gennemføres scripted bare uden at uploade noget?
Avatar billede thomasdaco Nybegynder
16. september 2011 - 14:11 #3
@skelboe & @michael_stim beklager min ringe forklaring.
mit upload system fungere på den måde, at du indtaster nogle oplysninger samt vedhæftet et billede og derefter uploader du det. Og som det er nu virker det fint. men hvis jeg vælger ikke at browse efter et billede men bare uploadet tekst, virkeer det ikke, den springer bare ud, rent exit uden fejlmelddelse.
Avatar billede michael_stim Ekspert
16. september 2011 - 14:15 #4

$uploadDir = 'upload/';

if(is_uploaded_file($_FILES['userfile']['tmp_name'])
&& ($_FILES['userfile']['size'] > 0)){

if(isset($_POST['newfounding'])) {

$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
if ((($_FILES["userfile"]["type"] == "image/gif") ||
    ($_FILES["userfile"]["type"] == "image/jpeg") ||
    ($_FILES["userfile"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
{
$fileType = $_FILES['userfile']['type'];
}
else
{
header("location:newfoundings.php");
echo "Der kan kun anvendes filer af typen Gif & Jpeg";
exit;

}

// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);

// make the random file name
$randName = md5(rand() * time());

// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);

if (!$result) {
echo "Fejl, prøv igen.";
exit;
}

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}
}
Avatar billede skelboe Nybegynder
16. september 2011 - 14:25 #5
Problemet er vel at dit script kun eksekveres ved filupload
Avatar billede michael_stim Ekspert
16. september 2011 - 14:34 #6
Ved ikke hvor denne kommer fra:


if(isset($_POST['newfounding'])) {


Men er det den der trigger knappen, så skal den flyttes op over:


if(is_uploaded_file($_FILES['userfile']['tmp_name'])
&& ($_FILES['userfile']['size'] > 0)){
Avatar billede thomasdaco Nybegynder
16. september 2011 - 19:14 #7
Nu har jeg flyttet if(isset($_POST['newfounding'])) {
som beskrivet men det hjælper ikke.
Hvis jeg vælger at indtaste data i min form og vælger et billede så virker det som det skal. Men jeg vil også gerne uploade tekst uden at vælge et billede.
Avatar billede thomasdaco Nybegynder
16. september 2011 - 19:27 #8
Jeg kan se at hvis jeg ikke vælger at uploade et billede resten af felterne. bliver mit script stoppet her ->

header("location:newfoundings.php");
echo "Der kan kun anvendes filer af typen Gif & Jpeg";
exit;
Avatar billede thomasdaco Nybegynder
07. oktober 2011 - 09:01 #9
Andre mulige løsninger ?
Avatar billede michael_stim Ekspert
07. oktober 2011 - 15:59 #10
Vi ved ikke hvordan din kode ser ud nu. Mistænker at du ikke gør som jeg siger.
Avatar billede thomasdaco Nybegynder
07. oktober 2011 - 19:36 #11
Har kun ændret det som du beskrev. Koden er som nedenstående :

$uploadDir = 'upload/';

//Hvis der er trykket på Upload
if(isset($_POST['newfounding'])) {

//Hvis filen findes og er større end 0
if(is_uploaded_file($_FILES['userfile']['tmp_name']) 
&& ($_FILES['userfile']['size'] >= 0))


$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
if ((($_FILES["userfile"]["type"] == "image/gif") ||
    ($_FILES["userfile"]["type"] == "image/jpeg") ||
    ($_FILES["userfile"]["type"] == "image/png") ||
    ($_FILES["userfile"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
{
$fileType = $_FILES['userfile']['type'];
}
else
{
header("location:newfoundings.php");
echo "Der kan kun anvendes filer af typen Gif & Jpeg";
exit;

}

// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);

// make the random file name
$randName = md5(rand() * time());

// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);

if (!$result) {
echo "Fejl, prøv igen.";
exit;
}

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}

mysql_query("INSERT INTO Foundings (picture_url, name, gps, users_id, dato, info, type, dane) VALUES ('$filePath', '$name', '$gps', '$users_id', '$dato', '$info', '$fundtype', '$dane')") or die(mysql_error());

}
Avatar billede michael_stim Ekspert
07. oktober 2011 - 20:17 #12
Du har jo netop ikke gjort hvad jeg har sagt ;o)

if(is_uploaded_file($_FILES['userfile']['tmp_name'])
&& ($_FILES['userfile']['size'] >= 0))

Hvornår starter og slutter denne if? ;o)
Avatar billede thomasdaco Nybegynder
10. oktober 2011 - 06:55 #13
@michael_stim, Ja den har jeg vist overset.
jeg har nu indsat { efter
if(is_uploaded_file($_FILES['userfile']['tmp_name'])
&& ($_FILES['userfile']['size'] >= 0))
Men det ser ikke lige ud til at virke.
Jeg får en Parse error: syntax error, unexpected $end på linje 104. Som er min slut header header("Location:fund.php");
Der var en slut }.
Avatar billede michael_stim Ekspert
10. oktober 2011 - 07:45 #14
Og du afslutter også din while med en }?
Avatar billede thomasdaco Nybegynder
10. oktober 2011 - 16:38 #15
@michael_stim, While ? jeg har ikke anvendt  en while funktion, men måske jeg skulle ?
Avatar billede michael_stim Ekspert
10. oktober 2011 - 17:48 #16
If'en selvfølgelig. Den du satte { ved.
Avatar billede thomasdaco Nybegynder
10. oktober 2011 - 19:17 #17
Arhh tak michael_stim , nu virker den som den skal.
Men er det muligt at indsætte en if således at hvis der ikke bliver tilføjet noget billede at man kan erstatte det med en standard ?

Her er min fulde kode ->

$uploadDir = 'upload/';

//Hvis der er trykket på Upload
if(isset($_POST['newfounding'])) {

//Hvis filen findes og er større end 0
if(is_uploaded_file($_FILES['userfile']['tmp_name']) 
&& ($_FILES['userfile']['size'] > 0)) {


$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
if ((($_FILES["userfile"]["type"] == "image/gif") ||
    ($_FILES["userfile"]["type"] == "image/jpeg") ||
    ($_FILES["userfile"]["type"] == "image/png") ||
    ($_FILES["userfile"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
{
$fileType = $_FILES['userfile']['type'];
}
else
{
header("location:newfoundings.php");
echo "Der kan kun anvendes filer af typen Gif & Jpeg";
exit;

}

// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);

// make the random file name
$randName = md5(rand() * time());

// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);

if (!$result) {
echo "Fejl, prøv igen.";
exit;
}

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}}}

mysql_query("INSERT INTO Foundings (picture_url, name, gps, users_id, dato, info, type, dane) VALUES ('$filePath', '$name', '$gps', '$users_id', '$dato', '$info', '$fundtype', '$dane')") or die(mysql_error());



header("Location:fund.php");
Avatar billede thomasdaco Nybegynder
21. oktober 2011 - 16:19 #18
smider du et point svar -> michael_stim
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester