Page 1 sur 1

or die

Posté : 16 août 2005, 14:57
par Maitrepylos
Bonjour, je voudrais faire ceci :
@pg_query($Connect,$sql1) or die ('<b>Mesage 1</b>');
@pg_query($Connect,$sql2) or die ('<b>Mesage 2</b>');
@pg_query($Connect,$sql3) or die ('<b>Mesage 3</b>');
Or si il y a une erreur au niveau du sql2 il ne passe pas au sql3, je voudrais que tous les pg_query s'effectue et qu(il me signale juste là où il y a une erreur.

Merci de votre aide

Posté : 16 août 2005, 15:32
par pcserba
Salut

Enlève les @ devant tes fonctions et enlève les 'or die()', normalement ca devrait marcher.

a+

Posté : 16 août 2005, 15:35
par Maitrepylos
ben non, je veux que si il y a une erreur il ne me mette pas le message générique mais celui que j'ai décidé

Posté : 16 août 2005, 17:12
par matt_m
bonjour


si tu veux qu'il ne s'arrete pas sur les requetes qui ont planté, supprime les die et fais quelque chose du genre:
<?PHp

function execute_query(&$connexion, $query, &$array_of_errors) {
   if (!pg_query($connexion, $query)) {
     $array_of_errors[] = "query [$query] couldn't be executed";
   }
}

$errs = array(); // array of errors
...
execute_query($Connect, $sql1, $errs);
execute_query($Connect, $sql2, $errs);
execute_query($Connect, $sql3, $errs);
if (!empty($err)){
   ?>
   <p>Erreurs:</p>
   <ul>
<?Php
    foreach($errs as $err) {
     ?>
      <li><?php echo $err;?></li>
<?php

   }
}

?>
</ul>

Posté : 16 août 2005, 18:42
par Xenon_54
Bonjour,

Le or die() était une solution relativement acceptable si tu ne désires pas avoir une gestion des erreurs plus élaborées.

Tu peux également utiliser la fonction trigger_error() qui génère une erreur utilisateur. Ensuite, tu peux utiliser la fonction set_error_handler() pour spécifier une fonction qui va gérer de manière automatique toutes les erreurs générées par trigger_error().
function handler( $errno, $errstr, $errfile, $errline) {
	printf('<br />Erreur #%u: %s<br />Fichier: %s<br />Ligne %u', $errno, $errstr, $errfile, $errline);
	exit; // À toi de dire si tu veux quitter ou pas
}

set_error_handler('handler');

$res = pg_query('bidon') or trigger_error('Impossible de récupérer bidon');
$res2 = pg_query('bidon2') or trigger_error('Impossible de récupérer bidon2');
?>
La fonction set_error_handler() peut également gérer les erreurs générées par pgsql_query():
<?php
function handler( $errno, $errstr, $errfile, $errline) {
	printf('<br />Erreur #%u: %s<br />Fichier: %s<br />Ligne %u', $errno, $errstr, $errfile, $errline);
	exit; // À toi de dire si tu veux quitter ou pas
}

set_error_handler('handler');
pg_query('bidon');
pg_query('bidon2');
?>
Tu peux également procéder ainsi étant donné que les erreurs générées par pg_query() sont de type E_WARNING:
<?php
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);

if (FALSE === ($res = pg_query('bidon'))) {
	exit('Impossible de récupérer bidon');
}

if (FALSE === ($res2 = pg_query('bidon2'))) {
	exit('Impossible de récupérer bidon2');
}
?>
Ou encore mieux, utiliser les exceptions (PHP5)

Il ne faut pas oublier de considérer ceci:
- Si une erreur est générée lors de la première requête, est-ce que cela va affecter ma 2e requête lors de son exécution?
- Sont-elles dépendantes les unes aux autres?
- Devrais-je continuer à exécuter mes requêtes malgré une erreur lors de la précédente?

Il est important de prévoir les résultats d'une erreur et ainsi prévenir une réaction en chaîne sur les autres requêtes alors que ce n'est évidemment pas désirée.

Posté : 17 août 2005, 09:17
par Maitrepylos
Bonjour :

est-ce que je peux passer une chaine de caractère dans une function.
je m'explique si je reprend la solution de "emelir", et que je fais ceci
<?PHp

function execute_query(&$connexion, $query, &$array_of_errors,$message) {
   if (!pg_query($connexion, $query)) {
     $array_of_errors[] = "query [$message] couldn't be executed";
   }
}

$errs = array(); // array of errors
...
execute_query($Connect, $sql1, $errs,'message perso1');
execute_query($Connect, $sql2, $errs,'message perso2');
execute_query($Connect, $sql3, $errs,'message perso3');
if (!empty($err)){
   ?>
   <p>Erreurs:</p>
   <ul>
<?Php
    foreach($errs as $err) {
     ?>
      <li><?php echo $err;?></li>
<?php

   }
}

?>
</ul>
est-ce possible.

Une possibilité proposé par "PHP", m'interesse aussi
<?php
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);

if (FALSE === ($res = pg_query('bidon'))) {
    exit('Impossible de récupérer bidon');
}

if (FALSE === ($res2 = pg_query('bidon2'))) {
    exit('Impossible de récupérer bidon2');
}
?>
ma queqtion est-ce que les "exit", n'empêche pas la suite des éxecutions?

Merci de votre aide

Posté : 17 août 2005, 14:03
par Maitrepylos
Merci de votre aide j'ai fais ceci:
	error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
		

if (FALSE === (pg_query($Connect,$sql))) {
    echo '<LI>Une erreur c\'est produite dans la partie <b>PARTICIPANT</b>, merci de mofifier la fiche.</LI><br>';
}
if (FALSE === (pg_query($Connect,$sql2))) {
    echo '<LI>Une erreur c\'est produite dans la partie <b>ADRESSE</b>, merci de mofifier la fiche.</LI><br>';
}
cela correspond tip top à ce que je voulais.

Encore merci.
MaitrePylos