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

PHP & Base de données Discussion :

Revision d'un vieux site en PHP/MySQL avec le format actuel


Sujet :

PHP & Base de données

  1. #41
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par RinaBK Voir le message
    Bon, j'en ai normalement bientôt terminé avec l'architecture du site
    Ceci-dit, je me posais une question... Je voulais mettre à jour les metas concernant la description et les mots clé du site. Je me demandais si je les enregistrais dans la base de donnée ou si je les mettais dans une variable, es-ce que cela risque de poser un soucis avec les moteurs de recherches ?
    Tu fais bien comme tu veux. Le navigateur ne peut pas faire la différence entre un texte écrit directement en dur dans ta page, ou s'il provient d'une constante ou s'il provient d'une bdd. Il lit simplement ce qui est écrit.

    Ou est-ce que c'est fini ces balises meta, vu que certains navigateurs utilisent plutôt le contenu des pages pour leurs mots clé ??
    La balise méta description est encore utilisée même si elle n'est pas toujours respectée et ce ne sont pas les navigateurs qui l'utilisent mais les moteurs de recherches pour afficher la description en dessous du lien.

    Par acquis de conscience tu peux aussi garder les mots clés mais là tout le monde est d'accord (enfin tous les articles que j'ai lu sur le SEO) pour dire qu'ils ne sont plus pris en compte depuis longtemps.

  2. #42
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Tu fais bien comme tu veux. Le navigateur ne peut pas faire la différence entre un texte écrit directement en dur dans ta page, ou s'il provient d'une constante ou s'il provient d'une bdd. Il lit simplement ce qui est écrit..

    La balise méta description est encore utilisée même si elle n'est pas toujours respectée et ce ne sont pas les navigateurs qui l'utilisent mais les moteurs de recherches pour afficher la description en dessous du lien.

    Par acquis de conscience tu peux aussi garder les mots clés mais là tout le monde est d'accord (enfin tous les articles que j'ai lu sur le SEO) pour dire qu'ils ne sont plus pris en compte depuis longtemps.
    Merci beaucoup pour ta réponse !! Effectivement, c'est une question qui est restée très longtemps sans réponse. J'avais fait quelques recherche, mais j'obtenais des réponses assez contradictoire suivant les articles sur lesquels je tombais. Donc, au final, autant viré les mots clés et laisser la description du site pour l'affichage dans les moteurs de recherches.




    Pour en revenir au sujet principal, j'ai donc modifié la fonction ndb(); et j'ai supprimé la préparation.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    /***************************************************************************************************
    **********		RETOURNE LE NOMBRE D'ENREGISTREMENT D'UNE TABLE
    *********/
     
    function ndb($table) {
    	$connexion = C_PDO::getC();
    	$requete = 'SELECT * FROM '.SITE['prefixe'].'_'.$table;
    	$donnee = $connexion->query($requete);
    	$count = $donnee->rowCount();
    	return $count;
    }
    ?>


    Ensuite, je n'ai pas très bien compris pour ce qui est du query, car justement je me suis fiée à la classe AdminCrud() que tu m'avais donné et si je me fie à la fonction lire(), j'ai justement le query ?
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function lire () {
    	try {
    		$select = "SELECT id, prefixe, nom, infos FROM adm_sites ORDER BY id";
    		// Pas besoin de requête préparée ici puisqu'il n'y a pas de variables utilisateur dans la requête
    		$read = $this->connect->query($select);
    	}
    	catch(PDOException $e) {
    		exit($e->getMessage());
    	}
    	return $read;
    }
    A moins que je n'ai rien compris ?




    EDIT :
    Je me posais une question : J'ai été obligée de séparer la classe C_PDO de mon fichier classes.php car je me suis rendue compte que je ne pouvais pas faire autrement. Mais la question que je me pose, ce n'est pas dangereux de nommer un fichier tel que celui pour la connexion à la base de donnée avec le nom même de la classe ? Bon, je sais que c'est ce qu'il faut faire, mais je me questionne quand-même à ce propos ? Parce que après, cela devient facile d'utiliser cette classe pour un individu et s'amuser à mettre la cata dans ma base de données... !?
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  3. #43
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par RinaBK Voir le message
    Ensuite, je n'ai pas très bien compris pour ce qui est du query, car justement je me suis fiée à la classe AdminCrud() que tu m'avais donné et si je me fie à la fonction lire(), j'ai justement le query ?
    Je ne te parlais pas de cette requête mais de celle dans la fonction "config" dans ce message.

    Citation Envoyé par RinaBK Voir le message
    Bon, je sais que c'est ce qu'il faut faire, mais je me questionne quand-même à ce propos ? Parce que après, cela devient facile d'utiliser cette classe pour un individu et s'amuser à mettre la cata dans ma base de données... !?
    Si tu sais que c'est ce qu'il faut faire, alors arrêtes d'inventer de faux problèmes. Dans un développement open source tout le monde connait le nom des fichiers et ce n'est pas ça qui détermine si le code est plus ou moins sécurisé. Renseignes-toi sur la protection et la sécurité des sites web avant de t'inquiéter, l'OWASP te donneras des réponses sur ce sujet. Surtout que concernant la convention PSR-4 pour l'autoload des classes je t'avais donné un lien vers PHP-FIG qui regroupe les principaux acteurs du monde Php, tu crois franchement qu'ils ne savent pas de quoi ils parlent ?

    A noter que rowCount n'est pas une fonction standard pour les requêtes "select" (ne fonctionne pas avec toutes les bases de données). Enfin bon tant que tu utilises mysql ça fonctionnera, sinon la doc donne une solution plus portable.

  4. #44
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Ah ok, d'accord, ok merci pour les réponses


    Citation Envoyé par ABCIWEB Voir le message
    Je ne te parlais pas de cette requête mais de celle dans la fonction "config" dans ce message.
    Oui, j'avais bien compris. Mais j'ai justement pris exemple sur AdminCrud() pour faire ma fonction. Et dans lire(), il y a justement 'query'. J'ai juste ajouté "prepare" puisque j'ai une close 'WHERE' et le fetch() pour la récupération d'une ligne.


    Je me retrouve confrontée à un autre problème que je n'arrive pas à résoudre. J'ai ma fonction SelectSite() qui récupère principalement le préfixe. Du moins c'est l'information que je récupère le plus souvent. Je récupère donc la constante SITE['prefixe'] que j'utilise à chaque fois que je dois travailler avec une table de ma base de données. J'ai remarqué que lorsque je veux initialiser une variable genre :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $table =  SITE['prefixe'].'_news';
    ...ma classe génère une erreur sur cette ligne. Et je n'arrive pas à comprendre pourquoi je ne peux pas initialiser ma variable $table dans une classe sans que cela génère une erreur ? Est-ce que c'est parce que SITE['prefixe'] provient d'une fonction ? Si oui, comment puis-je faire pour que cela fonctionne ? Car cette variable, je vais en avoir besoin pour beaucoup d'autres classes.
    Voici le code de ma fonction :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function SelectSite() {
    	$connexion = C_PDO::getC();
    	$requete = 'SELECT * FROM adm_sites WHERE id=2';
    	$donnee = $connexion->query($requete);
    	$sortie = $donnee->fetch();
    	return define('SITE',array(
    					'id' => ($sortie->id),
    					'prefixe' => ($sortie->prefixe),
    					'nom' => ($sortie->nom)
    					));
    } SelectSite();

    Et voici le début de ma classe (qui n'est pas encore terminée) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class NewsView {
     
    	private $connect;
     
    	// S'exécute lorsqu'on instancie la classe
    	public function __construct($connexion) {
    		$this->connect = $connexion;
    	}
     
    	$table = SITE['prefixe'].'_news';
     
    }
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  5. #45
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par RinaBK Voir le message
    Ah ok, d'accord, ok merci pour les réponses

    Oui, j'avais bien compris. Mais j'ai justement pris exemple sur AdminCrud() pour faire ma fonction. Et dans lire(), il y a justement 'query'. J'ai juste ajouté "prepare" puisque j'ai une close 'WHERE' et le fetch() pour la récupération d'une ligne.
    Quand je disais plus haut que tu n'avais pas passé assez de temps sur PDO... Où as tu vu dans mes exemples que j'utilisais à la fois "query" et "prepare" dans une même requête ? Quand on fait des requêtes préparées ont utilise "prepare" pour préparer la requête et "execute" pour l'exécuter, "query" ne sert à exécuter que des requêtes NON préparées.


    Citation Envoyé par RinaBK Voir le message
    ...ma classe génère une erreur sur cette ligne. Et je n'arrive pas à comprendre pourquoi
    1/ Bah moi non plus je ne peux pas comprendre puisque tu ne me dis pas l'erreur que php retourne. Fais un copier-coller de l'erreur que renvoie Php quand tu demandes de l'aide, on est pas devin.

    2/ Sinon je t'ai déjà dit aussi que les requêtes doivent se faire dans un bloc try/catch.

    3/ Par ailleurs il ne sert à rien de faire un return dans ta fonction "SelectSite()", en tous cas pas dans ce contexte puisque tu retournes la définition d'une constante ce qui va toujours retourner true (de même si tu retournais "$a = 2"). Définis simplement ta constante dans la fonction, le return ne sert à rien dans ce contexte. Et si par hasard tu te trouvais à appeler plusieurs fois de suite la fonction "SelectSite()", ce serait bien d'utiliser defined pour éviter de définir cette contante plusieurs fois (ce qui te renverrait une erreur).

    Et quand ça ne fonctionne pas comme tu veux, mets toi en mode debug : fais des tests dans une page séparée pour voir ce qu'il se passe (c'est le plus sûr pour s'isoler du contexte), ou mets des "exit (var_dump($var))" à différents endroits de ton code pour contrôler tes variables.

  6. #46
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Ouiiiiiii grand chef

    Alors j'ai corrigé la fonction SelectSite :
    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
    function SelectSite() {
    	$connexion = C_PDO::getC();
    	try {
    		$requete = 'SELECT * FROM adm_sites WHERE id=2';
    		$donnee = $connexion->query($requete);
    		$sortie = $donnee->fetch();
    		define('SITE',array(
    					'id' => ($sortie->id),
    					'prefixe' => ($sortie->prefixe),
    					'nom' => ($sortie->nom)
    					));
    	}
    	catch(PDOException $e) {
    		exit($e->getMessage());
    	}
    } SelectSite();


    J'ai aussi corrigé la fonction config :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function config($nom) {
    	$connexion = C_PDO::getC();
    	try {
    		$requete = 'SELECT * FROM '.SITE['prefixe'].'_config WHERE nom="'.$nom.'"';
    		$stmt = $connexion->prepare($requete);
    		$stmt->execute();
    		$stmt = $stmt->fetch();
    		return ($stmt->valeur);
    	}
    	catch(PDOException $e) {
    		exit($e->getMessage());
    	}
    }

    ...et aussi le fonction ndb :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function ndb($table) {
    	$connexion = C_PDO::getC();
    	try {
    		$requete = 'SELECT * FROM '.SITE['prefixe'].'_'.$table;
    		$donnee = $connexion->query($requete);
    		$count = $donnee->rowCount();
    		return $count;
    	}
    	catch(PDOException $e) {
    		exit($e->getMessage());
    	}
    }


    Et pour ma variable qui ne veut pas s'initialiser dans ma classe, j'obtiens l'erreur :
    Parse error: syntax error, unexpected variable "$table", expecting "function" or "const" in /home/gwandachfn/www/includes/classes.php on line 81
    Ma ligne 81 comporte :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $table = SITE['prefixe'].'_news';
    et ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class NewsView {
     
    	private $connect;
     
    	// S'exécute lorsqu'on instancie la classe
    	public function __construct($connexion) {
    		$this->connect = $connexion;
    	}
    	$table = SITE['prefixe'].'_news';
     
     
    }
    Alors comme je l'ai dis dans mon précédent message, ma classe est en cours de construction et vu que j'aime bien tester pour éviter trop de complication, dans ma logique, l'initialisation d'une variable ne devrait pas poser de problème pour un test de visualisation. Ceci-dit, j'ai plutôt l'impression que ma classe ne peut pas comprendre ma constante du fait que cette constante provient d'une fonction externe. Mais j'ai essayé pas mal de chose, mais cette erreur est toujours la même quoi que je fasse.

    Encore merci pour ton aide


    A oui ! J'ai modifié l'inclusion de mes fichiers sur ma page comme ceci :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //	Inclusions des fichiers principaux
    define('INCLUDES_FILES', array(
    					'variables'=>'variables.php',
    					'C_PDO'=>'C_PDO.php',
    					'fonctions'=>'fonctions.php',
    					'classes'=>'classes.php',
    					'header'=>'header.php',
    					'footer'=>'footer.php'
    					));
    foreach (INCLUDES_FILES as $index => $files) {
    	if (!file_exists('includes/'.$files)) { header('Location: alerte.php?warning=500'); }
    	if ($index != 'header' && $index != 'footer') { include('includes/'.$files); }
    }
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  7. #47
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par RinaBK Voir le message
    Ouiiiiiii grand chef

    J'ai aussi corrigé la fonction config :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function config($nom) {
    	$connexion = C_PDO::getC();
    	try {
    		$requete = 'SELECT * FROM '.SITE['prefixe'].'_config WHERE nom="'.$nom.'"';
    		$stmt = $connexion->prepare($requete);
    		$stmt->execute();
    		$stmt = $stmt->fetch();
    		return ($stmt->valeur);
    	}
    	catch(PDOException $e) {
    		exit($e->getMessage());
    	}
    }
    Grand chef ya n'a pas content, RinaBK toujours pas compris qu'on ne MET JAMAIS des variables dans une clause WHERE pour faire des requêtes préparées. TOUJOURS utiliser des marqueurs ou des paramètre nommés et les variables se mettent dans un tableau que l'on passe en argument à la méthode execute.
    En utilisant les marqueurs cela donne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $requete = 'SELECT * FROM '.SITE['prefixe'].'_config WHERE nom= ?';
    $stmt = $connexion->prepare($requete);
    $stmt->execute([$nom]);
    Grand chef menace vendre RinaBK à homme blanc pour pas cher si RinaBK ne pas respecter grand livre sacré tribu Php.


    Citation Envoyé par RinaBK Voir le message
    Et pour ma variable qui ne veut pas s'initialiser dans ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class NewsView {
     
    	private $connect;
     
    	// S'exécute lorsqu'on instancie la classe
    	public function __construct($connexion) {
    		$this->connect = $connexion;
    	}
    	$table = SITE['prefixe'].'_news';
     
     
    }
    Alors comme je l'ai dis dans mon précédent message, ma classe est en cours de construction et vu que j'aime bien tester pour éviter trop de complication, dans ma logique, l'initialisation d'une variable ne devrait pas poser de problème pour un test de visualisation. Ceci-dit, j'ai plutôt l'impression que ma classe ne peut pas comprendre ma constante du fait que cette constante provient d'une fonction externe. Mais j'ai essayé pas mal de chose, mais cette erreur est toujours la même quoi que je fasse.
    La logique c'est de suivre des tutos sur les classes plutôt que de tester au hasard. Dans une classe on définit soit des variables avec le préfixe "public", "protected", ou "private" suivant la portée de la variable, soit des fonctions avec les mêmes préfixes suivant la portée de la fonction, mais on n'écrit pas des variables en vrac en dehors d'une fonction. Ce n'est pas ta constante qui n'est pas reconnue, c'est ton code qui ne correspond à rien.

    Je ne sais pas quel tuto te conseiller il y en a une foultitude. Tapes "php tutoriel classes" dans un moteur de recherche et choisi celui qui te convient le mieux. Et ne fais pas comme avec la doc pdo, cette fois-ci lis le et exerces toi dans des pages séparées avant de l'intégrer dans ton code. Ou si tu n'as pas le temps d'apprendre, ne fais pas de classes et fais tout en procédural. C'est un choix, après tout si tu ne veux faire qu'un site pas très compliqué, le procédural peut largement suffire. Par contre si veux progresser pour pouvoir faire autre chose de plus puissant et de plus maniable, il faut passer un jour ou l'autre par la POO, mais comme tout nouvel outil il faut prendre le temps d'apprendre à l'utiliser.

    Là on a fait globalement le tour pour une meilleure organisation et la mise à jour d'un ancien site php/mysql. Ouvres un sujet spécifique si tu as besoin de conseil pour la création d'une classe.

    A bientôt.

Discussions similaires

  1. Cherche Hébergement gratuit site web [PHP-MySQL]
    Par HULK dans le forum Gratuit
    Réponses: 15
    Dernier message: 20/01/2010, 23h53
  2. [MySQL] Aide à la création site en php mysql
    Par nbjr1858 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/06/2007, 17h10
  3. Extranet et les sites Internet : php/mysql
    Par kagura dans le forum Outils
    Réponses: 12
    Dernier message: 21/06/2006, 11h48
  4. créer son site en php/mysql entierement
    Par zimotep dans le forum Requêtes
    Réponses: 15
    Dernier message: 25/03/2006, 00h39
  5. Cherche Hébergement gratuit site web [PHP-MySQL]
    Par HULK dans le forum Hébergement
    Réponses: 11
    Dernier message: 23/08/2005, 15h04

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