automatisch email verzenden naar een query fout.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de vries

thomas de vries

10/07/2010 10:55:17
Quote Anchor link
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.
 
PHP hulp

PHP hulp

18/06/2021 20:23:34
 
Bas IJzelendoorn

Bas IJzelendoorn

10/07/2010 11:08:14
Quote Anchor link
Ik gebruik volgens mij al een wat oudere manier maar werkt wel:

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
<?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
    */

}
?>
 
Noppes Homeland

Noppes Homeland

10/07/2010 11:20:13
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>


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
 
P Lekensteyn

P Lekensteyn

10/07/2010 11:34:30
Quote Anchor link
$bool==1 -> TRUE als $bool naar TRUE kan worden geëvalueerd.
 
Noppes Homeland

Noppes Homeland

10/07/2010 11:38:34
Quote Anchor link
Nee, $bool is in dit geval false of een resource dus dat kan zich nooit evaleren naar 1 dan wel true.
 
Thomas de vries

thomas de vries

10/07/2010 21:04:24
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$mail
= "bugs@the-blaat.cjb.net";
$fout = mail($mail,"The-blaat bug report","Er is een fout gevonden ".mysql_error()."","From: The-blaat<noreply@the-blaat.cjb.net>\n");
?>


En in mijn index
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SELECT * FROM news1")or die($fout);
?>


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
 
Noppes Homeland

Noppes Homeland

10/07/2010 21:15:43
Quote Anchor link
Hoe vaak moet het nu nog geschreven worden dat je or die() niet moet gebruiken!!

nog maar een keer dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>
 
Thomas de vries

thomas de vries

10/07/2010 21:25:16
Quote Anchor link
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.
 
Noppes Homeland

Noppes Homeland

10/07/2010 21:38:28
Quote Anchor link
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.
 
P Lekensteyn

P Lekensteyn

10/07/2010 21:43:41
Quote Anchor link
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
 
Thomas de vries

thomas de vries

10/07/2010 21:55:07
Quote Anchor link
@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.
 
Noppes Homeland

Noppes Homeland

10/07/2010 22:04:34
Quote Anchor link
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.
 
- SanThe -

- SanThe -

10/07/2010 23:17:41
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$fout
= mail($mail,"The-blaat bug report","Er is een fout gevonden ".mysql_error()."","From: The-blaat<noreply@the-blaat.cjb.net>\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.
 
Ruben Portier

Ruben Portier

11/07/2010 11:01:26
Quote Anchor link
Je kan het best een functie maken volgens mij.
Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// Controleer of de query gelukt is
if(!$result) mailWrongQuery( "e-mail@adres.be", mysql_error() );

// De functie
function mailWrongQuery( $emailadres, $error )
{

     mail($emailadres, "Wrong query", "De volgende fout werd opgegeven: ".$error);
}
 
Thomas de vries

thomas de vries

11/07/2010 19:45:03
Quote Anchor link
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.
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
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 <noreply@the-heist.cjb.net>\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 Homeland

Noppes Homeland

11/07/2010 20:44:55
 
Thomas de vries

thomas de vries

11/07/2010 22:29:38
Quote Anchor link
@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 <noreply@the-heist.cjb.net>\n");

ipv dit
mail($mail,"The-heist bug report","Er is een fout gevonden ".$mysqli->error."","From: The-heist <noreply@the-heist.cjb.net>\n");

Na die $mysqli->error de 2 haakjes weglaten. zat nog met mysql_error() in de maag.
 
Tobias Tobias

Tobias Tobias

11/07/2010 23:10:37
Quote Anchor link
en dat gepost tijdens de wedstrijd... echt fanatiek in de PHP
 
Tobias Tobias

Tobias Tobias

11/07/2010 23:10:37
Quote Anchor link
EDIT: dubbel post, sorry
Gewijzigd op 11/07/2010 23:10:56 door Tobias Tobias
 



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.