webForumDet fria alternativet

Problem med att ladda upp bilder

13 svar · 693 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 271 inlägg
#1

Är tacksam ifall någon kan hjälpa mig att felsöka (kanske också optimera/säkra) följande script.
Får bara "ERROR" när jag försöker ladda upp bilder.

<?php
if(isset($_REQUEST['root_path'])){
	// get the document root - for use on include files	
	$root_path = $_SERVER['DOCUMENT_ROOT'];
}

// get the document root - for use on include files
$root_path = $_SERVER['DOCUMENT_ROOT'];

// include the config file
include("$root_path/adminpanel/includes/config.php");

// Include the connection to the database
include("$root_path/adminpanel/includes/connection.php");

// Field Names Used
// rec_id
// date_added
// member
// photo_file
// photo_thumb
// description

//safe HTML for the description
//$description
$description = strip_tags($description, $allowed_tags);

if (is_uploaded_file($item_pic)) {
	$image_name = stripslashes($item_pic_name);
	//print("Image Name: $image_name <br>");
	$pattern = "[^a-zA-Z0-9\.]";
	$image_name = ereg_replace($pattern, "", $image_name);
	$path = "../../images/gallery/";
	//print("Path: $path <br>");
	$destination = "../../images/gallery/$image_name";
	//print("Destination: $destination <br>");
	$num = 1;
	while (file_exists($destination)){    
		$num++; // if previous file name existed then tRy another number+_+filename
		$image_name = $num . "_" . $image_name;
		$destination = $path.$image_name;
	}               
	//print("Final Destination: $destination <br>");
	$thm_name = "thm_" . $image_name;
	//print("Thumb Name: $thm_name <br>");
	$thm_name_2 = "thm_300_" . $image_name;
	//print("Thumb Name 2: $thm_name_2 <br>");
    copy($item_pic, $destination) or die("Picture upload failed");
	
	// this creates the thumbnail
	$infile = $path . $image_name;
	//print("Infile $infile <br>");
	$outfile = $path . $thm_name;
	//print("Outfile $outfile <br>");
	$outfile2 = $path . $thm_name_2;
	//print("$outfile2");
	@exec("/usr/bin/convert -sample 100x100 $infile $outfile");
	@exec("/usr/bin/convert -sample 300x300 $infile $outfile2");

	// get the dimensions of the item's picture
	list($width, $height, $type, $attr) = getimagesize($infile);
	// get the image width
	$image_width=$width;
	//print("Image Width: $image_width <br>");
	// get the image height
	$image_height=$height;
	//print("Image Height: $image_height <br>");
	// get the image type
	$image_type=$type;
	//print("Image Type: $image_type <br>");
	// get the DATA size of the file
	$image_data_size = filesize($infile);
	//print("Image Data Size: $image_data_size <br>");
	
	$image_location="../../images/gallery/$image_name";
	//print("Image Location: $image_location <br>");	
	
	// define the query to put all this crap into the database
	$query = "INSERT INTO photos 
				(
				date_added, 
				member, 
				photo_file, 
				photo_thumb, 
				photo_thumb2, 
				image_width, 
				image_height, 
				image_type, 
				image_data_size, 
				image_location, 
				description
				)
            values (
				NOW(), 
				'$member', 
				'$image_name', 
				'$thm_name', 
				'$thm_name_2', 
				'$image_width', 
				'$image_height', 
				'$image_type', 
				'$image_data_size', 
				'$image_location', 
				'$description'
				)";

	//print("$query");

   //run the query
     mysql_query($query, $link) or die (mysql_error());

   //close the sql connection.
     mysql_close($link);

   //redirect back to control panel
     header("location: ../index.php?success=addedpic");
	 exit;
  }

else{
	print("ERROR");
}
?>

Tack på förhand!

tydalMedlem sedan juni 20034 013 inlägg
#2

Det är alltså den här raden som inte funkar:
if (is_uploaded_file($item_pic))

Jag antar att det i stället ska stå:

if (is_uploaded_file($_POST['item_pic']))

GuldstrandMedlem sedan juli 20041 271 inlägg
#3

tydal skrev:

Det är alltså den här raden som inte funkar:
if (is_uploaded_file($item_pic))

Jag antar att det i stället ska stå:

if (is_uploaded_file($_POST['item_pic']))

Hjälpte tyvärr inte.
Får fortfarande "ERROR". :(

Såhär ser ivarjefall tabellen ut:

CREATE TABLE `photos` (
  `rec_id` int(7) NOT NULL auto_increment,
  `date_added` date NOT NULL default '0000-00-00',
  `member` varchar(255) NOT NULL default '',
  `photo_file` varchar(255) NOT NULL default '',
  `photo_thumb` varchar(255) NOT NULL default '',
  `photo_thumb2` varchar(255) NOT NULL default '',
  `description` mediumtext NOT NULL,
  `image_width` varchar(255) NOT NULL default '',
  `image_height` varchar(255) NOT NULL default '',
  `image_type` varchar(255) NOT NULL default '',
  `image_data_size` varchar(255) NOT NULL default '',
  `image_location` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`rec_id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
tydalMedlem sedan juni 20034 013 inlägg
#4

Det är fortfarande den raden det blir fel på. Kolla så att input-taggen med file verkligen heter item_pic och att du har enctype="multipart/form-data" på form-taggen.

fiddlerMedlem sedan juli 20023 617 inlägg
#5

Som Tydal påpekar är det något knas med $item_pic. Hur ser koden för uppladdningsformuläret ut?

De fyra första raderna efter <?PHP ser ganska överflödiga ut förresten...

GuldstrandMedlem sedan juli 20041 271 inlägg
#6

tydal skrev:

Det är fortfarande den raden det blir fel på. Kolla så att input-taggen med file verkligen heter item_pic och att du har enctype="multipart/form-data" på form-taggen.

Här är formuläret, och det verkar stämma.

<?php
if(isset($_REQUEST['root_path'])){
	// get the document root - for use on include files	
	$root_path = $_SERVER['DOCUMENT_ROOT'];
}
?>
<!--Begin The Form To Add A Photo To The Gallery -->
<div id="add_photos" class="form"> 
  <form enctype="multipart/form-data" method="post" action="scripts/addphotos.php" id="addphotos_form">
    <fieldset>
    <legend>Add A Photo</legend>
<?php
// include the help file
include("$root_path/adminpanel/includes/helpfiles/help_photos.php");
?>
    <div> 
      <label for="gallery_member">Member:</label>
      <select id="gallery_member" name="member">
        <option value="">Select Member</option>
        <option value="All">Whole Band</option>
<?php
// we need a query to populate the options for the select menu			
$query = "
	SELECT 
		* 
	FROM 
		memberbios 
	ORDER BY 
		rec_id DESC
	";
$result = mysql_query($query);
while ( $row = mysql_fetch_array($result)){
	$name = $row['name'];
	print ("<option value=\"$name\">$name</option>\n");
}
?>
      </select>
    </div>
    <div> 
      <label for="gallery_file">Select A Photo:</label>
      <input type="file" id="gallery_file" name="item_pic" />
    </div>
    <div> 
      <label for="gallery_description">Photo Description:</label>
      <textarea name="description" id="gallery_description" rows="15" cols="30"></textarea>
    </div>
    <div> 
      <input type="submit" name="Submit" value="Submit" />
    </div>
    <div><a href="javascript:show('help_photos');">View Help</a></div>
    </fieldset>
  </form>
</div>
<!--End The Form To Add A Photo To The Gallery -->
tydalMedlem sedan juni 20034 013 inlägg
#7

Just ja, det ska ju vara filnamnet...

if (is_uploaded_file($_FILES['item_pic']['tmp_name'])) {
$image_name = stripslashes($FILES['item_pic']['name']);

GuldstrandMedlem sedan juli 20041 271 inlägg
#8

tydal skrev:

Just ja, det ska ju vara filnamnet...

if (is_uploaded_file($_FILES['item_pic']['tmp_name'])) {
$image_name = stripslashes($FILES['item_pic']['name']);

Uppskattar verkligen hjälpen.

Nu fick jag:

Warning: copy(): Unable to access in /home/kunder/*****/*****/adminpanel/scripts/addphotos.php on line 52
Picture upload failed

Rad 52:

copy($item_pic, $destination) or die("Picture upload failed");
tydalMedlem sedan juni 20034 013 inlägg
#9

Webbservern har inte skrivbehörighet till den katalogen. Om du inte har möjlighet att logga in själv (ssh) och fixa det kan ditt ftp-program ha den möjligheten (typ "permissions" eller nåt). Sätt 777 (rwxrwxrwx) på den katalogen.

GuldstrandMedlem sedan juli 20041 271 inlägg
#10

tydal skrev:

Webbservern har inte skrivbehörighet till den katalogen. Om du inte har möjlighet att logga in själv (ssh) och fixa det kan ditt ftp-program ha den möjligheten (typ "permissions" eller nåt). Sätt 777 (rwxrwxrwx) på den katalogen.

Hmm, ok...
Men katalogen (images) där alla bilder skall sparas, har redan rätt rättigheter (777).

Eller menar du någon annan katalog? :r

tydalMedlem sedan juni 20034 013 inlägg
#11

Byt ut $item_pic mot $_FILES['item_pic']['tmp_name']

GuldstrandMedlem sedan juli 20041 271 inlägg
#12

tydal skrev:

Byt ut $item_pic mot $_FILES['item_pic']['tmp_name']

Var då? :r

tydalMedlem sedan juni 20034 013 inlägg
#13

På raden där det är fel (52).

GuldstrandMedlem sedan juli 20041 271 inlägg
#14

tydal skrev:

På raden där det är fel (52).

Kanon! Nu gick det att ladda upp bilden.
Fast den sparades UTAN filändelse (.jpg). Sparades som "2_" . (utan "")

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
134 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)