Foutcode genereren als 1 van de queries mislukt.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de vries

thomas de vries

14/02/2011 22:15:57
Quote Anchor link
Goeden avond.
Ik heb een vraagje.

ik ben bezig met een aantal scripts waar ook een aantal queries aan vast zitten.
Nu is het zo dat als 1 van die queries misluk om wat voor een reden dan ook.
dat users deze melding zien.

Er is iets fout met de connectie naar de database.

Maar ik zou graag willen dat er dit gebeurt.
als er dus een fout is dus de result werkt niet.
Dan wil ik dat gebruikers een unieke meldings code krijgen.
voor die querie die fout is gegaan.
Dat zou ik dan weer kunnen controleren doormiddel van in de DB te zoeken
welke querie bij die foutcode hoort.

Maar om nu zeg maar tig codes te maken en die in een db te stoppen met daarbij horende veld waar dus de betreffende querie en welke regel die in dat script staat te maken.
Vroeg ik mij af of dit ook makkelijker kan?

Graag hoor ik jullie reacties hierover.

Met vriendelijke groet,

Thomas de vries.
 
PHP hulp

PHP hulp

22/12/2024 04:54:59
 
Sander de Vos

Sander de Vos

14/02/2011 22:26:23
Quote Anchor link
Bedoel je zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
// SQL Function
function sql_query($query) {
    $mysql = mysql_query($query);
    if ($mysql) {
        return $mysql;
    }
else {
        echo 'Er is iets fout met de connectie naar de database.';
        mail('ONTVANGER', 'Fout in de database!', '<b>Fout in de database bij het uitvoeren van: ' . $query . '</b>');
    }
}

?>
Gewijzigd op 14/02/2011 22:28:35 door Sander de Vos
 
Thomas de vries

thomas de vries

14/02/2011 22:38:11
Quote Anchor link
Ja idd zoiets kan ik ook doen dat de user alleen een srry melding krijgt.
En de mail op de achtergrond verstuurd wordt.

Alleen de functie mail werkt bij mij niet.
Werk met swiftmailer.

Dus dat ziet ernaar uit dat ik voor elke querie eigenlijks elke keer hetzelfde moet doen.
Gewijzigd op 14/02/2011 22:41:10 door thomas de vries
 
Sander de Vos

Sander de Vos

14/02/2011 23:13:38
Quote Anchor link
Thomas de vries op 14/02/2011 22:38:11:
Ja idd zoiets kan ik ook doen dat de user alleen een srry melding krijgt.
En de mail op de achtergrond verstuurd wordt.

Alleen de functie mail werkt bij mij niet.
Werk met swiftmailer.

Dus dat ziet ernaar uit dat ik voor elke querie eigenlijks elke keer hetzelfde moet doen.


Ok, maar jij werkt met swiftmailer.
Ik mag aannemen dat je er dan qua mailen zelf wel uit kan komen.

http://swiftmailer.org/wikidocs/v3/tutorials/basic

Een simpel voorbeeld heb ik al gegeven, je moet het alleen nog even aanpassen.
Gewijzigd op 14/02/2011 23:13:52 door Sander de Vos
 
Thomas de vries

thomas de vries

15/02/2011 12:21:43
Quote Anchor link
@sander als ik jouw script verander zodat ik mysqli kan gebruiken krijg ik de volgende melding

Warning: mysqli_query() expects parameter 1 to be mysqli, null given

Dit is dus wat ik heb
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
function sql_query($query) {
    $mysql = mysqli_query($mysqli, $query);
    if ($mysql) {
        return $mysql;
    }
else {
        echo 'Er is iets fout met de connectie naar de database.';
        //mail('ONTVANGER', 'Fout in de database!', '<b>Fout in de database bij het uitvoeren van: ' . $query . '</b>');
    }
}

?>


En dit is mijn query

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "SELECT * FROM users1 WHERE racenaam = '".$racer."' AND wachtwoord = '".md5($pass)."'";
if(!$result = $mysqli->query($sql))
{

    sql_query($sql);
}

?>
 
Joren de Wit

Joren de Wit

15/02/2011 12:56:19
Quote Anchor link
Dat komt omdat de variabele $mysqli niet beschikbaar is binnen jouw functie. Die zul je dan ook als parameter op moeten geven.

Maar ik denk niet dat dit de handigste methode is. Als er 1 query mislukt, kan ik me voorstellen dat er in hetzelfde script meerdere queries mislukken. Voor elke keer dat het script aangeroepen wordt, krijg jij dus x aantal e-mails in je inbox.

Dit zou je beter op kunnen lossen door een try-catch constructie te gebruiken en Exceptions te gebruiken om je foutmeldingen af te handelen. Zoiets bijvoorbeeld:

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
<?php
try {
  $result1 = $mysqli->query($sql1);
  if($result1 === false) {
    throw new Exception(md5($sql1));
  }


  // Voer hieronder meerdere queries op dezelfde manier uit
}
catch(Exception $e) {
  $hash = $e->getMessage();

  // Schrijf bijvoorbeeld een record naar de database met opgegeven hash en uitgevoerde
  // query oid. Controleer of er al een record met die hash bestaat, en zo niet, mail een waarschuwing naar jouw adres.

}
?>

Zodra je in het try blok 'throw new Exception' aangeroepen hebt, stop de verdere uitvoer van dat blok en wordt het catch blok uitgevoerd. Op die manier kun je heel eenvoudig bepalen welke methode van foutafhandeling je wilt toepassen. Lees ook op internet eens meer over het gebruik van Exceptions.
 
Pim -

Pim -

15/02/2011 14:33:28
Quote Anchor link
Goed idee. Uit een hash is zo lekker veel informatie te halen ;)
 
Joren de Wit

Joren de Wit

15/02/2011 14:44:41
Quote Anchor link
Het gaat hier enkel om het genereren van een unieke code voor een query, zoals de TS zelf aangaf. Een hash van de uitgevoerde query geeft in dit geval wel een unieke code, die je later weer terug kan leiden naar die query (aangezien je weet welke queries je uitvoert).

Uiteraard volstaat ieder andere methode van genereren van een uniek id ook...
 



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.