Maibericht opslaan in databse
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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']);
}
$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?
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.
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.
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.