sql result in email

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yannick Bogaert

Yannick Bogaert

09/02/2015 12:58:05
Quote Anchor link
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:
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
20
21
22
23
24
"
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:
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
20
21
22
23
24
<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
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 09/02/2015 13:02:50 door - Ariën -
 
PHP hulp

PHP hulp

24/11/2024 16:07:27
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 13:02:03
Quote Anchor link
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.
Gewijzigd op 09/02/2015 13:04:09 door - Ariën -
 
Yannick Bogaert

Yannick Bogaert

09/02/2015 13:03:53
Quote Anchor link
@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?
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 13:05:31
Quote Anchor link
Ik heb de functie voor de foutafhandeling voor Oracle-queries gevonden, zie mijne dit.
Welke foutmeldingen krijg je precies over die quotes?
 
- SanThe -

- SanThe -

09/02/2015 13:07:37
Quote Anchor link
Ik zie nergens een $body.
 
Yannick Bogaert

Yannick Bogaert

09/02/2015 13:16:32
Quote Anchor link
@SanThe:
de body is dan:

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
20
21
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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 :-(
Gewijzigd op 09/02/2015 13:27:17 door Yannick Bogaert
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 13:20:06
Quote Anchor link
Je kan dan [code] en [/code] tags gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$variabele
= "variabele";
$tekst = "Dit is een tekst, met een ".$variabele;
?>
Gewijzigd op 09/02/2015 13:23:05 door - Ariën -
 
Yannick Bogaert

Yannick Bogaert

09/02/2015 13:32:25
Quote Anchor link
@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?

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
20
21
<?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>"

?>
Gewijzigd op 09/02/2015 13:33:07 door Yannick Bogaert
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 13:35:31
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$body
= '<h2>DAILY OPS REPORT '.$datum.':<br>....etc.....';
?>
 
- SanThe -

- SanThe -

09/02/2015 13:35:35
Quote Anchor link
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
20
21
<?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>';
?>
 
Yannick Bogaert

Yannick Bogaert

09/02/2015 13:44:46
Quote Anchor link
@SanThe & Aar: dus dit is dan de volledige code maar toch doet hij het niet:

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?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();
}



?>
Gewijzigd op 09/02/2015 13:45:19 door Yannick Bogaert
 
- Ariën  -
Beheerder

- Ariën -

09/02/2015 13:46:46
Quote Anchor link
Waarom regel 88 en verder met mysql? Je gebruikt toch Oracle?
 
- SanThe -

- SanThe -

09/02/2015 13:51:13
Quote Anchor link
Regel 62 echo"$body"; kan weg.

Zet deze regel ook eens bovenin:
ini_set('display_errors', 1);
Gewijzigd op 09/02/2015 13:51:34 door - SanThe -
 
Yannick Bogaert

Yannick Bogaert

09/02/2015 13:51:16
Quote Anchor link
@Aar : de e-mailadressen komen uit een mysql database, ik zie wel dat ik de connectie vergeten was te melden
omdat die standaard in de index.php staat.
 
Thomas van den Heuvel

Thomas van den Heuvel

09/02/2015 13:55:08
Quote Anchor link
Waarschijnlijk verschillende databases?

Maar dat is wel een interessant gegeven, errors in MySQL worden onderdrukt, dus wellicht zit daar de fout, wat als gevolg heeft dat het mailen ook niet lekker loopt.

Zorg er eerst eens voor dat je je probleem isoleert. Waar zit dit? In het Oracle gedeelte? In het MySQL gedeelte? In het vervolgens mailen?

Error reporting staat al aan in het bovenstaande script zie ik.

Begin maar eens met het dumpen van data naar je scherm om te zien waar de boel vastloopt.

EDIT: En wat SanThe zegt. Zorg dat foutmeldingen ook getoond worden.
Gewijzigd op 09/02/2015 13:56:24 door Thomas van den Heuvel
 
Yannick Bogaert

Yannick Bogaert

09/02/2015 13:55:14
Quote Anchor link
@SanThe & Aar: probleem opgelost met de ini_set('display_errors', 1); ../ en de fout was opgelost want lag dat hij require("scripts/class.phpmailer.php"); niet vond. Thanks voor de hulp!
 



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.