Hallo allemaal,

het is my gelukt om connectie te maken met een Oracle database en de resultaten
mooi weer te geven in html. Nu moet ik echter er ook voor zorgen dat deze resultaten
ook gemaild kunnen worden.

Daar loopt het echter een beetje vast ik gebruik phpmailer maar van zodra ik
iets in de $body zet wil de php niet meer parsen. Ik krijg ook geen foutmeldingen
en error reporting staat op E_ALL.

Kan er mij iemand zeggen waar ik fout zit?

de SQL code:

"
SELECT 
FLT_LFC_ID||' ('||LFC_NAME||')' \"Operator\",LFT_LABEL \"Type of flight\",NVL(OPR,0) \"Operated\",NVL(CNL,0) \"Cancelled\"
FROM
	(SELECT DISTINCT FLT_LFC_ID,FLT_LFT_ID FROM MASTER.FLIGHTS WHERE TRUNC(FLT_COM_DEP_BLK) = '$newdatum' ) T0 
LEFT OUTER JOIN
(
SELECT FLT_LFC_ID LFC_ID1,FLT_LFT_ID LFT_ID1,COUNT(*) OPR FROM MASTER.FLIGHTS WHERE FLT_LFS_ID=100 AND TRUNC(FLT_COM_DEP_BLK) = '$newdatum'
GROUP BY FLT_LFC_ID,FLT_LFT_ID
) 
T1 ON (FLT_LFC_ID=T1.LFC_ID1 AND FLT_LFT_ID=LFT_ID1)
LEFT OUTER JOIN
(
SELECT FLT_LFC_ID LFC_ID2,FLT_LFT_ID LFT_ID2,COUNT(*) CNL FROM MASTER.FLIGHTS  INNER JOIN MASTER.FLT_PAX ON FLT_ID=FPX_FLT_ID 
WHERE FLT_LFS_ID=999 AND FPX_Y_BOOKED+FPX_C_BOOKED+FPX_F_BOOKED>0 AND TRUNC(FLT_COM_DEP_BLK) = '$newdatum'
GROUP BY FLT_LFC_ID,FLT_LFT_ID
) T2 ON (FLT_LFC_ID=T2.LFC_ID2 AND FLT_LFT_ID=T2.LFT_ID2 )
INNER JOIN MASTER.LIST_FLT_TYPES ON FLT_LFT_ID=LFT_ID 
INNER JOIN MASTER.LIST_FLT_COMPANIES ON FLT_LFC_ID=LFC_ID
WHERE NVL(OPR,0)+NVL(CNL,0)>0 ORDER BY 1,2

");
	
oci_execute($SUM);


Dit werk zonder problemen maar hoe krijg ik het in de $body, de "gewone php code" om et in html weer te geven is als volgt:

<html>
<h2>DAILY OPS REPORT <?php echo"$datum" ?>:<br>
  <br>
  Summary
</h2>
<table class="curvedEdges" width="600" border="0" cellpadding="10">
  <tr>
    <td width="200"><strong>Carrier:</strong></td>
    <td width="100"><strong>Type:</strong></td>
    <td width="100"><strong>Operated:</strong></td>
    <td width="100"><strong>Cancelled:</strong></td>
  </tr>
  <?php 
  while ($row = oci_fetch_array($SUM, OCI_ASSOC+OCI_RETURN_NULLS)) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
};
?>
</table>
</body>
</html>


thanks alvast.

Yannick
Yannick Bogaert op 09/02/2015 12:58:05

Ik krijg ook geen foutmeldingen
en error reporting staat op E_ALL.

Kan er mij iemand zeggen waar ik fout zit?

Dan zou ik eerder denken aan foutafhandeling. Kijk eens naar: oci_error(). Deze geeft de laatste error terug.
@AAR: van zodra ik in de $body zet (phpmailer) stopt het werken, natuurlijk krijg ik een hoop foutmeldingen op de quotes dus ik vermoed dat het daar ergens zit, maar hoe kan ik dit oplossen?
Ik heb de functie voor de foutafhandeling voor Oracle-queries gevonden, zie mijne dit.
Welke foutmeldingen krijg je precies over die quotes?
Ik zie nergens een $body.
@SanThe:
de body is dan:

<?php
$body" = <h2>DAILY OPS REPORT "$datum" :<br>
<br>
Summary
</h2>
<table class="curvedEdges" width="600" border="0" cellpadding="10">
<tr>
<td width="200"><strong>Carrier:</strong></td>
<td width="100"><strong>Type:</strong></td>
<td width="100"><strong>Operated:</strong></td>
<td width="100"><strong>Cancelled:</strong></td>
</tr>
while ($row = oci_fetch_array($SUM, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
}
echo "</tr>\n";
};
</table>
?>

En dan komen dus de fouten op de quotes.

@Aar: thanks voor de tip met de code tags, de fouten op de quotes zijn gewoon Dreamweaver die syntax errors geeft.

Voor de oci error codes had ik dit al aangegeven in de connectie:

<?php
$conn = oci_connect('XXX', 'XXX', 'XXX');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
?>


Ps: excuses want ik krijg het niet in een mooie format met de code tags. Waarschijnlijk doe ik iets fout :-(
Je kan dan [code] en [/code] tags gebruiken.


<php?
$body" = <h2>DAILY OPS REPORT "$datum" ?>:<br>
<br>

Dit gaat niet werken. Het is <?php, en verder hoor HTML tussen quotes, en variabelen bij voorkeur juist niet:


<?php
$variabele = "variabele";
$tekst = "Dit is een tekst, met een ".$variabele;
?>
@Aar: de php? was een typo van mezelf...
Hoe zou dit dan voor mij er moeten uitzien want jouw voorbeeld spreek over
1 variabele natuurlijk terwijl het bij mij een result van een query is?

<?php
$body" = <h2>DAILY OPS REPORT "$datum" :<br>
<br>
Summary
</h2>
<table class="curvedEdges" width="600" border="0" cellpadding="10">
<tr>
<td width="200"><strong>Carrier:</strong></td>
<td width="100"><strong>Type:</strong></td>
<td width="100"><strong>Operated:</strong></td>
<td width="100"><strong>Cancelled:</strong></td>
</tr>
while ($row = oci_fetch_array($SUM, OCI_ASSOC+OCI_RETURN_NULLS)) {
"<tr>\n";
foreach ($row as $item) {
" <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
}
"</tr>\n";
};
</table>"
?>
Kijk eens naar regel twee, en mijn stukje code.
Je plaatst de quotes verkeerd, je moet pas na je = beginnen, en twee punten om je variabele $datum plaatsen.
Omdat je in je HTML zelf double-quotes gebruikt, raad ik aan om in PHP een single-quote te gebruiken.

<?php
$body = '<h2>DAILY OPS REPORT '.$datum.':<br>....etc.....';
?>
<?php
$body = '<h2>DAILY OPS REPORT '.$datum.' :<br>
<br>
Summary
</h2>
<table class="curvedEdges" width="600" border="0" cellpadding="10">
<tr>
<td width="200"><strong>Carrier:</strong></td>
<td width="100"><strong>Type:</strong></td>
<td width="100"><strong>Operated:</strong></td>
<td width="100"><strong>Cancelled:</strong></td>
</tr>';
while ($row = oci_fetch_array($SUM, OCI_ASSOC+OCI_RETURN_NULLS)) {
$body .= "<tr>\n";
foreach ($row as $item) {
$body .= " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
}
$body .= "</tr>\n";
};
$body .= '</table>';
?>
@SanThe & Aar: dus dit is dan de volledige code maar toch doet hij het niet:

<?php

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

require("scripts/class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->Host = "2.0.0.0";
$mail->SMTPAuth = true;
$mail->Username = "ADMIN\xxx";
$mail->Password = "xxx"; $mail->Port = "xxx";
$mail->SMTPDebug = 0;

$mail->From = "xxx";
$mail->FromName = "xxx";
$mail->AddReplyTo("xxx", "xxx");

$mail->WordWrap = 50;
$mail->IsHTML(false);


$datum = date('Y-m-d', time() + 24 * 60 * 60);
$orginaldatum = $datum;
$newdatum = date("d-M-Y", strtotime($orginaldatum));

$aadatum = date("d-M-Y");

$conn = oci_connect('xx', 'xx', 'xx');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$SUM = oci_parse($conn,
"
SELECT
FLT_LFC_ID||' ('||LFC_NAME||')' \"Operator\",LFT_LABEL \"Type of flight\",NVL(OPR,0) \"Operated\",NVL(CNL,0) \"Cancelled\"
FROM
(SELECT DISTINCT FLT_LFC_ID,FLT_LFT_ID FROM MASTER.FLIGHTS WHERE TRUNC(FLT_COM_DEP_BLK) = '$newdatum' ) T0
LEFT OUTER JOIN
(
SELECT FLT_LFC_ID LFC_ID1,FLT_LFT_ID LFT_ID1,COUNT(*) OPR FROM MASTER.FLIGHTS WHERE FLT_LFS_ID=100 AND TRUNC(FLT_COM_DEP_BLK) = '$newdatum'
GROUP BY FLT_LFC_ID,FLT_LFT_ID
)
T1 ON (FLT_LFC_ID=T1.LFC_ID1 AND FLT_LFT_ID=LFT_ID1)
LEFT OUTER JOIN
(
SELECT FLT_LFC_ID LFC_ID2,FLT_LFT_ID LFT_ID2,COUNT(*) CNL FROM MASTER.FLIGHTS INNER JOIN MASTER.FLT_PAX ON FLT_ID=FPX_FLT_ID
WHERE FLT_LFS_ID=999 AND FPX_Y_BOOKED+FPX_C_BOOKED+FPX_F_BOOKED>0 AND TRUNC(FLT_COM_DEP_BLK) = '$newdatum'
GROUP BY FLT_LFC_ID,FLT_LFT_ID
) T2 ON (FLT_LFC_ID=T2.LFC_ID2 AND FLT_LFT_ID=T2.LFT_ID2 )
INNER JOIN MASTER.LIST_FLT_TYPES ON FLT_LFT_ID=LFT_ID
INNER JOIN MASTER.LIST_FLT_COMPANIES ON FLT_LFC_ID=LFC_ID
WHERE NVL(OPR,0)+NVL(CNL,0)>0 ORDER BY 1,2

");

oci_execute($SUM);

$body = '<h2>DAILY OPS REPORT '.$datum.' :<br>
<br>
Summary
</h2>
<table class="curvedEdges" width="600" border="0" cellpadding="10">
<tr>
<td width="200"><strong>Carrier:</strong></td>
<td width="100"><strong>Type:</strong></td>
<td width="100"><strong>Operated:</strong></td>
<td width="100"><strong>Cancelled:</strong></td>
</tr>';
while ($row = oci_fetch_array($SUM, OCI_ASSOC+OCI_RETURN_NULLS)) {
$body .= "<tr>\n";
foreach ($row as $item) {
$body .= " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
}
$body .= "</tr>\n";
};
$body .= '</table>';



$mail->Subject = "Summary";

$query = "SELECT * FROM `email` WHERE `test` ='1'";
$result = @MYSQL_QUERY($query);

while ($row = mysql_fetch_array ($result)) {
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML($body);
$mail->AddAddress($row["emailadres"], $row["fullname"]);

if(!$mail->Send()) {
echo "Mailer Error (" . str_replace("@", "&#64;", $row["emailadres"]) . ') ' . $mail->ErrorInfo . '<br>';
} else {
echo "Message sent to :" . $row["fullname"] . ' (' . str_replace("@", "&#64;", $row["emailadres"]) . ')<br>';
}
$mail->ClearAddresses();
$mail->ClearAttachments();
}


?>

Reageren