Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/04/2011, 12h08   #1
Membre éclairé
 
Avatar de Ceddoc
 
Homme Cédric
Développeur Java / Web / .NET
Inscription : janvier 2009
Messages : 327
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Java / Web / .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2009
Messages : 327
Points : 369
Points : 369
Par défaut Gestion d'erreur et or die

Bonjour,

Dans un soucis de faire une gestion d'erreur la plus propre possible je voulais savoir sil y avait moyen de déclencher un traitement dans le or die. C'est à dire que plutôt d'afficher directement un message sous cette forme:

Code :
mysql_query($query) or die("Mon message d'erreur");
réussir à donner un code erreur ou déclencher une instruction qui stock l'erreur dans un tableau ou quelque chose du genre.

Merci.
Ceddoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 12h16   #2
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Un petit tour sur Google (la question m'intéressait) m'a montré qu'on pouvait passer en paramètre de die une chaîne de caractères qui s'affichera.
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 12h20   #3
Membre éclairé
 
Avatar de Ceddoc
 
Homme Cédric
Développeur Java / Web / .NET
Inscription : janvier 2009
Messages : 327
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Java / Web / .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2009
Messages : 327
Points : 369
Points : 369
Oui c'est ce que je fais actuellement dans mon code (comme dans mon exemple) mais du coup c'est un affichage un peu "sauvage" et si le or die est sur une page non-affichée (un script par exemple) ben il sert a rien quoi...

Moi ce que j'aurais aimé faire c'est genre stocké l'erreur (le ordie) dans un tableau d'erreur que je retournerais à la fin de ma fonction pour l'afficher proprement dans ma page appelante.
Ceddoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 12h55   #4
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Beh gérer les erreurs proprement au lieu d'utiliser du die() à tout va ?

Prenons une fonction renvoyant false en cas d'échec :
Code php :
1
2
3
4
5
6
7
if( ma_fonction() === false )
  $erreur[] = "ma_fonction : échec";
....
....
...
foreach($erreur as $err)
  echo $err;
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/04/2011, 13h02   #5
Membre éclairé
 
Avatar de Ceddoc
 
Homme Cédric
Développeur Java / Web / .NET
Inscription : janvier 2009
Messages : 327
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Java / Web / .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2009
Messages : 327
Points : 369
Points : 369
Citation:
Envoyé par transgohan Voir le message
Beh gérer les erreurs proprement au lieu d'utiliser du die() à tout va ?

Prenons une fonction renvoyant false en cas d'échec :
Code php :
1
2
3
4
5
6
7
if( ma_fonction() === false )
  $erreur[] = "ma_fonction : échec";
....
....
...
foreach($erreur as $err)
  echo $err;
Oui d'accord, j'avoue que c'est propre et c'est un peu ce que je veux faire mais est-ce que c'est applicable dans le cas d'un mysql_query par exemple?

edit: au temps pour moi, par j'ai une requête en insert donc très facilement faisable mais pour le cas d'une reqête de select il faut tester le resultset c'est ça?

J'avoue que j'utilise le or die sur tous mes mysql_query par réflexe et parce que j'ai vu ça dans beaucoup de tuto/exemples
Ceddoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 15h22   #6
Membre confirmé
 
Avatar de Apocalypses
 
Homme
Étudiant
Inscription : novembre 2008
Messages : 293
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2008
Messages : 293
Points : 278
Points : 278
Envoyer un message via MSN à Apocalypses
Bonjour,

Si vous faites un select, il vaut mieux parcourir la liste des résultats:

Code :
1
2
3
4
5
 
$result = mysql_query("select * from Proprietaire");
while($row = mysql_fetch_array($result))
{ blabla
}
S'il n'y a pas de résultat, rien ne se passera, si vous voulez juste savoir si le select a renvoyé des résultats il faut demander le nombre d'élément contenu dans la liste de résultat
Apocalypses est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/04/2011, 15h32   #7
Membre éclairé
 
Avatar de Ceddoc
 
Homme Cédric
Développeur Java / Web / .NET
Inscription : janvier 2009
Messages : 327
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Java / Web / .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2009
Messages : 327
Points : 369
Points : 369
Citation:
Envoyé par Apocalypses Voir le message
Bonjour,

Si vous faites un select, il vaut mieux parcourir la liste des résultats:

Code :
1
2
3
4
5
 
$result = mysql_query("select * from Proprietaire");
while($row = mysql_fetch_array($result))
{ blabla
}
S'il n'y a pas de résultat, rien ne se passera, si vous voulez juste savoir si le select a renvoyé des résultats il faut demander le nombre d'élément contenu dans la liste de résultat
Oui je vois le genre mais si une erreur sort à l'envoi de la requête (de type impossible de contacter la base) ça ne va pas fonctionner non?

Enfin bon je vais me débrouiller en essayant de faire des choses comme celles que vous m'avez conseillés.

Merci de votre aide.
Ceddoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 15h43   #8
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Code :
1
2
3
4
5
6
7
8
9
<?php
	function hello($var){
		echo 'world';
	}
	mysql_connect('localhost', 'root', '');
	mysql_select_db('truc') or die(hello(mysql_error()));
        //affiche 'world' car je n'ai pas la base "truc"
 
?>
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/04/2011, 15h57   #9
Membre éclairé
 
Avatar de Ceddoc
 
Homme Cédric
Développeur Java / Web / .NET
Inscription : janvier 2009
Messages : 327
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Java / Web / .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2009
Messages : 327
Points : 369
Points : 369
Ca ressemble beaucoup plus à ce que je voulais faire, j'arrive pas à faire précisément ce que j'espérais mais ça vient de mon code pas de ta proposition.

Merci
Ceddoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 17h57   #10
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Il faut éviter d'utiliser mysql_error() en production pour des questions de sécurité. Elle peut donner des détails compromettant.

Dans le cadre de la fonction mysql_query(), tu peux toujours te baser sur la comparaison avec "false" car, comme l'indique le manuel, en cas d'erreur de la requête (select, insert ou autre) la fonction retourne false.

Par ailleurs, je conseille "toujours" de passer des fonctions mysql_* à mysqli_*. C'est quasiment la même librairie mais elle est maintenue, l'autre commence à être dépassée.
Tu peux par exemple avoir un "simple" code erreur comme dans ces exemples qui peuvent être utilisable en production (mais assez moche quand même)

Sinon, tu peux passer en mode "objet" et utiliser PDO
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/04/2011, 09h29   #11
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Shikiryu, je ne vois pas où est le problème avec le mysql_error(), du moment qu'il n'est pas affiché... Là, le mysql error est passé en paramètres à une fonction qui n'affichera pas l'erreur mais l'enregistrera dans une DB ou dans un log (par exemple).

Après, je me trompe peut-être et si c'est le cas, j'aimerais des explications
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 09h59   #12
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
S'il n'est pas affiché, ça peut aller.
Ce que tu en faisais n'était pas trop indiqué dans ton code précédent.
Par contre, tu te rend compte que l'enregistrer dans une BDD alors que l'erreur est lancée sur la connexion à ladite BDD, c'est bizarre non ? Et surtout, je ne vois pas l'intérêt de bouffer de la ressource MySQL pour du log alors que, eux, sont là pour ça.
Donc, ok, je suis d'accord avec toi pour faire des logs d'erreur.

En fait, je tenais juste à éviter que l'OP ne te comprenne pas super bien et fasse un die(mysql_error()).

Ensuite, je ne recommande pas d'utiliser die(). Pourquoi ?
D'une part tu es limité dans son paramètre (normalement une string) ce qui fait que je ne suis pas sûr que ton code fonctionne tel quel.
Peut-être comme ça et encore.

Code :
1
2
3
4
5
6
function hello($var){
    // fais un log ou autre
    return 'world'; // note le return au lieu du echo
}
mysql_connect('localhost', 'root', '');
mysql_select_db('truc') or die(hello(mysql_error()));
D'autre part, car, il stoppe l’exécution PHP au moment du die(). L'utilisateur est super content d'avoir une page blanche sans savoir pourquoi et sans pouvoir rien faire (surtout si l'erreur (ex: la connexion à la BDD) est présente sur toutes les pages du site) !

PHP a évolué depuis die() (même si 90% des tutos sur le net l'utilise... *sigh*)
Personnellement, je crée une fonction faisant les actions en cas d'erreur (log, poursuite du script, redirection, etc...), je la met en callback de set_error_handler et au lieu d'utiliser die(), j'utilise trigger_error(). Le tout allié à l'affichage ou non des erreurs sur les pages (en production, à éviter). Bien sûr à utiliser si les logs d'erreur PHP de base ne vous suffisent pas.

exemple (non-exhaustif, vous gérez les erreurs de la manière dont vous voulez (mail, fichier text, fichier xml avec xsl, bdd,..., vous arrêtez le script avec un exit; ou non après le log, etc) :

Code :
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
function error_handler($error_type, $string_error, $file_error, $line_error){
	$date = date('d/m/Y - H:i:s');
	$return_error = $date.": " ;
	switch($error_type){
        case E_USER_ERROR:
            $return_error .= "Erreur fatale : ".$string_error ;
            $return_error .= " Dans le fichier : '".$file_error."', à la ligne ".$line_error." \n" ;
        break;
        case E_USER_WARNING:
            $return_error .= "Avertissement : ".$string_error ;
            $return_error .= " Dans le fichier : '".$file_error."', à la ligne ".$line_error." \n" ;
            break ;
        case E_USER_NOTICE:
            $return_error .= "Note : ".$string_error ;
            $return_error .= " Dans le fichier : '".$file_error."', à la ligne ".$line_error." \n" ;
        break ;
        default:
            $return_error .= "Erreur inconnue [".$error_type."] : ".$string_error ;
            $return_error .= " Dans le fichier : '".$file_error."', à la ligne ".$line_error." \n" ;
        break ;
	}
	error_log($return_error, 3, 'tmp/logs/errors.log');
}
set_error_handler('error_handler');
mysql_connect('localhost', 'root', '');
mysql_select_db('truc') or trigger_error (mysql_error(), E_USER_ERROR);
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/04/2011, 10h07   #13
Membre éclairé
 
Avatar de Ceddoc
 
Homme Cédric
Développeur Java / Web / .NET
Inscription : janvier 2009
Messages : 327
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Java / Web / .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2009
Messages : 327
Points : 369
Points : 369
Ah ça ça me plait encore plus, c'est vraiment propre, facilement compréhensible et ça ouvre de nombreuses possibilités.

Merci de ton aide Shikiryu
Ceddoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h19   #14
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Quelques questions sur la gestion d'erreur de Shikiryu :
  • Ca (set_error_handler('error_handler'); ) tu ne le mets qu'à la connexion à la base ?
  • Si tu remplaces "die" par "trigger_error (mysql_error(), E_USER_ERROR);", aura-t-on parfois d'autres types d'erreur que E_USER_ERROR ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h44   #15
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par laurentSc Voir le message
  • Ca (set_error_handler('error_handler'); ) tu ne le mets qu'à la connexion à la base ?
  • Si tu remplaces "die" par "trigger_error (mysql_error(), E_USER_ERROR);", aura-t-on parfois d'autres types d'erreur que E_USER_ERROR ?
Pour le 1er point :
Personnellement, j'utilise un bootstrap (quelque soit le fichier appelé, la requête passe par un fichier d'amorçage qui met en place l'environnement voulu puis exécute le fichier appelé). Dans la mise en place de l'environnement, j'indique à PHP grâce à set_error_handler et la fonction en paramètre que je veux gérer mes erreurs de telle manière !
Quoi qu'il arrive (même sans utiliser cette technique), ces dernières doivent être placées avant toutes erreurs potentielles si vous voulez les attraper. En fait, cela sert à attraper toutes les erreurs type E_USER (ERROR, WARNING, STRICT, etc...) qu'elles soient provoquer (par trigger_error()) ou non (dans le cas où on fait des erreurs dans le code)

Pour le 2e point:
trigger_error() accepte 2 paramètres (le 1er étant obligatoire) :
  1. Le message d'erreur à envoyer dans le log. Dans le cas de la base de donnée, quelque soit la librairie, il y a une fonction qui retourne le code ou message d'erreur, dans les autres cas, vous mettez ce que vous voulez sous forme de string.
  2. Une constante d'erreur PHP à vous de jauger le type et l'importance de l'erreur à gérer. Sachez que la valeur par défaut est E_USER_NOTICE, une simple notice, pas une réelle erreur.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h20   #16
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Bonjour ...,

j'ai fait l'essai suivant :
Citation:
include_once("config.php");


function connect()
{
function error_handler($error_type, $string_error, $file_error, $line_error){
...
}
set_error_handler('error_handler');
($id_conn=mysql_connect(MYHOST,MYUSER,MYPASS))or trigger_error (mysql_error(), E_USER_ERROR);
Si le fichier config.php est bon, ça marche bien, mais s'il est mauvais, au lieu d'appeler error_handler, ça m'affiche
Citation:
Can't connect to local MySQL...
Sais-tu ce qui ne va pas ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h45   #17
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Déjà, 1 fonction dans 1 fonction c'est bof. Mais là c'est une fonction à généraliser (pour qu'elle capte toutes les erreurs)

Dans ton cas, si config.php possède une erreur (ou n'existe pas), une erreur survient alors que error_handler n'est pas connu. Il ne sera pas capter et PHP l'ignorera par la suite.

C'est pour cela que je conseillais de le mettre avant toute chose

exemple dans ton cas :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function error_handler($error_type, $string_error, $file_error, $line_error){
...
} // on créé la fonction qui gèrera l'erreur et qui fera les actions en conséquence
 
set_error_handler('error_handler'); // On dit à PHP que c'est cette fonction à lancer dès qu'il capte une erreur
// on poursuit le script normalement
 
include_once("config.php"); // inclusion avec ou sans erreur
 
function connect()
{
    $id_conn=mysql_connect(MYHOST,MYUSER,MYPASS) or trigger_error (mysql_error(), E_USER_ERROR); 
} // fonction de connexion qui lancera une erreur si ça ne se passe pas bien
...
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h21   #18
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
J'ai fait quasiment ça, mais il y a encore un problème ; comme le code est réparti sur 2 fichiers, je mets exactement ce qu'il y a :
traitrequete.php :
Code :
1
2
3
4
5
6
7
8
9
10
<?php
include_once("connect.php");
 
 
init_mysql();
$id_conn = connect();
 
 ...
close($id_conn);
?>
connect.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
function error_handler($error_type, $string_error, $file_error, $line_error){
...
}
 
function init_mysql() {
set_error_handler('error_handler');
include_once("config.php");
}
 
function connect()
{
($id_conn=mysql_connect(MYHOST,MYUSER,MYPASS))or trigger_error (mysql_error(), E_USER_ERROR); 
mysql_select_db("...",$id_conn) or trigger_error (mysql_error(), E_USER_ERROR); 
 
return($id_conn);
}
 
function close($id_conn)
{
mysql_close($id_conn);
}
?>
Où cela cloche-t-il ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h31   #19
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Pourquoi mets-tu "set_error_handler('error_handler');" dans une fonction ? C'est un réglage général pour PHP ! Comme ini_set, comme... pas mal de fonction...

La fonction init_mysql() est inutile à moins que tu te connectes à plus d'une base... autant mettre l'include dans la fonction de connexion.

Clore la connexion MySQL est "inutile" car comme le traite la documentation de mysql_cose :

Citation:
L'utilisation de mysql_close() n'est pas habituellement nécessaire, puisque les connexions non persistantes ouverts sont automatiquement fermées à la fin l'exécution du script.
connect.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function error_handler($error_type, $string_error, $file_error, $line_error){
...
}
set_error_handler('error_handler');
 
function connect()
{
include_once("config.php");
($id_conn=mysql_connect(MYHOST,MYUSER,MYPASS))or trigger_error (mysql_error(), E_USER_ERROR); 
mysql_select_db("...",$id_conn) or trigger_error (mysql_error(), E_USER_ERROR); 
 
return $id_conn;
}
traitrequete.php (j'imagine que c'est celui-ci que tu lances) :
Code :
1
2
3
<?php
include_once("connect.php"); 
$id_conn = connect();
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h05   #20
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Citation:
j'imagine que c'est celui-ci que tu lances
Oui, en fait, à une époque, je cherchais une interface des bases MySQL plus rapide que PHPMyAdmin, et je m'étais développé en PHP une interface qui me permet d'envoyer des requêtes SQL et d'afficher la réponse si elle existe ; c'est donc cette interface que j'essaie d'adapter (et traitement.php est l'action du formulaire html). Maintenant, j'ai fait exactement ce que tu préconises :
connect.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function error_handler($error_type, $string_error, $file_error, $line_error){
	$date = date('d/m/Y - H:i:s');
...
	//error_log($return_error, 3, 'tmp/logs/errors.log'); en commentaires, car je n'ai pas vu de répertoire de log chez moi
}
set_error_handler('error_handler');
 
function connect()
{
include_once("config.php");
($id_conn=mysql_connect(MYHOST,MYUSER,MYPASS))or trigger_error (mysql_error(), E_USER_ERROR); 
mysql_select_db("db317093611",$id_conn) or trigger_error (mysql_error(), E_USER_ERROR); 
 
 
return($id_conn);
}
 
?>
et traitrequete.php :
Code :
1
2
3
4
5
6
<?php
include_once("connect.php");
$id_conn = connect();
 
// suppression de mysql_close()
?>
Mais toujours le message
Citation:
Can't connect to local MySQL...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h25.


 
 
 
 
Partenaires

Hébergement Web