FONCTION RECURSIVE DE RECHERCHE DE FICHIER SELON UNE EXTENSION OU UN GROUPE D'EX
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 2010
-
19 juil. 2005 à 13:06
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009
-
8 août 2005 à 10:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 8 août 2005 à 10:36
en fait, je pense que l'utilisation la plus courante du or est :
$requete=mysql_db_query("SELECT * FROM membre",$db_base) or die(mysql_error());
ou des trucs dans ce genre la.
On s'est vraiment pris la tete pour pas grand chose, l'utilisation du 'or' se fait principalement dans les affectations avec des ressources (lecture de fichiers, connexion aux bases, ...).
Pour le 'and', je cherche une autre explication rationnelle ( a part, d'avoir la synthaxe or/and et non pas que or, pour l'instant je vois pas ;) )
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 23 juil. 2005 à 12:55
j'ai jamais dit que je préférais une écriture...
Personellement, j'ai toujours fait aec les || et &&...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 23 juil. 2005 à 12:02
Coucou => effectivement ton exemple est plus clair et plus utile. Dans ce cas oui, ca peut etre utilise, et ca peut etre dangereux. Enfin...sans utilisation de parentheses evidemment (perso je les utilise souvent pour delimiter mes conditions, et savoir, en relecture plusieurs semaines apres, ce que j'ai voulu regrouper et faire exactement).
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 22 juil. 2005 à 20:54
Mouais, chacun y voit son utilité, perso ça ne me sert pas (et ça ne me servira pas dans l'immédiat) :-)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 22 juil. 2005 à 14:46
pardonnez, lors de mon précédent post, le $ devant false...
dans un sens oui, mais si tu t'interesse en premier lieu au résultat de fonc1 et de fonc2 ...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 22 juil. 2005 à 14:31
quand on doit tester le retour de deux fonction équivalentes (si l'une d'entre elle réussi alors on n'exécute pas le code..)
$retour=fonction...
if ($retour=(autre fonction qui peut renvoyer false) and $false!==$retour)
sera différent de :
if ($retour=(autre fonction qui peut renvoyer false) && $false!==$retour)
on ne peut vraiment utiliser ces lignes de codes que quand on se sert du retour d'une seule des deux fonction...
(l'exemple parait moins bidon ?)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 juil. 2005 à 13:35
Oulà je trouve ça hideux mdr...
Perso je n'affecte jamais dans une condition, et j'utilise des parenthèses qui sont plus compréhensible que de changer et mettre des AND avec des && mélangés, d'ailleurs Grenard dit lui-même dans sa source sur la bonne programmation qu'il faut faire ça... Si lui-même n'applique pas ses conseils (sic)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 juil. 2005 à 13:09
Oui mais ca n'a rien a faire, l'affectation, dans un if(). Enfin a mon sens, je ne trouve pas ca logique. En plus dans ce cas mieux vaut utiliser
if (($a=5) === true and $a === 5)
ou
if (($a=5) === true && $a === 5)
parce que si on affecte 0, on est dans le caca...
Donc, on a des parentheses :-) lol.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 juil. 2005 à 12:42
En fait c'est justement là qu'intervient la priorité entre les opérateurs, dans un cas il va d'abord affecter la valeur et ensuite la comparer, dans l'autre il va faire l'inverse ;-)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 juil. 2005 à 12:29
Et puis mettre une affectation dans une condition, comme ca, pour moi ca veut dire ca :
est ce que l'affectation a reussi et est-ce que la variable est egale a x.
Ca ne veut pas dire :
affecte x a cette variable
est ce que cette variable est egale a x.
algorithmiquement parlant, comme le dit Garfield.
if ($data = 5)
renvoie true.
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 20 juil. 2005 à 11:25
Anthomicro>
Ouais, je suis ok avec toi. Cependant, je trouve ca pas très propre ( algorithmiquement parlant )
et creer 2 opérateurs rien que pour ca je trouve que c'est de l'artillerie très lourde ;)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 juil. 2005 à 11:20
ça t'évite de rajouter une ligne dans la condition pour affecter une valeur à ta variable, mais bon c'est peu clair...
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 juil. 2005 à 11:06
"Je ne vois pas d'exemple concret ou ca pourrait arriver."
Moi non plus mais bon on va attendre la réponse... (qui va bien me faire rire je pense)
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 20 juil. 2005 à 10:51
GRenard>
quand je disais :
"Pour la différence ok, mais ma question est ou en est l'interet ?
Si jamais t'as une réponse, je suis preneur"
C'était pour la différence entre le &&/|| et le and/or
Et tout comme malalam, j'attends une utilisation concrete de cette différence
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 juil. 2005 à 10:43
=> GRenard, je n'ai pas remis en doute que ca fonctionnait comme ca, je le sais bien, je demandais juste si tu avais un veritable exemple applique. Parce que ce que tu as fait la, heu...c'est theorique : on ne ferait jamais ca dans un script. C'est stupide. Je te demandais si tu avais un exemple applique, concret, ou on pourrait en effet tomber sur ce probleme lors du developpement d'une vraie application php.
personnellement, je n'ai jamais mis dans une expression une affectation ET un operateur logique. Je ne vois pas d'exemple concret ou ca pourrait arriver.
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 19 juil. 2005 à 19:38
Il existe différente manière de coder, voilà ma réponse.
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 19:11
Si t'as pas le fichier d'accompagnement, tu peux pas executer le code donc je vois pas l'interet de l'utiliser.
de plus, les retours sont commenté, ce qui fait que tu sais a quoi correspond le code retourné
je l'aurais noté comme ca :
GARFIELD_E_FONCTION_NOMERREUR
comme quoi la notation des constantes sont différentes.
Pour la différence ok, mais ma question est ou en est l'interet ?
Si jamais t'as une réponse, je suis preneur
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 19 juil. 2005 à 18:54
Bravo garfield, tu as trouvé le code qui en résultait... c'était qu'un pur exemple tout a fait bidon mais qui montre bien qu'il y a une différence entre ces deux opérateurs.
Constante : GARFIELD_FILE_ERROR_FOLDER , si tu retrouves cette constante quelque part, c'est que tu n'es vraiment pas chanceux. Reste non convaincu si tu veux :P s'il y avait juste -1 ok, mais la, il y en a plusieurs... imagine que tu n'aies pas le fichier d'accompagnement ? tk...
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 18:38
intval : C'est pour ca qu'en premiere intention je l'aurai mis
pour les constantes dans les modules de PHP, je le savais (preuve utilisation de E_ALL etc ) mais de tête, connais tu toutes les constantes qu'il employe, plus les constantes définies dans des packages que tu n'as pas fais, etc.
Pour les constantes, on arretes la ( je l'ai ajouterai pour une question de visibilité dans une version ultérieure, mais pour l'instant je ne suis pas convaincu )
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 18:37
AND et OR ont une priorité de traitement inférieure à && et ||
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 18:29
GRenard > Pour ton exemple, je pense voir la différence mais j'ai du mal a en voir l'application ni meme l'interet
perso, je trouve que faire une différence entre les 2 est une abbération ( un ET/OU logique reste un ET/OU logique )
J'ai plus l'impression que c'est une ruse de sioux pour faciliter des opérations ( opaque à mon point de vue )
Cependant, je ne vois pas l'interet d'affecter un variable pour la tester dans la même structure logique.
soit on fait
$test = 4;
...
if ( $test==5)
echo 'O1';
else
echo 'N1';
$test = 5;
soit
$test = 4 ;
...
$test = 5;
if ( $test==5)
echo 'O2';
else
echo 'N2';
Pour l'instant, le seul interet est le gain d'une ligne de code
Les resultats sont identiques aux tiens
En gros ,
'and' permet de faire une affectation avant un test et '&&' après
Je suis en attente d'une application réelle de cette différence car ce que tu nous montres c'est la différence de résultat
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 19 juil. 2005 à 18:20
En php, ils définissent bien des constantes pour les modules... tu n'as qu'à suivre un modèle comme ils font.
Pour ce qui est de intval, tu peux faire ce que tu veux (bin oui c'est du php) mais c'est mal coder si tu ne le mets pas quand il faut le mettre. Parce que normalement tu ne peux pas faire string+int
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 18:08
GRenard > le "t'es chanceux", je te trouve assez fort la, un script se teste tout de même avant d'être poster ;)
pour les $_GET et $_POST, j'aurais vu que ca ne marcherai pas donc $_POST['i'] = intval($_POST['i']) + 1 ; // pour etre vraiment sur mais je pense que le intval n'est pas nécessaire ( problème des langages non typé donc de PHP )
je ne vois pas trop l'interet de définir des constantes pour des erreurs sachant que la gestion des erreurs est spécifique à chaque fonction.
En plus, il existe un 'risque potentiel' ( faible mais existant ) de doublon de constante donc un test pour savoir si elle n'est pas déjà définie donc ta gestion d'erreur ne marche plus ou alors ca devient vite le bordel
Le seul interet ( que je vois ) de l'utilisation de constante pour la gestion des erreurs est la lisibilité donc peut etre que je le mettrai ( ceci étant aussi un but de ce script )
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 19 juil. 2005 à 18:06
Une constante, c'est plus significatif.
Essaie ca malalam
<?php
$test = 4;
if ($test=5 && $test==5)
echo 'O1';
else
echo 'N1';
echo '
';
$test = 4;
if ($test=5 and $test==5)
echo 'O2';
else
echo 'N2';
?>
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 17:47
"si tu ne mets pas de parenthèses"
On est d'accord, c'est ce que je dis plus haut en plus résumé ;-)
"mais normalement, dans ce cas là, on retourne soit -1 ou alors des constantes d'erreur !"
Idem que la remarque que tu m'avais faite vis à vis des majuscules dans la fonction header, ici je ne trouve pas qu'il y ait de "normalité". Tu peux retourner ce que tu veux dans une fonction, un nombre étant plus rapide à traiter qu'une constante, autant retourner un nombre, qu'il soit négatif ou non, ce n'est qu'un nombre après tout, non ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 17:45
"si tu ne mets pas de parenthèses"
On est d'accord, c'est ce que je dis plus haut en plus résumé ;-)
"mais normalement, dans ce cas là, on retourne soit -1 ou alors des constantes d'erreur !"
Idem que la remarque que tu m'avais faite vis à vis des majuscules dans la fonction header, ici je ne trouve pas qu'il y ait de "normalité". Tu peux retourner ce que tu veux dans une fonction, un nombre étant plus rapide à traiter qu'une constante, autant retourner un nombre, qu'il soit négatif ou non, ce n'est qu'un nombre après tout, non ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juil. 2005 à 17:45
+= avec un and ou un or ? Dans la meme expression ? J'ai du mal a trouver un exemple (ce serait vrai hein, mais je ne trouve pas d'exemple ou ce soit possible).
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 19 juil. 2005 à 17:43
Si tu utilises des += et des choses du genre la ca va mal aller... (si tu ne mets pas de parenthèses)
Côté $_SESSION, t'es chanceux, il garde les types (test|i:4;) (i signifie integer). Donc ok, il n'y a pas de problème... Mais c'est différent pour les POST et GET qui sont toujours en string...
Si tu retournes des integer positif à la normal, ok alors, j'avais pas scruter le script non plus :P mais normalement, dans ce cas là, on retourne soit -1 ou alors des constantes d'erreur ! (ca je ne l'ai pas écrit dans la bonne prog lol, mais ca se passe plutot avec des classes)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 17:14
En fait on parle de problème mais tout dépend de quel côté on se place ^^
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juil. 2005 à 17:00
Le probleme de precedence ne se pose que si on utilise || et AND dans la meme condition, en fait.
Les operateurs de comparaisons et operateurs logiques autres sont de toutes facons au-dessus.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 16:51
suffit d'utiliser les parenthèses à la place et ça ne posera pas de problèmes... l'avantage des ||, && et des combinaisons de OR et AND est qu'ils permettent de ne pas utiliser de parenthèses dans certains cas...
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 16:48
GRenard>
le coup du "and" , ca m'a échappé d'habitude j'utilise && .
j'ai lu le lien, pour moi il s'agissait purement et simplement d'alias, je crois que je vais garder mes habitudes ;)
des types en php?
normalement, il doit prendre le type de la valeur passé à l'initialisation donc c'est un entier mais peut etre me trompe je.
les erreurs sont négatives car cela permet de les différenciés et ne pas les confondre avec le nombre de valeurs dans tabFile.
Au fait, en cas est ce rare ?
pour les ' et ", les mauvaises habitudes ont la vie dure et à 4h du mat ( j'étais un peu crevé, excuse bidon ;) )
Je corrige ca un peu plus tard
Comme d'hab, t'as des commentaires pertinents
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 16:47
"Je sais pas ce qui vous prend mais vous êtes de plus en plus à utiliser "and" plutôt que "&&" et "or" plutôt que "||""
Peut-être aussi pour une question de goût ? je préfère le OR et AND je trouve ça plus propre :-) et ça ne m'a mais alors absolument jamais posé problème dans mes scripts.
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 19 juil. 2005 à 16:31
C'est rare les erreurs négatives. Tu utilises parfois des " ou parfois des '... reste constant. Tes variables n'ont certainement pas toujours les bons types et tu les traitent dans un type différent ($_SESSION["i"]++... c'est un string je crois par défaut et tu le traites en int)
cf mon tutorial sur la bonne programmation
http://www.phpcs.com/code.aspx?id=24870
(Je dis ca parce que t'as marre des sources crades ;))
Je sais pas ce qui vous prend mais vous êtes de plus en plus à utiliser "and" plutôt que "&&" et "or" plutôt que "||". C'est pas interdit, mais ATTENTION à la "Précédence des opérateurs" (http://ca.php.net/manual/fr/language.operators.php). Ces 2 opérateurs logiques n'ont pas du tout la même précédence...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juil. 2005 à 15:22
Ben en tous cas, sur le seul explorateur que j'ai fait, lol, oui, je teste si un fichier est une image avec de mettre une balise img pour l'afficher. Je teste juste avec getimagesize(), a dire vrai. Pas la peine de faire une classe quand une fonction le fait tres bien toute seule :-) De toutes facons, ca ne prend pas plus de ressource puisque de ttes facons, je veux aussi recuperer la taille de l'image dans mon cas.
Pour les autres fichiers, on s'en fout un peu.
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 14:53
malalam> "Ouais mais il peut essayer d'afficher une image qui n'en est pas une, la. "
donc a chaque fois que tu traites un fichier, tu testes si le code mime est bon ;)
la rien ne dit qu'il y ai eu upload avant (pour les paranos, on peut dire aussi import de fichier(s) non mis par l'administrateur), donc t'as une fonction ou une classe qui vérifie tout ca (je vais peut etre m'en faire une, tiens ;))
sur ce je retourne taffer
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juil. 2005 à 14:50
Ok, lol. Ben j'ai deja donne mon avis sur le retour de la fonction :-)
Si tu veux vraiment etre propre, reste coherent (mais bon je fais pareil lol) :
# if ( ! is_string($_dir) )
# {
# return -2 ; // erreur : $_dir n'est pas une chaine de caractere
# }
#
# if (!is_array($allowExtension) ){
Les deux if () sont differents quant auy espaces.
Pareil ici :
# if ( is_dir($_dir) ){
# if ($dh = opendir($_dir)) {
Et un peu partout en fait.
include "function/function.php";
=> personnellement je prefere require (qui affiche une erreur si la page n'est pas la), et generalement require_once () aui n'inclue la page qu'une seule fois.
Je n'aime pas les switch () mais ca, c'est une question de gouts.
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 19 juil. 2005 à 14:09
sebmafate, PaDa> merci pour le bug, je corrige ca de suite, j'avais pas fait le test sur le nomext sans le point
malalam > j'ai utilisé la variable globale pour éviter d'avoir un parametre supplémentaire mais ca rend le source encore plus propre donc je vais le prendre en compte
de meme pour le type mime
le script n'est pas sur le test des extensions, c'est juste un source pour faire un code propre pour montrer aux jeunes (comprendre pour l'experience et non l'age) développeurs ce qui faut faire et de montrer des fonctions 'achement utile mais souvent méconnues donc mal exploitées.
Pouvez vous aussi me critiquer (positif et négatif) sur la manière de coder afin que ce code soit plus un exemple de code a faire plutot qu'un script en lui meme
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 14:03
C'est sûr, mais qui renommerait les extensions des fichiers sur son serveur ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juil. 2005 à 13:54
Ouais mais il peut essayer d'afficher une image qui n'en est pas une, la.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 juil. 2005 à 13:53
Salut,
vu que c'est un formulaire de recherche autant bosser sur les extensions de fichiers, bosser sur le type mime serait ultra gourmand, mais c'est une bonne idée à creuser pour un moteur de recherche aux fonctionnalités poussées ;-)
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 19 juil. 2005 à 13:36
il manque les \ devant les .gif et companie...
#(\w*)(\.gif|\.jpg|\.jpeg|\.bmp|\.png)$#
il faut aussi que l'expression soit insensible à la casse.
cs_PaDa
Messages postés1804Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention22 septembre 20095 19 juil. 2005 à 13:33
Yop
Mon faible niveau en php me permet pas de commenter le code dans sa globalité, et je peux pas le tester la où je suis, mais.. à tout hasard t'as pas oublié d'échapper les points lorsque tu définis $listExtension ?
En l'état, ton pattern est le suivant :
#(\w*)(.gif|.jpg|.jpeg|.bmp|.png)$#
Ce qui reconnait bien test.jpg, test.gif mais aussi testgif
(et pas test.GIF d'ailleurs, ptet rajouter un "i" ?)
J'ai peut etre pas saisi tout le détail, donc ca reste une question naive ;)
Bonne continuation
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 juil. 2005 à 13:06
Hello,
si je peux me permettre, tu aurais mieux fait de faire renvoyer $tabFile, au lieu de le mettre global. Ca aurait ete plus logique que de renvoyer le nombre d'entrees qu'il possede.
Ta fonction devrait retourner le tableau contenant les fichiers. Apres, on en fait ce qu'on veut.
Pour les extensions...bah, beaucoup a deja ete dit la-dessus ;-)
Mais tester le type mime de l'image aurait ete plus judicieux a mon sens.
Et L'error_reporting a E_ALL marchait aussi bien ;-) Mais pourquoi pas, ca montre les possibilites.
Sinon c'est rigolo, mais ca fait mal aux yeux lol.
8 août 2005 à 10:36
$requete=mysql_db_query("SELECT * FROM membre",$db_base) or die(mysql_error());
ou des trucs dans ce genre la.
On s'est vraiment pris la tete pour pas grand chose, l'utilisation du 'or' se fait principalement dans les affectations avec des ressources (lecture de fichiers, connexion aux bases, ...).
Pour le 'and', je cherche une autre explication rationnelle ( a part, d'avoir la synthaxe or/and et non pas que or, pour l'instant je vois pas ;) )
23 juil. 2005 à 12:55
Personellement, j'ai toujours fait aec les || et &&...
23 juil. 2005 à 12:02
22 juil. 2005 à 20:54
22 juil. 2005 à 14:46
dans un sens oui, mais si tu t'interesse en premier lieu au résultat de fonc1 et de fonc2 ...
$retour=fonc1();
echo 'fonc 1 renvoi : "'.$retour.'" !
';
if ($retour=fonc2() && false!==$retour)
echo 'et fonc 2 : '.$retour.'
';
22 juil. 2005 à 14:40
fonct() et fonct2() retournant des valeurs booléennes
if ( ( fonct() && fonct2() ) !== false )
{
//traitement
}
22 juil. 2005 à 14:31
$retour=fonction...
if ($retour=(autre fonction qui peut renvoyer false) and $false!==$retour)
sera différent de :
if ($retour=(autre fonction qui peut renvoyer false) && $false!==$retour)
on ne peut vraiment utiliser ces lignes de codes que quand on se sert du retour d'une seule des deux fonction...
(l'exemple parait moins bidon ?)
20 juil. 2005 à 13:35
Perso je n'affecte jamais dans une condition, et j'utilise des parenthèses qui sont plus compréhensible que de changer et mettre des AND avec des && mélangés, d'ailleurs Grenard dit lui-même dans sa source sur la bonne programmation qu'il faut faire ça... Si lui-même n'applique pas ses conseils (sic)
20 juil. 2005 à 13:09
if (($a=5) === true and $a === 5)
ou
if (($a=5) === true && $a === 5)
parce que si on affecte 0, on est dans le caca...
Donc, on a des parentheses :-) lol.
20 juil. 2005 à 12:42
20 juil. 2005 à 12:29
est ce que l'affectation a reussi et est-ce que la variable est egale a x.
Ca ne veut pas dire :
affecte x a cette variable
est ce que cette variable est egale a x.
algorithmiquement parlant, comme le dit Garfield.
if ($data = 5)
renvoie true.
20 juil. 2005 à 11:25
Ouais, je suis ok avec toi. Cependant, je trouve ca pas très propre ( algorithmiquement parlant )
et creer 2 opérateurs rien que pour ca je trouve que c'est de l'artillerie très lourde ;)
20 juil. 2005 à 11:20
20 juil. 2005 à 11:06
Moi non plus mais bon on va attendre la réponse... (qui va bien me faire rire je pense)
20 juil. 2005 à 10:51
quand je disais :
"Pour la différence ok, mais ma question est ou en est l'interet ?
Si jamais t'as une réponse, je suis preneur"
C'était pour la différence entre le &&/|| et le and/or
Et tout comme malalam, j'attends une utilisation concrete de cette différence
20 juil. 2005 à 10:43
personnellement, je n'ai jamais mis dans une expression une affectation ET un operateur logique. Je ne vois pas d'exemple concret ou ca pourrait arriver.
19 juil. 2005 à 19:38
19 juil. 2005 à 19:11
de plus, les retours sont commenté, ce qui fait que tu sais a quoi correspond le code retourné
je l'aurais noté comme ca :
GARFIELD_E_FONCTION_NOMERREUR
comme quoi la notation des constantes sont différentes.
Pour la différence ok, mais ma question est ou en est l'interet ?
Si jamais t'as une réponse, je suis preneur
19 juil. 2005 à 18:54
Constante : GARFIELD_FILE_ERROR_FOLDER , si tu retrouves cette constante quelque part, c'est que tu n'es vraiment pas chanceux. Reste non convaincu si tu veux :P s'il y avait juste -1 ok, mais la, il y en a plusieurs... imagine que tu n'aies pas le fichier d'accompagnement ? tk...
19 juil. 2005 à 18:38
pour les constantes dans les modules de PHP, je le savais (preuve utilisation de E_ALL etc ) mais de tête, connais tu toutes les constantes qu'il employe, plus les constantes définies dans des packages que tu n'as pas fais, etc.
Pour les constantes, on arretes la ( je l'ai ajouterai pour une question de visibilité dans une version ultérieure, mais pour l'instant je ne suis pas convaincu )
19 juil. 2005 à 18:37
19 juil. 2005 à 18:29
perso, je trouve que faire une différence entre les 2 est une abbération ( un ET/OU logique reste un ET/OU logique )
J'ai plus l'impression que c'est une ruse de sioux pour faciliter des opérations ( opaque à mon point de vue )
Cependant, je ne vois pas l'interet d'affecter un variable pour la tester dans la même structure logique.
soit on fait
$test = 4;
...
if ( $test==5)
echo 'O1';
else
echo 'N1';
$test = 5;
soit
$test = 4 ;
...
$test = 5;
if ( $test==5)
echo 'O2';
else
echo 'N2';
Pour l'instant, le seul interet est le gain d'une ligne de code
Les resultats sont identiques aux tiens
En gros ,
'and' permet de faire une affectation avant un test et '&&' après
Je suis en attente d'une application réelle de cette différence car ce que tu nous montres c'est la différence de résultat
19 juil. 2005 à 18:20
Pour ce qui est de intval, tu peux faire ce que tu veux (bin oui c'est du php) mais c'est mal coder si tu ne le mets pas quand il faut le mettre. Parce que normalement tu ne peux pas faire string+int
19 juil. 2005 à 18:08
pour les $_GET et $_POST, j'aurais vu que ca ne marcherai pas donc $_POST['i'] = intval($_POST['i']) + 1 ; // pour etre vraiment sur mais je pense que le intval n'est pas nécessaire ( problème des langages non typé donc de PHP )
je ne vois pas trop l'interet de définir des constantes pour des erreurs sachant que la gestion des erreurs est spécifique à chaque fonction.
En plus, il existe un 'risque potentiel' ( faible mais existant ) de doublon de constante donc un test pour savoir si elle n'est pas déjà définie donc ta gestion d'erreur ne marche plus ou alors ca devient vite le bordel
Le seul interet ( que je vois ) de l'utilisation de constante pour la gestion des erreurs est la lisibilité donc peut etre que je le mettrai ( ceci étant aussi un but de ce script )
19 juil. 2005 à 18:06
Essaie ca malalam
<?php
$test = 4;
if ($test=5 && $test==5)
echo 'O1';
else
echo 'N1';
echo '
';
$test = 4;
if ($test=5 and $test==5)
echo 'O2';
else
echo 'N2';
?>
19 juil. 2005 à 17:47
On est d'accord, c'est ce que je dis plus haut en plus résumé ;-)
"mais normalement, dans ce cas là, on retourne soit -1 ou alors des constantes d'erreur !"
Idem que la remarque que tu m'avais faite vis à vis des majuscules dans la fonction header, ici je ne trouve pas qu'il y ait de "normalité". Tu peux retourner ce que tu veux dans une fonction, un nombre étant plus rapide à traiter qu'une constante, autant retourner un nombre, qu'il soit négatif ou non, ce n'est qu'un nombre après tout, non ?
19 juil. 2005 à 17:45
On est d'accord, c'est ce que je dis plus haut en plus résumé ;-)
"mais normalement, dans ce cas là, on retourne soit -1 ou alors des constantes d'erreur !"
Idem que la remarque que tu m'avais faite vis à vis des majuscules dans la fonction header, ici je ne trouve pas qu'il y ait de "normalité". Tu peux retourner ce que tu veux dans une fonction, un nombre étant plus rapide à traiter qu'une constante, autant retourner un nombre, qu'il soit négatif ou non, ce n'est qu'un nombre après tout, non ?
19 juil. 2005 à 17:45
19 juil. 2005 à 17:43
Côté $_SESSION, t'es chanceux, il garde les types (test|i:4;) (i signifie integer). Donc ok, il n'y a pas de problème... Mais c'est différent pour les POST et GET qui sont toujours en string...
Si tu retournes des integer positif à la normal, ok alors, j'avais pas scruter le script non plus :P mais normalement, dans ce cas là, on retourne soit -1 ou alors des constantes d'erreur ! (ca je ne l'ai pas écrit dans la bonne prog lol, mais ca se passe plutot avec des classes)
19 juil. 2005 à 17:14
19 juil. 2005 à 17:00
Les operateurs de comparaisons et operateurs logiques autres sont de toutes facons au-dessus.
19 juil. 2005 à 16:51
19 juil. 2005 à 16:48
le coup du "and" , ca m'a échappé d'habitude j'utilise && .
j'ai lu le lien, pour moi il s'agissait purement et simplement d'alias, je crois que je vais garder mes habitudes ;)
des types en php?
normalement, il doit prendre le type de la valeur passé à l'initialisation donc c'est un entier mais peut etre me trompe je.
les erreurs sont négatives car cela permet de les différenciés et ne pas les confondre avec le nombre de valeurs dans tabFile.
Au fait, en cas est ce rare ?
pour les ' et ", les mauvaises habitudes ont la vie dure et à 4h du mat ( j'étais un peu crevé, excuse bidon ;) )
Je corrige ca un peu plus tard
Comme d'hab, t'as des commentaires pertinents
19 juil. 2005 à 16:47
Peut-être aussi pour une question de goût ? je préfère le OR et AND je trouve ça plus propre :-) et ça ne m'a mais alors absolument jamais posé problème dans mes scripts.
19 juil. 2005 à 16:31
cf mon tutorial sur la bonne programmation
http://www.phpcs.com/code.aspx?id=24870
(Je dis ca parce que t'as marre des sources crades ;))
Je sais pas ce qui vous prend mais vous êtes de plus en plus à utiliser "and" plutôt que "&&" et "or" plutôt que "||". C'est pas interdit, mais ATTENTION à la "Précédence des opérateurs" (http://ca.php.net/manual/fr/language.operators.php). Ces 2 opérateurs logiques n'ont pas du tout la même précédence...
19 juil. 2005 à 15:22
Pour les autres fichiers, on s'en fout un peu.
19 juil. 2005 à 14:53
donc a chaque fois que tu traites un fichier, tu testes si le code mime est bon ;)
la rien ne dit qu'il y ai eu upload avant (pour les paranos, on peut dire aussi import de fichier(s) non mis par l'administrateur), donc t'as une fonction ou une classe qui vérifie tout ca (je vais peut etre m'en faire une, tiens ;))
sur ce je retourne taffer
19 juil. 2005 à 14:50
Si tu veux vraiment etre propre, reste coherent (mais bon je fais pareil lol) :
# if ( ! is_string($_dir) )
# {
# return -2 ; // erreur : $_dir n'est pas une chaine de caractere
# }
#
# if (!is_array($allowExtension) ){
Les deux if () sont differents quant auy espaces.
Pareil ici :
# if ( is_dir($_dir) ){
# if ($dh = opendir($_dir)) {
Et un peu partout en fait.
include "function/function.php";
=> personnellement je prefere require (qui affiche une erreur si la page n'est pas la), et generalement require_once () aui n'inclue la page qu'une seule fois.
Je n'aime pas les switch () mais ca, c'est une question de gouts.
19 juil. 2005 à 14:09
malalam > j'ai utilisé la variable globale pour éviter d'avoir un parametre supplémentaire mais ca rend le source encore plus propre donc je vais le prendre en compte
de meme pour le type mime
le script n'est pas sur le test des extensions, c'est juste un source pour faire un code propre pour montrer aux jeunes (comprendre pour l'experience et non l'age) développeurs ce qui faut faire et de montrer des fonctions 'achement utile mais souvent méconnues donc mal exploitées.
Pouvez vous aussi me critiquer (positif et négatif) sur la manière de coder afin que ce code soit plus un exemple de code a faire plutot qu'un script en lui meme
19 juil. 2005 à 14:03
19 juil. 2005 à 13:54
19 juil. 2005 à 13:53
vu que c'est un formulaire de recherche autant bosser sur les extensions de fichiers, bosser sur le type mime serait ultra gourmand, mais c'est une bonne idée à creuser pour un moteur de recherche aux fonctionnalités poussées ;-)
19 juil. 2005 à 13:36
#(\w*)(\.gif|\.jpg|\.jpeg|\.bmp|\.png)$#
il faut aussi que l'expression soit insensible à la casse.
19 juil. 2005 à 13:33
Mon faible niveau en php me permet pas de commenter le code dans sa globalité, et je peux pas le tester la où je suis, mais.. à tout hasard t'as pas oublié d'échapper les points lorsque tu définis $listExtension ?
En l'état, ton pattern est le suivant :
#(\w*)(.gif|.jpg|.jpeg|.bmp|.png)$#
Ce qui reconnait bien test.jpg, test.gif mais aussi testgif
(et pas test.GIF d'ailleurs, ptet rajouter un "i" ?)
J'ai peut etre pas saisi tout le détail, donc ca reste une question naive ;)
Bonne continuation
19 juil. 2005 à 13:06
si je peux me permettre, tu aurais mieux fait de faire renvoyer $tabFile, au lieu de le mettre global. Ca aurait ete plus logique que de renvoyer le nombre d'entrees qu'il possede.
Ta fonction devrait retourner le tableau contenant les fichiers. Apres, on en fait ce qu'on veut.
Pour les extensions...bah, beaucoup a deja ete dit la-dessus ;-)
Mais tester le type mime de l'image aurait ete plus judicieux a mon sens.
Et L'error_reporting a E_ALL marchait aussi bien ;-) Mais pourquoi pas, ca montre les possibilites.
Sinon c'est rigolo, mais ca fait mal aux yeux lol.