Partage
  • Partager sur Facebook
  • Partager sur Twitter

MVC Connexion BDD PDO

    1 décembre 2011 à 19:23:34

    Bonjour voila dans mon dossier modèle j'ai un fichier livreor.php qui contient deux fonctions(ci-cfr commentaire dans code).

    Cependant, j'ai une réptition dans mon code que j'aimerai amélioré. En effet le code pour se connecter à la base de données est présent dans les deux fonctions. J'aimerai en faite faire la connexion une seul fois au début mais je ne sais pas comment faire à cause du try et du catch.

    Modele/livreor.php
    <?php
    	//Récupère tous les messages du livre d'or
    	function getMessDeLivreOr()
    	{
    		try
    		{
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    			$bdd = new PDO('mysql:host=localhost;dbname=mon_site', 'root', '', $pdo_options);
    			
    			$livreor=array();
    
    			$req = $bdd->query('SELECT auteur, message, date FROM livreor');
    				
    			while ($donnees = $req->fetch())
    			{
    				$livreor[]=$donnees;
    			}
    			return $livreor;
    			$req->closeCursor();
    		}
    		catch (Exception $e)
    		{
    			die('Erreur : ' . $e->getMessage());
    		}
    	}
    	//renvoie le nombre de messages dans le livre d'or
    	function nbreMessageLivreOr()
    	{
    		try
    		{
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    			$bdd = new PDO('mysql:host=localhost;dbname=mon_site', 'root', '', $pdo_options);
    				
    			$req = $bdd->query('SELECT COUNT(*) AS nbreMess FROM livreor');
    			$donnees=$req->fetch();
    			$nbreMess=$donnees['nbreMess'];
    			return $nbreMess;
    			$req->closeCursor();
    		}
    			catch (Exception $e)
    			{
    				die('Erreur : ' . $e->getMessage());
    			}
    			
    	}
    



    Controleur/livreor.php
    <?php
    	
    	include 'modele/livreor.php';
    	$messages=getMessDeLivreOr();
    	$n=nbreMessageLivreOr();
    	include 'vue/livreor.php';
    


    vue/livreor.php
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Sayan's website</title>
    		<link rel="stylesheet" href="css/mainstyle.css" />
        </head>
    
        <body>
    		<div id="bloc_page">
    			
    			<?php 
    				include 'header.php';
    				include 'sousheader.php';
    				include 'nav.php';
    			?>
    			<div id="centre">
    				<section id="livre_or"> <!-- Bloc Livre Or -->
    						<div id="formulaire_message_livre_or">
    							<h3>Laissez votre trace</h3>
    							<form method="post" action="#">
    								<p>
    									<label for="auteur">Pseudo</label><input type="texte" name="auteur" id="auteur" required/></br>
    									<label for="message">Message</label><textarea name="message" id="message" rows="10" cols="45">Tapez votre texte ici</textarea></br>
    									<input type="submit" value="Envoyer" class="boutton"/>
    								</p>
    							</form>
    						</div>
    						<div id="bloc_messages_livre_or">
    							<h3>Vos Messages</h3>
    							
    							<?php
    								if($n!=0)
    								{
    									foreach ($messages as $d)
    									{
    							?>
    									
    										<div id="bloc_auteur_message">
    											<div id='auteur_et_date_livre_or'><?php echo $d['auteur']?> <?php echo $d['date']?></div>
    											<div id="message_seul"><?php echo nl2br($d['message'])?></div>
    										</div>
    							<?php
    									}
    								}
    								else
    								{
    									echo 'Il n\'y a pas de message';
    								}
    							?>
    							
    						</div>
    				</section><!-- Bloc Livre Or -->
    			</div>
    			<?php
    				include 'footer.php';
    			?>
    			
    		</div> <!-- Bloc Page -->
        </body>
    </html>
    


    Voila merci d'avance de votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2011 à 19:28:59

      tu as une solution, tu peux simplement faire ta connexion dans une page que tu inclue dans toutes les pages de ton site. elle sera ainsi disponible partout, tout le temps. et rien ne t'empeche de laisser ta requete dans le try pour capturer les erreurs.
      • Partager sur Facebook
      • Partager sur Twitter
      La source de 99% des bugs se trouve entre la chaise et le clavier.
        1 décembre 2011 à 19:33:16

        Utilise cette lib pdo:
        <?php
        
        /**
         * Classe implémentant le singleton pour PDO
         * @author Savageman
         */
        
        class PDO2 extends PDO {
        
        	private static $_instance;
        
        	/* Constructeur : héritage public obligatoire par héritage de PDO */
        	public function __construct( ) {
        	
        	}
        	// End of PDO2::__construct() */
        
        	/* Singleton */
        	public static function getInstance() {
        	
        		if (!isset(self::$_instance)) {
        			
        			try {
        			
        				self::$_instance = new PDO(SQL_DSN, SQL_USERNAME, SQL_PASSWORD);
        			
        			} catch (PDOException $e) {
        			
        				echo $e;
        			}
        		} 
        		return self::$_instance; 
        	}
        	// End of PDO2::getInstance() */
        }
        
        // end of file */
        


        Exemple d'utilisation:
        <?php
        
        function ajouter_membre_dans_bdd($nom_utilisateur, $mdp, $adresse_email, $hash_validation) {
        
        	$pdo = PDO2::getInstance();
        
        	$requete = $pdo->prepare("INSERT INTO membres SET
        		nom_utilisateur = :nom_utilisateur,
        		mot_de_passe = :mot_de_passe,
        		adresse_email = :adresse_email,
        		hash_validation = :hash_validation,
        		date_inscription = NOW()");
        
        	$requete->bindValue(':nom_utilisateur', $nom_utilisateur);
        	$requete->bindValue(':mot_de_passe',    $mdp);
        	$requete->bindValue(':adresse_email',   $adresse_email);
        	$requete->bindValue(':hash_validation', $hash_validation);
        
        	if ($requete->execute()) {
        	
        		return $pdo->lastInsertId();
        	}
        	return $requete->errorInfo();
        }
        


        Pour plus d'informations voir le cours de Savageman Votre site PHP (presque) complet : architecture MVC et bonnes pratiques

        Les exemples ainsi que la lib viennent de ce cours :)



        • Partager sur Facebook
        • Partager sur Twitter

        MVC Connexion BDD PDO

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown