Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 440
Hei,

jeg generer en HTMLfil, som jeg så ønsker å flytte til databasen.

Jeg klarer å laste opp opp filer til databasen ved å bruke forms som vist under. Men når filen allerede eksisterer klarer jeg ikke å bruke den, for jeg vet ikke hvordan jeg kan sette

Kode

$_FILES['userfile']['name'];
til en fil jeg allerede har.

Det er en .html fil som ligger i en mappe jeg ønsker å flytte til database, om det skal ha noen betydning.
Jeg ønsker også at prossessen skal foregå uten at man trenger å trykke på knapper.

Mulig jeg var vanskelig å forstå, men hadde vært supert med litt hjelp




Kode

<form method="post" enctype="multipart/form-data">
  <input type="hidden" name="MAX_FILE_SIZE" value="20000000000">
    <input name="userfile" type="file" upid="userfile" />
<input name="upload" type="submit" class="box" upid="upload" value="Last opp" /></td>
og

Kode

$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$opplaster = $_POST['opplaster'];
$dato = 	$_POST['dato'];
$versjon = 	$_POST['versjon'];
$beskrivelse = $_POST['beskrivelse'];
$kategori=$_POST['kategori'];


$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

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

include 'script/connect.php';

$query = "INSERT INTO upload (name, size, type, content, opplaster, dato, versjon, beskrivelse, kategori ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content', '$opplaster', '$dato', '$versjon', '$beskrivelse', '$kategori')";

mysql_query($query) or die('Feilmelding: spørringsfeil');
Sist endret av fredrikweb; 3. februar 2009 kl. 16:26.
Flytte filen til databasen? Det går ikke å flytte en fil til en database. Det ser heller ut som du ønsker å kopiere innholdet i filen til databasen?

tmp_name returnerer ikke selve filen, men navnet på en tmp-fil som lagres en plass på serveren din. Når du klikker på "Last opp" så lastes filen din opp til serveren din i en egen mappe for midlertidlige filer, med et random navn med filendelse .tmp (om jeg ikke tar helt feil...?). Du må derfor se på move_uploaded_file() og flytte denne tmp-filen til en egen mappe før du kan behandle den.
Jeg har allerede generert filen, så det ligger nå en fil i en mappe, som jeg nå ønsker å laste videre opp til en database. Altså, jeg vil legge selve filen inn i databasen.

Tidligere har jeg bare brukt forms til å gjøre dette, men nå ønsker jeg at dette skal skje automatisk med en fil som allerede ligger på serveren. Eneste forskjellen er vel egentlig hvor "sourcen" er.. Men jeg vet ikke hvordan jeg skal definere sourcen i et sånt script.
Sitat av fredrikweb Vis innlegg
Altså, jeg vil legge selve filen inn i databasen.
Vis hele sitatet...
Du kan ikke legge selve filen i datasen, det går ikke. Du kan hente ut relevant info fra filen og legge det inn slik: (Bytt ut echo med mysql_query da jeg ønsket teste dette uten å koble til en database)

Kode

<?php
$source = 'check.php';

$info = pathinfo($source);

echo( sprintf (
		"INSERT INTO upload (name, size, type, content) VALUES ('%s', %d, '%s', '%s')", 
		basename($source),
		filesize($source),
		$info['extension'],
		addslashes(file_get_contents($source))
	) 
);
?>
Liten korreksjon på koden til ma10as:

Kode

<?php 
$source = 'check.php'; 

$info = pathinfo($source); 

$res = mysql_query ( sprintf ( 
        "INSERT INTO upload (name, size, type, content) VALUES (%s, %d, %s, %s)",  
        quote_smart (basename($source)), 
        filesize($source), 
        quote_smart ($info['extension']), 
        quote_smart (file_get_contents($source)) 
    )  
); 

/**
 * New version of quote_smart handling null values
 * and locales with comma as decimal separator.
 *
 * Based on quote_smart function from php.net.
 *
 * @author Ketil Stadskleiv <ks@akkreditering.net>
 * @param mixed $value
 * @return mixed
 */
function quote_smart ($value) {
	//Change decimal values from , to . if applicable
	if (is_numeric ($value) && strpos ($value, ',') !== false) {
		$value = str_replace (',', '.', $value);
	}

	if (is_null ($value)) {
		return 'NULL';
	}

	if (!is_numeric ($value)) {
		// Quote if not integer or null
		return "'" . mysql_real_escape_string ($value) . "'";
	}

	// Return unquoted, but escaped, string.
	if (!is_numeric ($value)) {
		return mysql_real_escape_string ($value);
	}

	return $value;
}

?>
addslashes() skal ikke brukes på MySQL-spørringer, da denne slipper gjennom en meta character som kan føre til SQL-injections. Samt at en må huske på å escape alt av data som skal brukes i en spørring, da spesielt bruker-generert data. filesize() returnerer bestandig en int (heltall) derfor trenger man ikke å escape den, mens de tre andre funksjonene returnerer strengverdier hentet ut i fra filnavnet brukeren skrev.
Sist endret av FagSoft; 3. februar 2009 kl. 20:34.