IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PDO - mysqli et mvc : conseils


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut PDO - mysqli et mvc : conseils
    Bonjour,

    je suis novice autodidacte en PHP et Mysql.

    j'ai lu attentivement des articles sur PDO/Mysqli et j 'ai lu le post PDO vs Mysqli de Celira.


    j'ai lu également que PDO allait devenir le "standard" car utiliser par tous, plus intuitif, harmonisation......? même si avec msqli on avait le choix de faire de la POO ou coder en procédurale (si j'ai bien compris). Est-ce vrai ? faut-il tout de suite m'orienter sur cette voie ?

    Ce que je ne voudrais pas, c'est me lancer sur une mauvaise piste et devoir recoder par la suite ?


    J'aimerai également dans la limite de mes compétences acquérir de bonnes pratiques. Organiser ma future application selon l'approche “Modèle, Vue, Contrôleur”.
    Avez-vous des tutoriels simples ou une littérature avec TP pour commencer à travailler dessus.

    Autrement dit, quels seraient les bons conseils pour bien m'organiser dès le départ et faire le moins d'erreurs possibles.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- PDO.

    2- "modèle MVC"

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Merci pour la promptitude de votre réponse

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par bricoreur Voir le message
    j 'ai lu le post PDO vs Mysqli de Celira.
    Je crois que tu as déjà ma réponse sur le sujet

    Pour le reste, tu as grosso modo 3 options :
    Coder à l'ancienne en procédural (ou majoritairement)
    Coder en POO complète (notamment en suivant un modèle MVC)
    Coder en utilisant un framework

    Personnellement, j'ai tendance à considérer que ça dépend du besoin. Inutile de monter un système complet si tu as un site majoritairement statique et que tout ce que tu veux faire c'est un formulaire de contact et un compteur de visites.
    Inversement, si tu dois gérer un système de données complexe et des pages dynamiques dans tous les sens, ça sera plus simple de faire un modèle clair et des vues bien séparées.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    merci Celira pour votre article et votre réponse

    je coderai dorénavant en POO complet (du moins je vais essayer). Je vous soumets mon code POO + AJAX que j'avais écrit avec msqli. Il marche mais est-ce correct ?

    Et si j'ai bien compris le bindValue : je serai protéger contre des injections SQL en respectant cette démarche ?

    Traitement
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    
    
    // faut-il continuer à récupérer les POST ainsi ?
    $titre = $_POST['titre']; 
    $edition = $_POST['edition'];
    $resume = $_POST['resume'];
    
    $user = 'root';
    $pass = '';
    
    
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    } 
    catch (PDOException $e)
    {
        print "Erreur !: " . $e->getMessage() . "<br/>";
        die();
    }
    
    
    
    $query = ("SELECT * FROM livres1 WHERE titre = :titre AND edition = :edition AND resume = :resume ");
    $prep = $bdd->prepare($query);
    
    
    // sécurité ?
    $prep->bindValue('titre', $titre, PDO::PARAM_STR);
    $prep->bindValue('edition', $edition, PDO::PARAM_STR);
    $prep->bindValue('resume', $resume, PDO::PARAM_STR);
    
    
    
    $prep->execute();
    
    
    
    $arr = $prep->fetch();
    
    
    		if ($arr !== false)
    			{
    				echo ('CET ENREGISTREMENT EXISTE DEJA');
    				//var_dump($arr);
    			}
    		else 
    			{
    				echo ('ENREGISTREMENT REALISE');
    			}		
    
    $prep->closeCursor();
    
    
    $bdd = null;
    
    ?>

    je pense que du côté du formulaire avec Ajax, rien ne change

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
    	<title> PHP et Ajax</title>
    	<meta http-equiv="Content-type" content="text/html" />
    	<script language="javascript" src="requete.js"></script>
    	<script type="text/javascript" language="javascript">
     
     
                    function Search()
                    {
                            oTitre = document.getElementById('titre').value;
                            oEdition = document.getElementById('edition').value;
                            oResume = document.getElementById('resume').value; 
     
     
                            var requete = creerRequete();
                            var url = "ajaxphp_post.php";
     
                            // UTILISER POST
                            requete.open("POST",url,true);
                            requete.onreadystatechange = function () {
                                    afficherResultat(requete);
                            }
     
     
                            // setRequestHeader
                            requete.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     
                            //send
                            requete.send("titre=" + encodeURI(oTitre) + "&edition=" + encodeURI(oEdition) + "&resume="+ encodeURI(oResume));
     
                    }
     
     
                    function afficherResultat(requete)
                    {
                            if(requete.readyState == 4 && requete.status == 200){
                                    oMondiv = document.getElementById("mondiv");
                                    oMondiv.innerHTML = requete.responseText;
     
                            }
                    }
     
    </script>
    </head>
    <body> 
    	<h2>Rechercher un livre</h2>
    	<div id="mondiv">
    		<form id="monform">
     
    <p>Titre du livre : <input id="titre" type="text" /></p>
    <p>Edition du livre : <input id="edition" type="text"/></p>
    <p>Resume du livre : <input id="resume" type="text" /></p>
    <p>Generation : <input id="generation" type="text"></p>
     
    <input id="controle" type="button" value="controle" onclick="Search()"></p>
     
    		</form>
    	</div> 		
     
    </body>
    </html>

    Par ailleurs, en essayant de comprendre (je vous rappelle que j'en suis à mes débuts), j'ai lu sur d'autres forums/cours :

    " PDO ne vous montre pas les erreurs SQL. Les erreurs PHP ne sont pas influencées par PDO, elles sont influencées par la configuration de PHP.
    Autrement dit, l'erreur que vous pouvez voir sur le fetch() est une erreur PHP causée indirectement par une erreur SQL que vous ne voyez pas."

    il préconise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    // Je construis mon objet, puis je donne le paramètre à PDO::setAttribute() :
    $pdo = new PDO('mysql:host=localhost;dbname=DBNAME', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    // Je construis mon objet, puis je donne le paramètre à PDO::setAttribute() :
    $pdo = new PDO('mysql:host=localhost;dbname=DBNAME', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    Que prendre si cela est juste ? ou y-at'il mieux encore ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    ...je coderai dorénavant en POO complet...
    Ne confonds pas PDO (PHP Data Objects) avec POO (Programmation Orienté Objet).
    Ce sont 2 choses bien distinctes.
    (la POO est à opposer à "Programmation procédurale")

    A LIRE :



  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Désolé, voilà où j'en suis :

    POO : programmation orienté objet qui est opposé au "codage procédural" (ça j'avais compris)

    Si j'avais bien lu, avec mysqli, on pouvait faire du codage "procédural" ou 'orienté objet".


    PDO : on créé un objet afin de se connecter à une base de données .

    Question : est-il juste de dire que l'on code orienté objet puisque l'on créé un objet ?




    Si j'ai bien compris ? , je vais dorénavant tenter de coder en Orienté Objet et non plus en procédural et je me connecterais via PDO.

    j'espère que c'est correct et merci pour le 2ème lien que je vais étudier. Le premier, je vais le relire.

    Bien à vous

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Issu du tutoriel : exemple de connexion :

    ".................................
    1-E. Version 6 (PDO/POO) : à venir (?)▲

    Une version en POO (Programmation Orientée Objet) est en cours... ...dès que j'aurais compris et maitrisé la POO...

    ........................"

    j'ai donc ma réponse. Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Une version en POO (Programmation Orientée Objet) est en cours... ...dès que j'aurais compris et maitrisé la POO...
    Oui... mais bon... Je ne m'y suis toujours pas mis...
    J'ai du mal avec l'"abstrait" !
    Dernière modification par Invité ; 06/04/2018 à 18h13.

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par bricoreur Voir le message
    PDO : on créé un objet afin de se connecter à une base de données .

    Question : est-il juste de dire que l'on code orienté objet puisque l'on créé un objet ?
    Oui mais non Tu peux coder un script (majoritairement) procédural qui utilise des objets. Pour faire extrêmement simplifié : tu codes en POO à partir du moment où tu écris tes propres classes. Si tu utilises les classes natives de PHP, c'est (à peu près) pareil que si tu utilisais les fonctions procédurales natives de PHP.

    ça fait partie des "charmes" de PHP : pouvoir mélanger objet et procédural, les variables faiblement typées... On peut faire tout et n'importe quoi avec PHP, la difficulté consistant à ne pas faire n'importe quoi


    Par rapport au code cité plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // faut-il continuer à récupérer les POST ainsi ?
    $titre = $_POST['titre'];
    Oui, parce qu'il n'y a pas d'autre méthode (à part $_REQUEST, mais je déconseille d'utiliser $_REQUEST si possible)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = ("SELECT * FROM livres1 WHERE titre = :titre AND edition = :edition AND resume = :resume ");
    $prep = $bdd->prepare($query);
    // sécurité ?
    $prep->bindValue('titre', $titre, PDO::PARAM_STR);
    Bien : le fait d'utiliser une requête préparée va faire les échappements sur ta donnée, et te protéger contre les injections SQL (ce n'est pas l'objectif premier des requêtes préparées, mais c'est un chouette 2e effet )

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); contre $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);.
    Le mode warning va te faire des erreurs de type "Warning" quand il y aura un problème. Autrement dit, ça va te planter ton script. Efficace, mais pas terrible pour un site en conditions réelles.
    Le mode exception va lancer une exception qui pourra être interceptée avec un try/catch et faire un joli message d'erreur pour ton utilisateur final.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // faut-il continuer à récupérer les POST ainsi ?
    $titre = $_POST['titre'];
    @Celira
    La question était plutôt (je pense) de savoir s'il est nécessaire de récupérer les $_POST dans des variables (sous-entendu : "quand on utilise une requête préparée")

    Là aussi : OUI et NON

    • NON, pas forcément, car tu peux mettre le $_POST directement dans une requête préparée (plus exactement dans les BindValue !)
    • OUI, si tu as besoin de faire, AVANT la requête, des traitements et/ou une "gestion d'erreurs" (champs obligatoires,....), sans te trimbaler partout le $_POST


    Citation Envoyé par Celira Voir le message
    .....la difficulté consistant à ne pas faire n'importe quoi

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Bonjour,

    merci pour vos précieux retours.

    Après de très nombreuses lectures et visionnages de tuto sur la POO (beaucoup, beaucoup d'heures, de notes ....) je pense avoir bien compris le cadre général. Puisque je suis novice, et encore immaculé de paradigme de programmation informatique, et qu'il semble que le devenir tend vers le tout OBJET, je vais bien tenter de coder tout objet (même s'il y a moins de ressources actuellement qu'en procédural). J'aime assez bien la logique qui tend à créer des objets et d'y appliquer des méthodes...en plus, il faut tout "compartimenter", ce qui me convient assez bien.

    Existe-t'il des IDE qui serait plus performant vers la POO ? si oui lequel, ou sinon quel IDE (même payant) me conseillerez-vous ?

    j'ai vu sur un tuto vidéo, un IDE sur lequel apparaît par ex : NameSpace, ....est-ce une personnalisation d'un IDE ou est-ce un IDE spécifique ?

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    J'ai trouvé, il utilise PhpStorm : le logo est le même que sur la vidéo.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] PDO/MYSQLI et connexion persistante ?
    Par QAYS dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2013, 00h11
  2. quelques conseils pour projetc mvc
    Par pseudobidon57 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 20/06/2007, 17h56
  3. Réponses: 10
    Dernier message: 23/05/2007, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo