Gå til innhold

Problemer med file upload script


Anbefalte innlegg

Hei!

 

Jeg driver å prøver ut et file uploadings script jeg fant på denne siden. Men jeg får en feilmelding når jeg kjører

 

<?php
mysql_connect("sensurert","sensurert","sensurert");
mysql_select_db("upload");
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
$result=MYSQL_QUERY("INSERT INTO uploads (description, data,filename,filesize,filetype) ". "VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
$id= mysql_insert_id();
print "<p>File ID: <b>$id</b><br>";
print "<p>File Name: <b>$form_data_name</b><br>";
print "<p>File Size: <b>$form_data_size</b><br>";
print "<p>File Type: <b>$form_data_type</b><p>";
print "To upload another file <a href=http://www.yoursite.com/yourpage.html> Click Here</a>";
?>

 

Jeg får da opp følgende feilmelding "Warning: fread(): supplied argument is not a valid stream resource in "sensurert" Jeg greier ikke å finne ut av hva som er feil :( Noen som er vilige til å hjelpe?

Lenke til kommentar
Videoannonse
Annonse
Har du definert $form_data?

 

Ja, $form_data blir definert i følgende form

<form method="post" action="upload.php" enctype="multipart/form-data">
Description:<br>
<input type="text" name="form_description" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>

Lenke til kommentar
Se på $_FILES på php.net, står mye der om hvordan man håndterer filopplasting. :)

 

Takk for tipset, men jeg kan ikke riktig skjønne hvorfor $_FILES skulle være til noen hjelp for meg. Så vidt jeg skjønner så ser det ikke ut til å være et problem å lase opp filen, men å lese den og adde den til databasen. Beklager hvis jeg har oversett noe, er ikke veldig bevandret i PHP

Lenke til kommentar

$_FILES brukes til å håndtere sendte filer, akkuratt som $_POST brukes til å håndtere sendt informasjon. Så du må bruke:

$_FILES['form_data'];

 

Jeg har selv aldri brukt metoden du bruker for å opplaste noe, og for meg ser den ikke ut til å kunne fungere, men for all del, kan være jeg tar feil.

 

Edit: Ettersom jeg antar fopen ikke kan åpne filer på klientens maksin uten videre.

Endret av Ozwald
Lenke til kommentar
$_FILES brukes til å håndtere sendte filer, akkuratt som $_POST brukes til å håndtere sendt informasjon. Så du må bruke:

$_FILES['form_data'];

 

Jeg har selv aldri brukt metoden du bruker for å opplaste noe, og for meg ser den ikke ut til å kunne fungere, men for all del, kan være jeg tar feil.

 

Edit: Ettersom jeg antar fopen ikke kan åpne filer på klientens maksin uten videre.

 

Har prøved med $_FILES['form_data'], men kan fortsatt ikke få det til å funke. samme feilmelding som tidligere

Lenke til kommentar
$_FILES brukes til å håndtere sendte filer, akkuratt som $_POST brukes til å håndtere sendt informasjon. Så du må bruke:

$_FILES['form_data'];

 

Jeg har selv aldri brukt metoden du bruker for å opplaste noe, og for meg ser den ikke ut til å kunne fungere, men for all del, kan være jeg tar feil.

 

Edit: Ettersom jeg antar fopen ikke kan åpne filer på klientens maksin uten videre.

 

Har prøved med $_FILES['form_data'], men kan fortsatt ikke få det til å funke. samme feilmelding som tidligere

 

Kanskje du kan se på denne siden ang file upload:

 

http://www.w3schools.com/php/php_file_upload.asp

 

dog, er ikke med mysql men mulig du finner en løsning :p

Lenke til kommentar

etter opplasting blir filen lagt i tmp katalogen på serveren. det er scriptets jobb å hente den derfra å legge den et sted man kan bruke den. eller evenuellt laste inn i en database.

 

$_FILES['form_data']['tmp_name'] vil returnere filens bane og navn på serveren (tror jeg). vertfall det midlertidige filnavnet

 

så bruker man move_uploaded_file() for å flytte den

Lenke til kommentar
etter opplasting blir filen lagt i tmp katalogen på serveren. det er scriptets jobb å hente den derfra å legge den et sted man kan bruke den. eller evenuellt laste inn i en database.

 

$_FILES['form_data']['tmp_name'] vil returnere filens bane og navn på serveren (tror jeg). vertfall det midlertidige filnavnet

 

så bruker man move_uploaded_file() for å flytte den

 

Om du kommenterte til w3schools.com 'guiden' står det lengre nede at den laster opp til tmp, deretter flytter den til upload mappen ;) Er eksempler..

Lenke til kommentar

jeg kommenterte til første posten i denne tråden. tittet ikke på w3schools.

 

det virker som trådstarter antar at verdien fra form_data blir automatisk lagt til en variabel $form_data. noe liknende skjer med get data dersom serveren er instillt på det, men ikke post data etter hva jeg vet.

 

trådstarter prøver å fopen($post_data)

 

jeg tror han kommer litt lenger dersom han gjør fopen($_FILES['form_data']['tmp_name'])

 

og bytt ut $form_data_name med $_FILES['form_data']['filename']

Endret av grimjoey
Lenke til kommentar

Jeg vil gjerne takke for all hjelpen dere har gitt meg, men enda er jeg ikke helt i mål. Jeg har prøvd mye av det dere foreslår men for meg ble det litt for mye info spredt over for mange poster laget av forskjellige personer. Jeg lurer derfor om noen kan ta utgangspunkt i det første scriptet jeg postet, og se om de klarer å finne ut av hva som er galt.

 

Jeg er som sagt en nybegynner innen dette feltet og beklager om jeg har oversett noe, eller om jeg faktisk har fått løsningnen men ikke klart å finne ut av det.

Lenke til kommentar
hvorfor vil du skrive innholdet i filen inn i et felt i databasen?

 

ville det ikke vært bedre å skrive /bane/../filnavn.ext i databasen sammen med info om størrelse osv, og ha filen lagret som en vanlig fil på serveren?

 

Nei det er et godt spørsmål xD

 

Jeg antar det kanskje er lettere å laste opp filen til en mappe, så adde plasseringen av filen pluss id til en mysql database så man kan laste ned filen ved å adde id'en etter download.php?=5 eller noe sånt xD

 

Har dessverre ingen peiling på hvordan dette kan gjøres, og kunne derfor trenge litt hjelp

Lenke til kommentar
jeg tittet på siden du hentet scriptet fra. de nevner ikke $_FILES arrayet. de nevner heller ikke sikkerhet (koden er åpen for sql injection).

 

Er du interesert i å lære php/mysql, eller bare interessert i å få tak i et upload script som funker?

 

Både og :p

 

Akkurat nå trenger jeg bare et fungerende upload script, men ønsker også å lære mer PHP

Lenke til kommentar

<html>
<body>
<?php

$dblink = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('upload') or die(mysql_error());

function q($msg, $dblink) {
if (get_magic_quotes_gpc()) $msg = stripslashes($msg);
$msg = "'".mysql_real_escape_string($msg, $dblink)."'";
return $msg;
}

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

$filesavelocation = 'files'; // plassering av filer

// hindre sql injection
foreach($_POST as $k => $v) {
	if (!is_numeric($v)) $_POST[$k] = q($v, $dblink);
	else $_POST[$k] = (int)$v;
}

$localfilename = $_FILES['userfile']['tmp_name'];
$filename = $_FILES['userfile']['name'];
$filedescription = $_POST['description'];
$filetypearray = explode('.', $filename);
$filetype = $filetypearray[count($filetypearray) - 1];

if(!move_uploaded_file($localfilename,$filesavelocation.'/'.$filename)) die('Fil ikke flyttet '.$localfilename.' '.$filesavelocation.' '.$filename);
$filesize = filesize($filesavelocation.'/'.$filename);
mysql_query('INSERT INTO uploads(description, filename, filesize, filetype) VALUES('.$filedescription.', \''.$filesavelocation.'/'.$filename.'\', '.$filesize.', \''.$filetype.'\');') or die(mysql_error());

$id= mysql_insert_id();
echo '<p>File ID: <b>'.$id.'</b><br />';
echo 'File Name: <b>'.$filename.'</b><br />';
echo 'File Size: <b>'.$filesize.'</b><br />';
echo 'File Type: <b>'.$filetype.'</b><br />';
echo 'File Description: <b>'.$filedescription.'</b><br />';

}

?>
<form enctype="multipart/form-data" action="" method="POST">
<table>
	<input type="hidden" name="MAX_FILE_SIZE" value="1500000" />
	<tr>
		<td>
			<label for="desc">Description:</label>
		</td>
		<td>	
			<input type="text" name="description" id="desc" size="40" />
		</td>
	</tr>
	<tr>
		<td>
			<label for="file">File:</label>
		</td>
		<td>	
			<input type="file" name="userfile" id="file" />
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" name="submit_file" value="Upload" />
		</td>
	</tr>
</table>
</form>
</body>
</html>

endret

Endret av grimjoey
Lenke til kommentar
noe slikt:

<html>
<body>
<?php

function q($msg) {
if (get_magic_quotes_gpc()) $msg = stripslashes($msg);
$msg = "'".mysql_real_escape_string($msg)."'";
return $msg;
}

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

$filesavelocation = 'files'; // plassering av filer

// hindre sql injection
foreach($_POST as $k => $v) {
	if (!is_numeric($v)) $_POST[$k] = q($v);
	else $_POST[$k] = (int)$v;
}

$localfilename = $_FILES['userfile']['tmp_name'];
$filename = $_FILES['userfile']['name'];
$filedescription = $_POST['description'];
$filetypearray = explode('.', $filename);
$filetype = $filetypearray[count($filetypearray) - 1];
if(!move_uploaded_file($localfilename,$filesavelocation.'/'.$filename)) die('Fil ikke flyttet '.$localfilename.' '.$filesavelocation.' '.$filename);
$filesize = filesize($filesavelocation.'/'.$filename);
mysql_query('INSERT INTO uploads(description, filename, filesize, filetype) VALUES('.$filedescription.', '.$filesavelocation.'/'.$filename.', '.$filesize.', '.$filetype.');');

$id= mysql_insert_id();
echo '<p>File ID: <b>'.$id.'</b><br />';
echo 'File Name: <b>'.$filename.'</b><br />';
echo 'File Size: <b>'.$filesize.'</b><br />';
echo 'File Type: <b>'.$filetype.'</b><br />';
echo 'File Description: <b>'.$filedescription.'</b><br />';

}

?>
<form enctype="multipart/form-data" action="" method="POST">
<table>
	<input type="hidden" name="MAX_FILE_SIZE" value="150000" />
	<tr>
		<td>
			<label for="desc">Description:</label>
		</td>
		<td>	
			<input type="text" name="description" id="desc" size="40" />
		</td>
	</tr>
	<tr>
		<td>
			<label for="file">File:</label>
		</td>
		<td>	
			<input type="file" name="userfile" id="file" />
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" name="submit_file" value="Upload" />
		</td>
	</tr>
</table>
</form>
</body>
</html>

 

husk å lage tabellen til databasen først.

 

og det kan hende du får problemer med rettigheter i filsystemet. den tid den sorg

 

Tusen hjertelig takk!

 

Jeg skal prøve det ut i morgen

Lenke til kommentar
og du må legge til databasetilkoblingen i starten etter <?php

 

Ja jeg så at det manglet når jeg gikk igjennom koden :p

Jeg har et lite problem med scriptet, av en eller annen rar grunn så blir ingen info tilføyd databasen. Jeg har lagt til databasetilkoblings settings, og jeg får heller ingen feilmelding. Kort sagt så er det hele litt rart.

 

Noen som kan se hvor det går galt?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...