automatisch email verzenden naar een query fout.
Goedendag ik heb een vraag
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.
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.
Ik gebruik volgens mij al een wat oudere manier maar werkt wel:
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
*/
}
?>
Ik wil niet veel schrijven maar aan dat stukje code deugt niet veel...
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:
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
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.
Oke ik heb nu dit zal wel niet goed zijn, want doet ook niet wat ie moet doen.
in config.php heb ik dit staan
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
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
Hoe vaak moet het nu nog geschreven worden dat je or die() niet moet gebruiken!!
nog maar een keer dan:
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
}
?>
ke wat is er verkeerd met een or die?
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.
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.
Je leest totaal niet wat er gepost wordt. or die() is het wegbrengen van je bezoekers naar het kerkhof en dat wil je dus echt niet. Als een query mislukt dien je een alternatief er voor te hebben en dat bereik je alleen door correcte foutafhandeling.
100 queries, wel ik denk dat overdrijven ook een vak is... je kan het afdoen met 1 method en dat refereerd aan OOP.
100 queries, wel ik denk dat overdrijven ook een vak is... je kan het afdoen met 1 method en dat refereerd aan OOP.
Ik denk dat je beter fouten kunt loggen, en om het uur (of zo) pollen of het foutenbestand groter is geworden.
Straks gaat de mailserver klagen dat je een spammer bent :P
Straks gaat de mailserver klagen dat je een spammer bent :P
@peter heb een eigen mailserver draaien op localhost.
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.
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.
or die() is een definitieve stop van je script, als je de algemeen toegepaste foutafhandeling toepast kan je een alternatief bieden, zodat je je script niet hoeft te stoppen!
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.
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.
Je kan het best een functie maken volgens mij.
Dus:
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);
}
Ke heb het een en ander aangepast ben ook overgegaan naar MYSQLI.
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.
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
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
@noppes bedankt voor je hulp.
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.
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
EDIT: dubbel post, sorry
Gewijzigd op 11/07/2010 23:10:56 door Tobias Tobias




