Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#27 Le 17/12/2010, à 01:38

Morgiver

Re : /* Topic des codeurs couche-tard [3] */

Bonsoir les gens smile

J'ai un problème avec PDO, il me fait cette erreur :

Fatal error: Call to a member function prepare() on a non-object in

Pourtant je déclare une variable de nouvelle connexion dans mon fichier config.php, comme ceci :

$bdd = new PDO('mysql:host=serveur;dbname=base', 'user', 'mdp');

Bref, l'utilisation se fait dans une fonction contenu dans une class, betement comme ceci :

$requete = $bdd->prepare('REQUETE');

Je comprend pas trop, y a t-il une manière spéciale pour utiliser PDO dans une class ?
Je suis en train de découvrir les class, donc je ne suis pas encore au fait des différentes spécificités des class tongue

Merci d'avance aux couche tard smile

EDIT : Voici la fonction en question :

    public function creer_categorie()
    {
        if($this->id_parent != 0)
        {
            $requete = $bdd->prepare('SELECT nom FROM cat_contenu WHERE id = :id');
            $requete->execute(array('id' => $this->id_parent));
            $donnees = $requete->fetch();
            $this->parent = $donnees['nom'];
        }

        $requete2 = $bdd->prepare('INSERT INTO cat_contenu (nom, id_parent, parent, position, description)
                        VALUES (:nom, :id_parent, :parent, :position, :description)');
        $requete2->execute(array(
        'nom' => $this->nom,
        'id_parent' => $this->id_parent,
        'parent' => $this->parent,
        'position' => $this->position,
        'description' => $this->description));

        echo 'Catégorie bien enregistrée !';
    }

Sur les deux prepare il m'a fait une erreur. Au départ il n'y avait pas le if pour tester si la catégorie appartenait à une autre ou simplement à la racine. Quand j'ai mis le if, l'erreur est passée sur le deuxième prepare().
Donc apparement, je dois appeler la fonction d'une façon précise étant dans une class, non ?

Dernière modification par Morgiver (Le 17/12/2010, à 01:44)

Hors ligne

#28 Le 17/12/2010, à 01:47

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

Tu le dis toi-même: tu traites la lecture et la vérification de la validité séparément. Dès lors, pourquoi donc faire un premier filtrage avec scanf? C'est parfaitement inutile. Je ne vois pas de danger ici, c'est juste que la syntaxe associée à cette fonction est vraiment tordue... Et pour des gens qui débutent, ils verront un scanf et ne se poseront pas de questions, ce qui pousse inévitablement à de l'utilisation de scanf hasardeuse.
Mais sinon, pour info et argumenter encore un peu: scanf ne gère pas ERANGE wink


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#29 Le 17/12/2010, à 02:00

Kanor

Re : /* Topic des codeurs couche-tard [3] */

tongue

Hors ligne

#30 Le 17/12/2010, à 02:04

grim7reaper

Re : /* Topic des codeurs couche-tard [3] */

@Morgiver : désolé, mes connaissances en PHP sont très limitées (voire nulle) donc je ne peux pas t'aider. Peut-être qu'ArkSeth en saura plus…


Rolinh a écrit :

Tu le dis toi-même: tu traites la lecture et la vérification de la validité séparément. Dès lors, pourquoi donc faire un premier filtrage avec scanf?

Tu m'as mal compris (ou alors je me suis mal exprimé, c'est fort possible à cette heure-ci smile). Il faut distinguer le fond de la forme.
J'attends une chaîne formatée d'une certaine manière (c'est dans les spec') donc pour la lire j'utiliser une fonction de lecture formaté. Rien de plus normal. Ici c'est la forme que je traite.
La vérification de validité que je fais par le suite porte sur les valeurs (mois bien compris entre 1 et 12, etc). C'est là que je traite le fond et c'est ce traitement qui n'a rien à voir avec la lecture (et qui est donc fait à part).
Je sépare la syntaxe de la sémantique si tu préfères.

C'est parfaitement inutile. Je ne vois pas de danger ici,

On est d'accord alors, scanf est sûre donc aucun intérêt d'utiliser fgets ou autre action sémantiquement hasardeuse dans ce cas.

c'est juste que la syntaxe associée à cette fonction est vraiment tordue...

Bof. C'est une question d'habitude, je te l'accorde. Mais au final, c'est à peine plus tordu que printf.

Et pour des gens qui débutent, ils verront un scanf et ne se poseront pas de questions, ce qui pousse inévitablement à de l'utilisation de scanf hasardeuse.

Encore une fois, je ne suis pas responsable de l'incompétence des gens (oui, utiliser une fonction sans la maîtriser c'est, au mieux, de l'incompétence). Je ne vais pas me brider pour eux…

Mais sinon, pour info et argumenter encore un peu: scanf ne gère pas ERANGE wink

Oui je sais (enfin, le standard ne le garantis pas, ça n'est pas la même chose qu'une absence totale bien que ça soit presque pareil), mais il n'y a aucune chance de dépassement sur 8 chiffres.


Sur ce, je m'arrête là pour ce soir car demain j'ai encore du boulot.

BN World !

Hors ligne

#31 Le 17/12/2010, à 02:17

Morgiver

Re : /* Topic des codeurs couche-tard [3] */

Je sais pas si c'est la bonne méthode, mais j'ai fait passer ma variable $bdd dans les attribut de la fonction. Ca a l'air de fonctionner smile

Hors ligne

#32 Le 17/12/2010, à 02:20

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

grim7reaper a écrit :

On est d'accord alors, scanf est sûre donc aucun intérêt d'utiliser fgets ou autre action sémantiquement hasardeuse dans ce cas.

Ne me fais pas dire ce que je n'ai pas dit! scanf reste une fonction pourrie et ce n'est pas plus compliqué d'utiliser fgets ou autre. Mais j'arrête le débat ici, je vais aussi me coucher. BN les codeurs!


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#33 Le 17/12/2010, à 02:31

Кຼزດ

Re : /* Topic des codeurs couche-tard [3] */

Hop.


dou

Hors ligne

#34 Le 17/12/2010, à 03:01

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

Argh, je rêve de scanf, j'arrive pas à dormir tongue
(mouahaha ^^)
Allez, vraiment bn cette fois


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#35 Le 17/12/2010, à 07:52

grim7reaper

Re : /* Topic des codeurs couche-tard [3] */

Hello World !

Le robot va « planter » grâce à nesthib :]


Rolinh a écrit :

scanf reste une fonction pourrie

Je me demande ce que t'a fait cette fonction pour que tu la déteste autant … roll.

et ce n'est pas plus compliqué d'utiliser fgets ou autre.

Non c'est sûr, ce n'est pas plus compliqué d'utilisé fgets c'est juste qu'au niveau sémantique c'est aussi faux que de faire printf(buffer) ou printf("%s", buffer).
J'avais déjà rencontré des anti-goto, je vois qu'il y a aussi les phobiques du scanf ^_^

J'ai peut-être l'air d'être campé sur ma position, mais jusqu'a maintenant vous ne m'avez pas fourni de très bon arguments pour me faire changer d'avis. En résumé, vous me dites :

Il y a mieux que scanf(3)

elle est facilement remplaçable par des fonctions comme fgets

Je serai curieux de voir quelle est cette fameuse fonction meilleure que scanf étant donné que jusqu'à maintenant vous ne m'avez proposé qu'une fonction, fgets, à une sémantique différente (c'est comme si vous m'aviez conseillé puts en remplacement à printf…)

scanf(3) c'est dangereux

Ok admettons, mais prouvez moi que c'est plus dangereux qu'une autre fonction. Car pour le moment, les seuls « dangers » que vous m'avez montré viennent d'une mauvaise utilisation. Les format string attack viennent d'une erreur flagrante dans l'utilisation de scanf et pour la vérification des types le compilo produit un warning (ce qui est suffisant pour toute personne un tant soit peu sérieuse).
Des fonctions dangereuses car mal utilisées, j'en connais un paquet mais dans ce cas ce n'est plus la faute de la fonction mais celle du développeur.

Et pour des gens qui débutent, ils verront un scanf et ne se poseront pas de questions, ce qui pousse inévitablement à de l'utilisation de scanf hasardeuse.

Encore une fois, je n'y peux rien si les gens ne testent pas le retour de scanf, ne limite pas le nombre de caractères à lire, etc. Ce n'est pas la fonction qui est dangereuse, ce sont les gens qui l'utilisent.

la syntaxe associée à cette fonction est vraiment tordue

Ça c'est subjectif (de plus, je ne t'ai pas entendu te plaindre à propos de printf pour la syntaxe). Personnellement, je trouve là syntaxe de Python tordue (ce qui est totalement subjectif) ce n'est pas pour autant que je dis qu'il ne faut pas l'utiliser.


Vous comprendrez donc qu'il me faudrait des arguments un peu plus solide que ça pour que je change d'avis…

Dernière modification par grim7reaper (Le 17/12/2010, à 08:31)

Hors ligne

#36 Le 17/12/2010, à 08:29

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

Bah, je ne suis pas le seul en tout cas smile

Pour goto c'est différent. Ce n'est pas une mauvaise structure en soit mais si on la donne à des débutants, elle est souvent utilisée abusivement et de très mauvaise manière, ce qui conduit à rendre du code incompréhensible. C'est un peu comme pour les variables globales: il faut que cela soit justifié.
Mauvais:

for (i = 0; i < TRUCMAX; i++){
        if (condition)
                goto erreur;
        else{
                <du code>
        }
}
erreur:
               <code>

Justifié:

for (i = 0; i < TAILLEA; i++){
       for (j = 0; j < TAILLEB; j++){
                if (condition)
                        goto erreur;
                else{
                       <code>
                }
        }
}
erreur:
        <code>

Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#37 Le 17/12/2010, à 08:32

grim7reaper

Re : /* Topic des codeurs couche-tard [3] */

J'ai édité pendant ta réponse ^_^.

Sinon, goto, variables globale et scanf c'est plus ou moins le même combat : réputation de merde à cause des gens qui les utilisent à tort et à travers.

Je suis en train de lire tes liens…

Par contre, qu'on soit bien d'accord même si j'écris scanf on parle bien de fscanf (car c'est de là que le débat est parti, quand j'ai conseillé fscanf à ArkSeth). Il est évident qu'il est hasardeux d'utiliser scanf vu qu'a l'autre bout de stdin c'est généralement un utilisateur et que ce dernier ne produit pas forcément (même plutôt rarement) des données formatées.

Sinon, pour la Question 12.19, soit le fichier est vraiment formaté (donc il utilise, comme je l'ai fait, les bons spécificateurs) soit elle ne l'est pas (si le nombre de chiffre varie par exemple, scanf n'est pas adapté, elle fait des lectures formatées mais ça reste limité, on est en C donc c'est pas non plus très haut niveau comme fonction) et auquel cas il utilise bien fgets & cie.

Sur ce, faut que j'aille bosser.

Dernière modification par grim7reaper (Le 17/12/2010, à 08:44)

Hors ligne

#38 Le 17/12/2010, à 08:46

helly

Re : /* Topic des codeurs couche-tard [3] */

42.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#39 Le 17/12/2010, à 08:47

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

Jette un oeil aux liens que je t'ai passé wink

(...) If you pay attention, it will tell you whether it succeeded or failed, but it can tell you only approximately where it failed, and not at all how or why. You have very little opportunity to do any error recovery. (...)

(...) A well-designed user interface will allow for the possibility of the user typing just about anything--not just letters or punctuation when digits were expected, but also more or fewer characters than were expected, or no characters at all (i.e. just the RETURN key), or premature EOF, or anything. It's nearly impossible to deal gracefully with all of these potential problems when using scanf; it's far easier to read entire lines (with fgets or the like), then interpret them, either using sscanf or some other techniques. (...)

(...)scanf reads from stdin, which is usually an interactive keyboard and is therefore the least constrained, leading to the most problems. When a data file has a known format, on the other hand, it may be appropriate to read it with fscanf.(...)

et le reste dans les liens...

Dernière modification par Rolinh (Le 17/12/2010, à 08:48)


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#40 Le 17/12/2010, à 08:54

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

grim7reaper a écrit :

Par contre, qu'on soit bien d'accord même si j'écris scanf on parle bien de fscanf (car c'est de là que le débat est parti, quand j'ai conseillé fscanf à ArkSeth). Il est évident qu'il est hasardeux d'utiliser scanf vu qu'a l'autre bout de stdin c'est généralement un utilisateur et que ce dernier ne produit pas forcément (même plutôt rarement) des données formatées.

Hein? Ben non, je parlais de scanf et pas de fscanf!
Quand je veux parler d'un canard, je mentionne un canard et pas un gallinacé... wink

grim7reaper a écrit :

soit le fichier est vraiment formaté

Ben c'est là d'où on est mal partit: je ne parlais pas de lire un fichier, je parlais bien de scanf et non pas de fscanf.

Ceci dit: qu'est-ce qui te garantit que ton fichier est bien formaté? C'est un peu le même débat...

Dernière modification par Rolinh (Le 17/12/2010, à 09:18)


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#41 Le 17/12/2010, à 10:53

nesthib

Re : /* Topic des codeurs couche-tard [3] */

ploop o/
et désolé pour le TdCCT [2], j'ai pas regardé en postant hmm

sinon bonne nouvelle je vais peut être avoir un peu plus de temps pour coder \o/

/me is back ! (ou pas ?)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

Hors ligne

#42 Le 17/12/2010, à 10:55

helly

Re : /* Topic des codeurs couche-tard [3] */

Le doc a parlé \é-"a
/
edit : oO clavier de merde qui permet même pas de taper de l'utf mad.

Dernière modification par helly (Le 17/12/2010, à 10:56)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#43 Le 17/12/2010, à 12:06

Elzen

Re : /* Topic des codeurs couche-tard [3] */

J'crois qu'on devrait instaurer une règle (sans vouloir vexer personne) : à moins que ce soit pour troller pour le plaisir, aucun langage, aucune fonction ni rien de ce genre ne devrait être taxé de mauvais ou de à ne pas utiliser aux seuls motifs des goûts esthétiques personnels de la personne qui parle ou du fait que la plupart des gens qui s'en servent ne sachent pas s'en servir.
Nous sommes une communauté d'entre-aide de codeurs (couche-tard, mais là c'est pas le propos ^^) ayant pour principes une certaine propreté du code, un respect des normes et tout ce qui va avec, donc je pense qu'on peut partir du principe que si l'on peut faire les choses correctement, c'est largement plus profitable à tous de le faire (en donnant les bonnes références et tout pour aider ceux qui débutent) que de faire des pages entières pour dénigrer.

Morgiver a écrit :

J'ai un problème avec PDO, il me fait cette erreur :

Fatal error: Call to a member function prepare() on a non-object in

Oùhlà, désolé, j'ai quasiment jamais fait d'objet en PHP (d'ailleurs il me semblait qu'on utilisait « :: » et pas « -> » hmm)
Mais d'après le message d'erreur, je dirais que la variable sur laquelle tu tentes d'appeler prepare() n'est pas un objet. Donc vérifie que la création s'est bien passée, et que ta variable n'a pas été écrasée entre temps.

Hors ligne

#44 Le 17/12/2010, à 13:06

The Uploader

Re : /* Topic des codeurs couche-tard [3] */

Pylade a écrit :

Ouais, pour coder il faut un éditeur de texte, un compilateur ou un interpréteur, et éventuellement un make ou un débuggeur.

Et si je veux la complétion de code ou autre chose qu'apporte un IDE je fais comment ? tongue (oui VIM fait l'omnicomplétion, mais si j'ai pas envie d'utiliser VIM ?)

Sinon, à quoi ça sert ces trucs lourds

pas chez moi.

et inconfigurables ?

J'ai juste envie de dire lol.

En plus on a du mal à voir réellement ce qu'on fait avec

WTF, ah bon ? Faut pas confondre Netbeans et Windev non plus...

 ; et ensuite c'est la galère pour distribuer son code…

c'est à dire ?

essaie de gérer un gros projet avec plein de fenêtres ouvertes (un terminal pour les man, un autre pour compiler, et peut-être encore un autre pour git) +1 un éditeur de texte (j'préfère un éditeur de code, et avec des onglets, c'est déjà un peu mieux), t'auras comme moi vite marre de faire Alt-tab ou de changer de bureau... roll

Dernière modification par The Uploader (Le 17/12/2010, à 13:16)


Passer de Ubuntu 10.04 à Xubuntu 12.04 LTS
Archlinux + KDE sur ASUS N56VV.
ALSA, SysV,  DBus, Xorg = Windows 98 !
systemd, kdbus, ALSA + PulseAudio, Wayland = modern OS (10 years after Windows, but still...) !  Deal with it !

Hors ligne

#45 Le 17/12/2010, à 13:08

tshirtman

Re : /* Topic des codeurs couche-tard [3] */

chez moi vim complémente pas mal de choses, chez d'autres il complémente encore plus (methodes sur les objets, paramettres) j'ai juste la flemme de le mettre en place… (et j'ai bpython pour ça ^^)

edit: en fait j'avais besoin de connaitre ctrl-x ctrl-o…

(j'ai des tabulations dans vim, et des buffers, j'ai wmii qui m'organise mes terminaux comme je veux, mon bureau est un IDE wink)

Dernière modification par tshirtman (Le 17/12/2010, à 13:17)

Hors ligne

#46 Le 17/12/2010, à 13:24

The Uploader

Re : /* Topic des codeurs couche-tard [3] */

Et tes terminaux ils ont tous le focus en même temps ? tongue

Avec un IDE, l'interface chaise/clavier local (moi) ne perd plus son temps à changer de contexte, tout simplement.. wink


Passer de Ubuntu 10.04 à Xubuntu 12.04 LTS
Archlinux + KDE sur ASUS N56VV.
ALSA, SysV,  DBus, Xorg = Windows 98 !
systemd, kdbus, ALSA + PulseAudio, Wayland = modern OS (10 years after Windows, but still...) !  Deal with it !

Hors ligne

#47 Le 17/12/2010, à 13:25

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

@ArkSeth: je comprend ta motivation. Cependant, il me semble que le débat est resté courtois: on a juste procédé à un échange d'arguments. Personnellement, je trouve cela intéressant si ça ne vire pas au débat stérile et je suis toujours prêt à me remettre en question.
Je voulais juste relever que scanf est une fonction très délicate et qu'il faut vraiment l'utiliser avec précaution (personnellement, je ne l'utilise jamais) mais je pense que le débat peut s'arrêter là.
Par ailleurs, je n'ai jamais cherché à dénigrer qui que ce soit. Si quelqu'un l'a pris comme cela, alors je m'en excuse mais ce n'en était absolument pas le but.
Et par ailleurs: ++ pour la communauté d'entraide: pour moi c'est bien là le but de ce topic.

@Morgiver: désolé, je n'aime pas PHP (avis purement subjectif tongue (ou pas ^^)) et je ne fais que le minimum syndical avec donc je ne pourrais pas t'aider non plus sad

@theuploader: je crois qu'il te faut une démonstration vidéo. J'utilise aussi un environnement tiling (awesome), avec urxvt deamonisé, et vim et franchement je n'ai besoin de rien d'autre. Une fois bien configuré le tout, c'est que du bonheur (et si jamais, tu peux très bien compiler depuis vim sans avoir à ouvrir un terminal pour cela (même si je trouve plus pratique))

Dernière modification par Rolinh (Le 17/12/2010, à 13:29)


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#48 Le 17/12/2010, à 13:26

grim7reaper

Re : /* Topic des codeurs couche-tard [3] */

@nesthib : \o/


@ArkSeth : Je suis d'accord, mais là justement je cherche à rendre justice à scanf lol
Je ne dénigre rien.
Cela dit, on troll rarement pour le troll (ça arrive, mais en général il en sort des choses constructrives et/ou instructives)


Rolinh a écrit :

Jette un oeil aux liens que je t'ai passé wink

Justement, parlons-en :].
Question 12.18a : le code fonctionne bien si on connait scanf et qu'on vide bien le buffer quand il y a problème.
Question 12.17 : suffit de lire le man.
Question 12.19 : même connerie que 12.18

Encore une fois, on utilise scanf sans connaître son comportement alors ça merde…

Rolinh a écrit :

Hein? Ben non, je parlais de scanf et pas de fscanf!
Quand je veux parler d'un canard, je mentionne un canard et pas un gallinacé... wink

Bah le débat est parti du fait que j'ai conseillé fscanf à ArkSeth, si vous changez de sujet en cours de route faut le dire aussi…
Enfin, ça ne change rien à ce que j'ai dit (mis à part que je suis moins partisan de scanf étant donné la composante utilisateur) et à mon avis sur vos arguments.

Ben c'est là d'où on est mal partit: je ne parlais pas de lire un fichier, je parlais bien de scanf et non pas de fscanf.

Et tu n'as pas percuté que mon bout de code avec les formats c'était du fscanf roll

Ceci dit: qu'est-ce qui te garantit que ton fichier est bien formaté? C'est un peu le même débat...

Je ne vois pas le problème, à partir du moment où je vérifie la validité des données.

Dernière modification par grim7reaper (Le 17/12/2010, à 13:32)

Hors ligne

#49 Le 17/12/2010, à 13:30

Rolinh

Re : /* Topic des codeurs couche-tard [3] */

@grim7reaper: j'ai précisé que pour moi le débat était clos smile
J'ai l'impression que l'on commence à importuner des gens alors ce n'est pas la peine de continuer.


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#50 Le 17/12/2010, à 13:35

grim7reaper

Re : /* Topic des codeurs couche-tard [3] */

Hého, faut me laisser le temps aussi :  je n'avais pas encore lu ton dernier post

Rolinh a écrit :

Je voulais juste relever que scanf est une fonction très délicate et qu'il faut vraiment l'utiliser avec précaution (personnellement, je ne l'utilise jamais) mais je pense que le débat peut s'arrêter là.

Je suis d'accord avec cette conclusion.

Cela dit, si on gêne les gens qu'ils le disent clairement : ils ont des mains (ou équivalent) ils peuvent donc l'écrirent. Quand il y a débat je débat, si ça dérange on me le dit et je vais terminer le débat ailleurs smile

Dernière modification par grim7reaper (Le 17/12/2010, à 13:36)

Hors ligne

Haut de page ↑