or die

Mammouth du PHP | 1029 Messages

16 août 2005, 14:57

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
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 4 Messages

16 août 2005, 15:32

Salut

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

a+

Mammouth du PHP | 1029 Messages

16 août 2005, 15:35

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é
L'expérience est la somme de toutes nos erreurs.

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

16 août 2005, 17:12

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>

Mammouth du PHP | 1885 Messages

16 août 2005, 18:42

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.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Mammouth du PHP | 1029 Messages

17 août 2005, 09:17

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
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

17 août 2005, 14:03

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
L'expérience est la somme de toutes nos erreurs.