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 :

Template PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut Template PHP
    Bonjour à tous,

    je suis actuellement stagiaire et je dois créer une base de données MySQL. Jusqu'ici pas de problèmes. ^^ (j'ai utilisé Wamp Server).
    Cependant je dois maintenant crée une interface admin en php, après bien évidemment un formulaire d'identification. J'ai donc pensé, après quelques recherches sur le web, de m'orienter vers un modèle de template.

    J'ai testé le tutorial de Genova, qui m'a bien éclairé sur le sujet. Seulement, j'ai voulu adapter le modèle à mon cas avec une connexion à ma base de données (par exemple pour afficher la liste de tous les clients d'une société), puis je tombe sur des problèmes embêtants on va dire. ^^

    Tout comme l'exemple, j'ai pris le template PHPBB.

    http://genova.developpez.com/articles/template_phpbb/

    Je m'explique donc...

    Mon fichier .tpl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <table>
       <!-- BEGIN utilisateur-->
       <tr>
          <td>{utilisateur.ID}</td>
          <td>{utilisateur.Nom}</td>
       </tr>
       <!-- END utilisateur-->
    </table>
    Mon fichier .php

    Code : 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
     
     
    //Je me connecte à ma base de données et à ma table
     
    mysql_connect("localhost","root","");
    mysql_select_db("test");
    include('template');
     
    $template = new Template('template/');
     
    $result = $db->sql_query = "'SELECT user_id, username FROM ' . UTILISATEUR;" OR die('erreur SQL');
     
    $template->set_filenames(array('body' => 'test.tpl');
     
    while ($user = $db->sql_fetchrow($result))
    {
    	// On affiche les membres ligne par ligne
    	$template->assign_block_vars('user', array(
    		'ID' => $user['utilisateur_ID'],
    		'NAME' => $user['utilisateur_Nom']
    	));
    }
     
    $template->pparse('body');
    J'ai modifié le code de Genova car j'obtenais des erreurs. M'enfin maintenant, le serveur me répond :

    "Fatal Error : Call to undefined function sql_fetchrow()"

    Je comprends pas vraiment pourquoi il me sort ça.
    Je précise que les champs en question de ma table UTILISATEUR sont ID et NOM. En fait pour le moment, je veux juste faire joujou avec le template pour voir comment le tout fonctionne.

    Voilà, j'espère que j'ai bien exposé mon problème. ^^ Si quelqu'un pouvait m'aider pour m'éclairer parce que là.

  2. #2
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    $db représente quoi ?

    D'après moi, c'est une instance d'une classe Database Connection. Es-tu allé vérifié que la méthode sql_fetchrow() existe bien dans la classe $db ? :o

  3. #3
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Oui, a priori dans le tuto c'est juste pour l'exemple, il faut que tu fasses tes requêtes toi-même.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Bah pour être honnête, j'ai juste repris le code d'exemple en l'adaptant à ma base. ^^ Mais même en essayant de l'enlevant et de tourner la chose autrement, y'a pas moyen.

    M'enfin merci de ton conseil, je vais aller me renseigner de ce côté là.


    Si certains d'entre vous ont encore des idées, je suis preneur.

    EDIT : euh en fait j'ai fait mes propres requêtes, c'est juste que j'ai oublié de modifié l'exemple (j'ai fait un copier / coller puis modifier en fonction de mon code ) vu que je bosse sur un autre PC. ^^ Donc le problème ne vient pas de la reqûete.

  5. #5
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Déjà, tu peux remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $db->sql_query = "'SELECT user_id, username FROM ' . UTILISATEUR;" OR die('erreur SQL');
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query( 'SELECT user_id, username FROM UTILISATEUR' ) or die( 'Erreur SQL' );
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($user = $db->sql_fetchrow($result))
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $user = mysql_fetch_row($result) )
    Ca fonctionnera :p

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    En effet, la meilleure solution est de remplacer l'objet $db par tes propres fonctions.
    Pour la petite histoire, cet objet $db vient d'une classe spécifique à phpBB2 : http://php.developpez.com/faq/?page=phpbb2

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Chengj > Yeah ! En effet, techniquement ça fonctionne. Toujours bon à savoir ce genre de procédé, merci bien !

    En revanche, rien ne s'affiche. J'ai rempli la base utilisateurs pour tester le code, mais nada. ^^ Faut que je regarde le pourquoi du comment.

    Yogui > Toujours intéressant à savoir, merci.

    En tout cas c'est cool, les réponses arrivent vite après les questions.

  8. #8
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Euh oui, c'est normal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$template->assign_block_vars('user', array(
    		'ID' => $user['utilisateur_ID'],
    		'NAME' => $user['utilisateur_Nom']
    	));
    Il faut appeler les champs de la requête SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	$template->assign_block_vars('user', array(
    		'ID' => $user['user_id'],
    		'NAME' => $user['username']
    	));

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    En fait, le user_id et le username, c'est juste celui de l'exemple du tuto. ^^

    Dans ma requête, j'ai bien "SELECT Id, Nom from UTILISATEUR".

    Et j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $template->assign_block_vars('user', array(
    		'ID' => $user['id'],
    		'NAME' => $user['nom']
    	));
    Donc ça devrait être bon nan en théorie ?

  10. #10
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    La réponse est oui.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Arf, bizarre.

    Je remets mon code, histoire de bien voir si j'ai le bon truc au moins. ^^

    .tpl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table>
    	<!-- BEGIN utilisateur -->
     
    	<tr>
    		<td>{ID}</td>
    		<td>{NOM}</td>
    	</tr>
    	<!-- END utilisateur -->
    </table>
    .php

    Code : 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
    <?php
    mysql_connect("localhost","root","");
    mysql_select_db("hopital");
    include('template.php');
     
    $template = new Template('template/');
    $result = mysql_query ('select ID, Nom from utilisateur') or die ('Erreur SQL');
    $template->set_filenames(array('body' => 'test.tpl'));
     
    while ($user = mysql_fetch_row($result))
    {
    	$template->assign_block_vars('user', array(
    		'ID' => $user['ID'],
    		'NOM' => $user['Nom']
    		));
    }
     
    $template->pparse('body');
    ?>

  12. #12
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table>
    	<!-- BEGIN utilisateur -->
     
    	<tr>
    		<td>{user.ID}</td>
    		<td>{user.NOM}</td>
    	</tr>
    	<!-- END utilisateur -->
    </table>

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Attention, tout doit correspondre. Ici, tu demandes à la classe template de créer un groupe "user" dans le template mais il n'y a pas de tel groupe. Tu as des variables apparenant au groupe "user" dans le template, mais le groupe s'appelle "utilisateur" au lieu de "user". Il faut que tout corresponde !

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Citation Envoyé par Chengj Voir le message
    Essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table>
    	<!-- BEGIN utilisateur -->
     
    	<tr>
    		<td>{user.ID}</td>
    		<td>{user.NOM}</td>
    	</tr>
    	<!-- END utilisateur -->
    </table>
    J'ai essayé mais rien à faire.

    Yogui -> Genre, comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table>
    	<!-- BEGIN utilisateur -->
     
    	<tr>
    		<td>{ID}</td>
    		<td>{NOM}</td>
    	</tr>
    	<!-- END utilisateur -->
    </table>
    Code : 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
    <?php
    mysql_connect("localhost","root","");
    mysql_select_db("hopital");
    include('template.php');
     
    $template = new Template('template/');
    $result = mysql_query ('select ID, Nom from utilisateur') or die ('Erreur SQL');
    $template->set_filenames(array('body' => 'test.tpl'));
     
    while ($utilisateur = mysql_fetch_row($result))
    {
    	$template->assign_block_vars('utilisateur', array(
    		'ID' => $utilisateur['ID'],
    		'NOM' =>$utilisateur['Nom']
    		));
    }
     
    $template->pparse('body');
    ?>
    A première vue, le tableau n'existait pas. Mais j'ai tenté d'ajouter du code CSS (bordure et couleur de fond) et il est bien crée en fait, mais sans les informations dedans, c'est vraiment bizarre.

    Dans le cas où $utilisateur = mysql_fetch_row($result) devient $user= mysql_fetch_row($result), cela revient au même résultat.

    (je préfère le dire, parce que bon apparemment tout doit se jouer sur un nom de variable ^^).

  15. #15
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Ah ba, t'as encore changé le nom d'une variable.

    C'est à ce "utilisateur" qu'il faut faire référence à ton template : utilisateur.ID par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $template->assign_block_vars('utilisateur', array(
    		'ID' => $utilisateur['ID'],
    		'NOM' =>$utilisateur['Nom']
    		));

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Bah en fait j'ai tout testé, et rien ne donne le résultat voulu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table>
    	<!-- BEGIN utilisateur -->
     
    	<tr>
    		<td>{utilisateur.ID}</td>
    		<td>{utilisateur.NOM}</td>
    	</tr>
    	<!-- END utilisateur -->
    </table>
    Code : 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
    <?php
    mysql_connect("localhost","root","");
    mysql_select_db("hopital");
    include('template.php');
     
    $template = new Template('template/');
    $result = mysql_query ('select ID, NOM from UTILISATEUR') or die ('Erreur SQL');
    $template->set_filenames(array('body' => 'test.tpl'));
     
    while ($utilisateur = mysql_fetch_row($result))
    {
    	$template->assign_block_vars('utilisateur', array(
    		'ID' => $utilisateur['ID'],
    		'NOM' =>$utilisateur['NOM']
    		));
    }
     
    $template->pparse('body');
    ?>
    Vous voyez une ptite erreur là? ^^

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Oui votre usage du résultat de la requête est erroné : soit vous utilisez des indices numériques (ID => 0, NOM => 1) soit vous modifiez votre appel mysql_fetch_row pour mysql_fetch_assoc (ou mysql_fetch_array éventuellement).

    Un environnement bien configuré devrait générer des messages d'erreur de type notice pour cette étourderie ...

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Merci ! Je viens de changer le mysql_fetch_row pour mysql_fetch_assoc et en effet ça marche maintenant.

    Un environnement bien configuré devrait générer des messages d'erreur de type notice pour cette étourderie ...
    Je vais chercher des informations pour configurer convenablement mon environnement donc, avez-vous un ptit lien pratique sous la main ? ^^

  19. #19
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Dans le php.ini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting  =  E_ALL | E_STRICT
    Concrnant ton PHP, j'espère que tu as bien consulté la FAQ PHP pour comprendre tes erreurs ?
    http://php.developpez.com/faq/?page=tpl-phpbb2

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Ouaip je l'ai bien consulté avant de continuer mon template.

    Par contre, c'est possible de laisser le sujet ouvert au cas où je rencontre d'autres problèmes ? (même si j'espère que ce ne sera pas le cas ^^)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. onclick : changer le template php
    Par maildeseb dans le forum Langage
    Réponses: 11
    Dernier message: 27/10/2009, 16h55
  2. [Bénévole] Graphiste web pour moteur de template php
    Par cahnory dans le forum Autres
    Réponses: 0
    Dernier message: 24/06/2009, 21h04
  3. template.php pour variable xhtml
    Par StAfX dans le forum Langage
    Réponses: 1
    Dernier message: 05/02/2009, 10h38
  4. [XSLT][Templates][PHP] Que choisir pour gérer ses templates
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 8
    Dernier message: 03/09/2008, 20h49
  5. Template PHP, (DoSimple?)
    Par juJuv51 dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 15/02/2007, 07h20

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