automatisch email verzenden naar een query fout.
hoe kan ik ervoor zorgen, dat als er een query mislukt
dat er automatisch een email wordt verstuurd, met de fout.
Met vriendelijke groet Thomas de vries.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$insert="INSERT INTO jouwdatabase (id,naam,etc) VALUES ('','$naam','$etc')";
$bool=mysql_query(insert);
if($bool==1){
echo = 'query gelukt!';
}
if($bool<>1){
echo = 'query niet gelukt. Er is een e-mail naar de webmaster verstuurd';
/* hier bouw je de mail funtie in. Het is wel handig daar een fout afhandeling in te bouwen met:
- query niet gelukt, email verzonden
- query niet gelukt, email niet verzonden
*/
}
?>
$insert="INSERT INTO jouwdatabase (id,naam,etc) VALUES ('','$naam','$etc')";
$bool=mysql_query(insert);
if($bool==1){
echo = 'query gelukt!';
}
if($bool<>1){
echo = 'query niet gelukt. Er is een e-mail naar de webmaster verstuurd';
/* hier bouw je de mail funtie in. Het is wel handig daar een fout afhandeling in te bouwen met:
- query niet gelukt, email verzonden
- query niet gelukt, email niet verzonden
*/
}
?>
mysql_query geeft terug:
een resource indien het sql statement gelukt is
false indien er een fout opgetreden is
dus dan kom je eerder uit op:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = "............";
if (($result = mysql_query($Sql)) === false) {
// er is iets fout gegaan
echo mysql_error();
else {
// doe je ding
}
?>
$sql = "............";
if (($result = mysql_query($Sql)) === false) {
// er is iets fout gegaan
echo mysql_error();
else {
// doe je ding
}
?>
en dan toch maar zeiken over :
$insert="INSERT INTO jouwdatabase (id,naam,etc) VALUES ('','$naam','$etc')";
het is te belachelijk voor woorden dat er voor het id een '' wordt gegeven.
het dient dan op zijn minst te zijn NULL of je laat het helemaal weg.
Voor het mailen kan je een mailclass pakken:
PHP Mialer
Swift Mialer
of je gebruikt op de juiste wijze:
http://www.php.net/mail
Gewijzigd op 10/07/2010 11:35:19 door Noppes Homeland
$bool==1 -> TRUE als $bool naar TRUE kan worden geëvalueerd.
Nee, $bool is in dit geval false of een resource dus dat kan zich nooit evaleren naar 1 dan wel true.
in config.php heb ik dit staan
Code (php)
1
2
3
4
2
3
4
<?php
$mail = "[email protected]";
$fout = mail($mail,"The-blaat bug report","Er is een fout gevonden ".mysql_error()."","From: The-blaat<[email protected]>\n");
?>
$mail = "[email protected]";
$fout = mail($mail,"The-blaat bug report","Er is een fout gevonden ".mysql_error()."","From: The-blaat<[email protected]>\n");
?>
En in mijn index
Heb de query extra fout gemaakt om te testen.
Maar nu stuurt ie wel de mail maar niet de foutmelding mee.
hoe kan ik dit toch voor elkaar krijgen
nog maar een keer dan:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = "............";
if (($result = mysql_query($Sql)) === false) {
// er is iets fout gegaan
echo mysql_error();
else {
// doe je ding
}
?>
$sql = "............";
if (($result = mysql_query($Sql)) === false) {
// er is iets fout gegaan
echo mysql_error();
else {
// doe je ding
}
?>
is toch in feite korter zit met +/- 100 queries waar ik elke keer dus die extra regels bij moet doen. kan dat niet korter?
Alvast bedankt.
100 queries, wel ik denk dat overdrijven ook een vak is... je kan het afdoen met 1 method en dat refereerd aan OOP.
Straks gaat de mailserver klagen dat je een spammer bent :P
maar goed ik zal is kijken of ik het toch korter kan maken.
@noppes met een or die kun je ook tekst toevoegen bijna zelfde effect als die van jou.
want daar stopt het script ook met functioneren.
dus laat je een tekst zien.
bij voorbeeld
mysql_query("SELECT blaat FROM blaat1") or die ($fout);
de foutmelding is dan
Er is iets fouts gegaan neem contact op met de Site beheerder.
Maar nogmaals zal is kijken wat ik kan doen.
en 100 queries is zo gek nog niet als je een MMORPG maakt.
Wel dan heb je duidelijk niet goed nagedacht en zal je vaak 2 of 3 queries teveel afvuren als je het er met 1 af kan doen.
Code (php)
1
2
3
2
3
<?php
$fout = mail($mail,"The-blaat bug report","Er is een fout gevonden ".mysql_error()."","From: The-blaat<[email protected]>\n");
?>
$fout = mail($mail,"The-blaat bug report","Er is een fout gevonden ".mysql_error()."","From: The-blaat<[email protected]>\n");
?>
Bij deze regel zal php direct proberen om een mail te versturen. En wat denk je dat er in $fout zit. Juist, een TRUE of een FALSE.
Dus:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// Controleer of de query gelukt is
if(!$result) mailWrongQuery( "[email protected]", mysql_error() );
// De functie
function mailWrongQuery( $emailadres, $error )
{
mail($emailadres, "Wrong query", "De volgende fout werd opgegeven: ".$error);
}
// Controleer of de query gelukt is
if(!$result) mailWrongQuery( "[email protected]", mysql_error() );
// De functie
function mailWrongQuery( $emailadres, $error )
{
mail($emailadres, "Wrong query", "De volgende fout werd opgegeven: ".$error);
}
kijken of dit sneller en makkelijker is.
Het volgende probleem is dat als er nu wel of geen fout is een mail wordt verzonden.
en ik wil graag dat als er een fout optreedt het dan wordt verzonden.
Ik plaats dus hier ook de code waar het omgaat.
Code (php)
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
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
table cellpadding="2" cellspacing="2" width="95%" class="mod_list">
<tr>
<td class="mod_list" align="center">#</td>
<td class="mod_list" align="left"><b>Onderwerp</b></td>
<td class="mod_list" align="left"><b>Auteur</b></td>
<td class="mod_list"></td>
<td class="mod_list" align="center"><b>Datum</b></td>
</tr>
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$sql = "SELECT * FROM news1 ORDER BY Datum DESC LIMIT 5";
if(!$result = $mysqli->query($sql))
{
trigger_error('Fout in query:');
mail($mail,"The-heist bug report","Er is een fout gevonden ".$mysqli->error()."","From: The-heist <[email protected]>\n");
}
else
{
$count = $result->num_rows;
if($count == 0)
{
echo '<tr><td class="menuLink" colspan="7">Er zijn geen nieuws items</td></tr>';
}
else
{
while ($row = $result->fetch_assoc)
{
?>
<tr>
<td class="mod_list" align="center"><img src="images/icons_gif/folder.gif" alt="Nieuwsbericht"></td>
<td class="mod_list" align="left"><a href="viewtopic.php?f=8&t=<?php echo $row['Titel']; ?>"><? echo $row['Titel']; ?></a></td>
<td class="mod_list" align="left"><a href="index.php?a=profile&x=<?php echo $row['Auteur']; ?>"><font color='red'><?php echo $row['Auteur']; ?></font></a></td>
<td class="mod_list" align="center"><img src="images/icons_gif/time.gif" border="0px"></td>
<td class="mod_list" align="center"><?php echo $row['Datum']; ?></td>
</tr>
<?php
}
}
echo '</table>';
}
?>
<tr>
<td class="mod_list" align="center">#</td>
<td class="mod_list" align="left"><b>Onderwerp</b></td>
<td class="mod_list" align="left"><b>Auteur</b></td>
<td class="mod_list"></td>
<td class="mod_list" align="center"><b>Datum</b></td>
</tr>
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$sql = "SELECT * FROM news1 ORDER BY Datum DESC LIMIT 5";
if(!$result = $mysqli->query($sql))
{
trigger_error('Fout in query:');
mail($mail,"The-heist bug report","Er is een fout gevonden ".$mysqli->error()."","From: The-heist <[email protected]>\n");
}
else
{
$count = $result->num_rows;
if($count == 0)
{
echo '<tr><td class="menuLink" colspan="7">Er zijn geen nieuws items</td></tr>';
}
else
{
while ($row = $result->fetch_assoc)
{
?>
<tr>
<td class="mod_list" align="center"><img src="images/icons_gif/folder.gif" alt="Nieuwsbericht"></td>
<td class="mod_list" align="left"><a href="viewtopic.php?f=8&t=<?php echo $row['Titel']; ?>"><? echo $row['Titel']; ?></a></td>
<td class="mod_list" align="left"><a href="index.php?a=profile&x=<?php echo $row['Auteur']; ?>"><font color='red'><?php echo $row['Auteur']; ?></font></a></td>
<td class="mod_list" align="center"><img src="images/icons_gif/time.gif" border="0px"></td>
<td class="mod_list" align="center"><?php echo $row['Datum']; ?></td>
</tr>
<?php
}
}
echo '</table>';
}
?>
Krijg de volgende melding nu
Notice: Fout in query: in home.php on line 16
Fatal error: Call to undefined method mysqli::error() in home.php on line 17
Probleem opgelost had dit
mail($mail,"The-heist bug report","Er is een fout gevonden ".$mysqli->error()."","From: The-heist <[email protected]>\n");
ipv dit
mail($mail,"The-heist bug report","Er is een fout gevonden ".$mysqli->error."","From: The-heist <[email protected]>\n");
Na die $mysqli->error de 2 haakjes weglaten. zat nog met mysql_error() in de maag.
en dat gepost tijdens de wedstrijd... echt fanatiek in de PHP
Gewijzigd op 11/07/2010 23:10:56 door Tobias Tobias