Forums d'assistance et de discussion sur les logiciels produits par Mozilla ou créés à partir des technologies Mozilla. Ce site ne dépend pas de la fondation Mozilla et est maintenu par un collectif de bénévoles.
HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Il y a bien des données dans la table, c'est bien la bonne table (si je change quoi que ce soit pour le rendre faux ça retourne bien une erreur) et avec les bons champs (idem ça retourne une erreur si je mets une faute) donc je ne comprend pas pourquoi ça ne retourne pas un tableau avec les résultats attendus
Pour les requêtes du type SELECT, SHOW, DESCRIBE ou EXPLAIN, mysql_query() retournera une ressource en cas de succès, et FALSE en cas d'erreur.
Pour les autres types de requêtes, UPDATE, DELETE, DROP, etc., mysql_query() retourne TRUE en cas de succès et FALSE en cas d'erreur.
La ressource de résultat retournée doit être passée à la fonction mysql_fetch_array(), et les autres fonctions permettant d'explorer le résultat des tables, pour accéder aux données retournées.
les autres fonctions sont entre autres mysql_fetch_row() et mysql_fetch_assoc()
$result = mysql_query('SELECT chemin FROM ' . $mysql_table);
if (!$result) {
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
exit;
}
while($exist = mysql_fetch_row($result)) {
if ($exist["0"]==$chemin) exit('Un fichier portant le même nom a été déjà enregistré dans la base de données. Passez par le menu édition.');
}
$result = mysql_query("SELECT chemin FROM $mysql_table WHERE chemin='$chemin'") or die('Impossible d\'exécuter la requête : ' . mysql_error());
if (mysql_num_rows($result)>0)
exit('Un fichier portant le même nom a été déjà enregistré dans la base de données. Passez par le menu édition.');
Heu c'est pas de l'optimisation ça c'est du tournage en bourrique
Par exemple, pourquoi utiliser "die" dans une ligne et "exit" dans l'autre alors que ça fait la même chose ? Pourquoi en cas d'erreur renvoyer du texte et pas du HTML ? Et si tu avais commencé à afficher quelque chose avant ça va être joli tiens...
Benoit a écrit :Heu c'est pas de l'optimisation ça c'est du tournage en bourrique
Par exemple, pourquoi utiliser "die" dans une ligne et "exit" dans l'autre alors que ça fait la même chose ? Pourquoi en cas d'erreur renvoyer du texte et pas du HTML ? Et si tu avais commencé à afficher quelque chose avant ça va être joli tiens...
Je suis d'accord avec Benoit, mais j'ai juste optimisé le code tel qu'il était à l'origine... J'aurais en effet pu apporter les mêmes commentaires que Benoit
die et exit ont pour seul but d'arrêter le traitement PHP, le navigateur recevant alors la page en l'état, et souvent, sans être finie ! Ces fonctions ne doivent être utilisées que pour du développement !
$result = mysql_query("SELECT chemin FROM $mysql_table WHERE chemin='$chemin'") or die('Impossible d\'exécuter la requête : ' . mysql_error());
if (mysql_num_rows($result)>0)
exit('Un fichier portant le même nom a été déjà enregistré dans la base de données. Passez par le menu édition.');
Ah oui pas mal comme ça ça ne retourne qu'un seul résultat... le bon ! J'y avais pensé sans trop y penser ni savoir comment faire exactement
Benoit a écrit :Pourquoi en cas d'erreur renvoyer du texte et pas du HTML ? Et si tu avais commencé à afficher quelque chose avant ça va être joli tiens...
Parce que
Il n'y a rien d'affiché avant (normalement )
Vu que c'en est aux premiers balbutiements je n'ai pas jugé utile de déjà mettre du HTML vu que c'est encore (de moins en moins) bourré d'erreurs et donc constamment découpé, changé etc.
chBok a écrit : die et exit ont pour seul but d'arrêter le traitement PHP, le navigateur recevant alors la page en l'état, et souvent, sans être finie ! Ces fonctions ne doivent être utilisées que pour du développement !
En production trigger_error est de plus en plus utilisé mais je m'en suis jamais servi Il faudra que je m'y mette.
Là dernière fois que j'ai du codé quelquechose pour les erreurs (il y a + d'1 an ) il me semble que j'avais fait comme ça :
Ma page comprenait au dbut un include pour un header et en bas un include pour un footer. Quand j'avais une erreur critique je crois que je l'affichais quand même mais suivi d'un include du footer comme ça la page était quand même bien formée normalement
C'est très sale comme solution AMHA. D'ailleurs je voudrais connaître les meilleurs "trucs" à faire sur une staiton de dev. Personnellement, la première chose que je fais c'est un error_reporting(E_ALL); (et sur des scripts du net, c'est souvent moche).
Si la requête a échoué par exemple, bah je ne rentre pas dans le bloc d'affichage des résultats et je continue (en général il n'y a rien après en fait). On peut aussi faire la condition inverse (if !$result) si les traitements sont longs et qu'on préfère placer la gestion d'erreurs prèsde la condition.
if ($result = mysql_query($query) {
// fait quelque chose avec le résultat
}
else {
// affiche une erreur
}
etc.
Dans le cas où il y a une gestion d'erreurs complexe (plusieurs erreurs en cascade que je veux traiter), j'utilise un tableau appelé "erreurs", l'avantage est qu'un "if" sur un tableau vide retourne "false", donc on peut faire un if($erreurs) à tout moment.
Enfin, il y a depuis peu moyen d'utiliser des exceptions en PHP, même si ça rend parfois le code plus illisible qu'autre chose à mon avis (il y avait une note intéressante là-dessus sur le blog de Raymond Chen)
Benoit a écrit :Dans le cas où il y a une gestion d'erreurs complexe (plusieurs erreurs en cascade que je veux traiter), j'utilise un tableau appelé "erreurs", l'avantage est qu'un "if" sur un tableau vide retourne "false", donc on peut faire un if($erreurs) à tout moment.
J'utilisais un tableau aussi dans ces cas là mais je ne me souviens plus comment je le testais. un if($erreurs) ne renvoie même pas une notice ? (cf. les erreurs renvoyées par PHP).
Benoit a écrit :Enfin, il y a depuis peu moyen d'utiliser des exceptions en PHP, même si ça rend parfois le code plus illisible qu'autre chose à mon avis (il y avait une note intéressante là-dessus sur le blog de Raymond Chen)
Pourquoi y aurait-il une notice alors que c'est fait exprès ?
Raymond Chen est le programmeur de Microsoft qui les empêche de faire trop de bêtises en matière de compatibilité ascendante (Malheureusement il n'a jamais travaillé sur IE.) Son blog est très intéressant pour comprendre le pourquoi du comment de certaines choses bizarres.
Toto a écrit :En production trigger_error est de plus en plus utilisé mais je m'en suis jamais servi Il faudra que je m'y mette.
En fait le problème c'est que ça n'interrompt pas le script...
En plus ça affiche la ligne et le fichier où il y a une erreur, c'est pas du tout ce que je veux ! Je voudrais juste que ça dise à l'utilisateur "hélà, tu ne peux pas faire ça !"
Benoit a écrit :Moi j'utilise bêtement des blocs if et else
L'idée d'imbriquer une dizaine de blocs de ce genre me laisse assez perplexe, je n'ai pas l'impression que ça simplifie quoi que ce soit