Maibericht opslaan in databse

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen Jansen

Jeroen Jansen

17/11/2014 15:50:22
Quote Anchor link
Voor een documentsysteem geef ik de gebruiker de mogelijkheid om bij een project een aantal bestanden op te slaan. Voor PDF-, Word- en tekst-bestanden gaat het met onderstaand code goed:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

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

 $insertSQL = "INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_KDR, DOCUMENT_BESTANDSNAAM, DOCUMENT_TYPE, DOCUMENT_GROOTTE, DOCUMENT_BESTAND, DOCUMENT_DATUM) ".
         "VALUES (DOCUMENT_SEQ.NEXTVAL, :kdr_id, :bestandsnaam, :bestandstype, :bestandsgrootte, :bestand, :datum_document)";
 $stmt_insert = oci_parse ($con_oracle, $insertSQL);
 oci_bind_by_name($stmt_insert, ':kdr_id', $_POST['kdr_id']);
 oci_bind_by_name($stmt_insert, ':bestandsnaam', $_FILES['userfile']['name']);
 oci_bind_by_name($stmt_insert, ':bestandstype', $_FILES['userfile']['type']);
 oci_bind_by_name($stmt_insert, ':bestandsgrootte', $_FILES['userfile']['size']);
 oci_bind_by_name($stmt_insert, ':bestand', $content);
 oci_bind_by_name($stmt_insert, ':datum_document', $_POST['datum_document']);
 oci_execute($stmt_insert);


Het tonen van de bestanden doe ik via de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$document_id = $_GET['doc_id'];
$sql_overzicht  = "SELECT   DOCUMENT_BESTANDSNAAM, ";
$sql_overzicht .= "         DOCUMENT_TYPE, ";
$sql_overzicht .= "         DOCUMENT_GROOTTE, ";
$sql_overzicht .= "         DOCUMENT_BESTAND ";
$sql_overzicht .= "FROM     DOCUMENT ";
$sql_overzicht .= "WHERE    DOCUMENT_ID = :document";
$stmt_overzicht = oci_parse ($con_oracle, $sql_overzicht);
oci_bind_by_name($stmt_overzicht, ':document', $document_id);
oci_execute ($stmt_overzicht);
while ($row = oci_fetch_array ($stmt_overzicht, OCI_ASSOC)) {
header("Content-length:".$row['DOCUMENT_GROOTTE']);
header("Content-type:".$row['DOCUMENT_TYPE']);
header("Content-Disposition: attachment; filename=\"".$row['DOCUMENT_BESTANDSNAAM']."\"");
echo($row['DOCUMENT_BESTAND']);
}


Bij het opvragen van de mail (msg) gaat het fout. ik krijg dan de volgende foutmelding:
'Cannot open file <bestandsnaam>. The file may not exist, you may not have permission to open it, or it may be open in another program. Right-click the folder that contains the file, and then click Properties to check your permissions for the folder.'

Het originele bestand en het gedownloade bestand hebben wel dezelfde grootte, maar ik kan de gedownloade mail niet meer lezen.

Heeft iemand een idee hoe dit op te lossen?
 
PHP hulp

PHP hulp

24/11/2024 11:36:21
 
Jeroen Jansen

Jeroen Jansen

19/11/2014 10:42:18
Quote Anchor link
Iemand een suggestie hoe ik de mail-bestanden kan ophalen uit de database? De tekstbestanden, afbeeldingen en word-documenten gaan met bovenstaande optie wel goed.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/11/2014 14:47:10
Quote Anchor link
Ik ben dan wel benieuwd hoe je de mails IN de database zet en wellicht kun je een voorbeeld van een record laten zien.

enkele kleine opmerkingen aan de hand van je tweede stukje code:
- Als je maximaal enkel 1 record verwacht, waarom vervang je die while dan niet voor een if?
- Gebruik liever oci_fetch_assoc() in plaats van oci_fetch_array(). Die laatste stopt namelijk alle rijen twee keer in het geheugen, 1x als nummerieke array en 1x als associatieve array. Dit is een beetje zonde van je resources en met name juist als je complete bestanden uit je database gaat trekken.
 
Jeroen Jansen

Jeroen Jansen

19/11/2014 15:07:13
Quote Anchor link
Het toevoegen gebeurd in het bovenste code-blok.
Ik kan nu niet bij de database en kan je daarom geen voorbeeld geven van een record.
Je andere twee opmerkingen zal ik nog doorvoeren in de code.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.