besoin aide concrète PHP (niv débutant)

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
jpv56
Salamandre
Messages : 27
Inscription : 14 août 2008, 11:41

besoin aide concrète PHP (niv débutant)

Message par jpv56 »

Bonjour à tous,
J'ai mis en ligne un petit site sans prétention pour la bibliothèque municipale de mon lieu de résidence.
Site :
http://bibliothequeambon.free.fr

J'utilise Kompozer et j'ai appris les notions de base pour les CSS. Je voudrais maintenant m'attaquer au PHP car je suis conscient de son utilité. Pour le moment j'ai quelques notions : j'ai simplement crée un formulaire de contact en PHP (très simple et sans moyen de contrôle sur les champs).

Pour aller plus loin je souhaite utiliser du PHP sur la page "coup de coeur". L'idée est toute simple : chaque mois il faudrait trouver sur cette page le coup de cœur d'un bénévole. C'est à dire ses commentaires sur un livre + une image de la couverture du bouquin.

Plutôt que d'avoir 12 pages pour chaque mois de l'année, j'aimerais que le commentaire du mois se charge dans la même page. Je souhaite aussi que le visiteur puisse consulter le coup de cœur des mois précédents. J'imagine que l'usage du PHP est ici parfaitement adapté ?

Je souhaite coder moi même, mais pour débuter j'ai besoin de savoir ce dont j'ai besoin pour obtenir ce résultat. Je sollicite donc votre aide.

- Combien de pages me faudra-t'il ? (nombre de pages HTML et PHP)
- La page "coup de coeur" sera-t-elle en HTML ou en PHP ?
- Il me faudra une base de données. Puis-je renseigner la BDD directement depuis mon site (via un petit formulaire) ou bien faut-il aller remplir les tables directement dans mysql ?
- Pour la page d'archives (= mois précédents) quel extension faut-il choisir ? HTML ou PHP ?

Merci à qui pourra m'éclairer un peu.

JPV56


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: besoin aide concrète PHP (niv débutant)

Message par calimo »

jpv56 a écrit :- Combien de pages me faudra-t'il ? (nombre de pages HTML et PHP)
C'est toujours la grande question.
En php, on peut avoir une seule page avec un énorme code, à laquelle on passe tout plein de paramètres et qui va choisir ce qu'elle doit afficher ; ou alors tout plein de pages sur lesquelles on inclut simplement des bouts de codes tels que l'entête, le menu, le pied de page...
Le nombre de pages idéal est un savant compromis entre ces deux extrêmes.
jpv56 a écrit :- La page "coup de coeur" sera-t-elle en HTML ou en PHP ?
A priori toutes tes pages seront en php...
jpv56 a écrit :- Il me faudra une base de données.
Pas nécessairement. On peut tout à fait utiliser des fichiers texte constitués de bouts de HTML et les inclure dans la page principale. N'oublie pas qu'il existe des alternatives à MySQL. Si ton hébergeur a installé PostgreSQL, tu pourrais le préférer, ou alors SQLite, etc.
http://ch.php.net/manual/fr/refs.database.vendors.php
PS : pour mysql, utilise l'extension mysqli et pas mysql qui est "vieille".
jpv56 a écrit :Puis-je renseigner la BDD directement depuis mon site (via un petit formulaire)
Bien sûr que tu le peux, mais il faudra apprendre la syntaxe SQL (INSERT INTO).
jpv56 a écrit :ou bien faut-il aller remplir les tables directement dans mysql ?
Cela risque d'être difficile, et pas forcément utile. Mieux vaut passer passer par une interface telle que phpmyadmin...


pour moi, typiquement tu auras une page coeur.php à laquelle tu pourras passer les arguments "mois" et "an", avec des valeurs par défaut sur le mois/année courant (avec la fonction getdate) :

coeur.php?mois=03&an=2009

Avec cela, la page va aller chercher le coup de coeur du mois, soit dans la base de données, soit dans un fichier texte.

Pour afficher les archives tu appelleras

coeur.php?mois=02&an=2009 pour avoir celle de février par exemple. N'oublie pas de vérifier que le contenu existe (pour empêcher d'utiliser coeur.php?mois=03&an=1834 ou coeur.php?mois=13&an=43784 ;-)

Pour les commentaires tu auras une table "commentaire" avec un id (clé primaire), un champ "mois" et un "an" et finalement un "commentaire". Dans la page coup de coeur du mois, tu inclueras les commentaires en faisant un SELECT avec la clause WHERE qui va bien !
jpv56
Salamandre
Messages : 27
Inscription : 14 août 2008, 11:41

Message par jpv56 »

Bonjour Calimo,
Je te remercie d'avoir pris sur ton temps pour me répondre aussi précisément.
J'y vois plus clair mais je pensais que l'affaire serait moins compliquée ;)
Il va falloir que j'apprenne et assimile pas mal de choses, notamment le langage SQL.
Pour débuter je pense découper en plusieurs pages PHP, sinon je risque de m'emmêler les pinceaux dans le code.
Je te remercie encore et je me mets au boulot !...

++

JPV56



Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Si tu n'as que douze enregistrements par an, peut-être que tu peux utiliser de simples fichiers texte plutôt qu'une base de données, ce qui t'éviterait de devoir apprendre le SQL du moins dans un premier temps :)
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Message par Asumbaa »

Benoit a écrit :Si tu n'as que douze enregistrements par an, peut-être que tu peux utiliser de simples fichiers texte plutôt qu'une base de données, ce qui t'éviterait de devoir apprendre le SQL du moins dans un premier temps :)
Je suis assez d'accord avec Benoît. Apprendre tout d'un coup n'est pas si facile.

Par exemple tu pourrais avoir une arborescence de type :

Code : Tout sélectionner

/coupsdecoeur
    /coupsdecoeur/200901
        /coupsdecoeur/200901/jaquette.jpg
        /coupsdecoeur/200901/commentaire.txt (ou html)
    /coupsdecoeur/200902
        /coupsdecoeur/200902/jaquette.jpg
        /coupsdecoeur/200902/commentaire.txt

Tu vérifies que le dossier /coupsdecoeur/annee-mois existe, et tu construis ta page en récupérant d'une part l'image de la jaquette, d'autre part le commentaire. Ici tu auras besoin des fonctions PHP de manipulation de fichiers (voir la doc)

Pour les mois précédents, tu peux construire des liens comme ceci :

Code : Tout sélectionner

<a href="/coupsdecoeur.php?mois=2009-01">Coup de cœur de janvier</a>
Dans ta page PHP coups de coeur, si tu as quelque chose dans $_GET['mois'] tu le récupères pour afficher le mois demandé, sinon tu initialises par défaut à l'année courante-mois courant (ici besoin de la fonction PHP date).


N'hésite pas à demander plus de précisions :wink:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9) Gecko/2008052906 Firefox/3.0 (.NET CLR 3.5.30729)
jpv56
Salamandre
Messages : 27
Inscription : 14 août 2008, 11:41

Message par jpv56 »

Merci Benoit et Asumbaa pour vos précisions.
Je ne savais pas que le PHP pouvait lire le contenu d'autres fichiers texte. Décidément c'est un langage intéressant !
Vous avez raison, comme je n'ai que 12 livres par année je vais essayer d'appeler plutôt un fichier texte. Le SQL attendra un peu.

Pour afficher ces informations (voir ci dessous) pouvez-vous juste m'indiquer les fonctions essentielles à utiliser :

> le commentaire
> l'image de couverture du livre
> les archives (mois précédents)

Merci encore.

JPV56




Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Message par Asumbaa »

Je pars du principe que tu as la maîtrise de l'arborescence et du contenu des dossiers / fichiers et que tu as fait comme j'ai indiqué plus haut.

Voici à peu près l'idée de ce que tu peux faire dans ta page coeur.php :

Code : Tout sélectionner

// Tu commences par récupérer ou construire le mois demandé
// Si c'est dans l'adresse, tu prends le paramètre demandé, sinon tu construis la date sur l'année et le mois courant (fonction date)
$coeurDemande = isset($_GET['mois']) ? $_GET['mois'] : date(Y).'-'.date(m);

// Ensuite tu vérifies que ta variable correspond à un dossier chez toi. Sinon, tu afficheras une erreur
if (is_dir($_SERVER['DOCUMENT_ROOT'].'/chemin/.$coeurDemande)) {
    // Le dossier est là, tu vas afficher le contenu (image + comm)
    echo '<img src="/chemin/'.$coeurDemande.'/jaquette.jpg" alt="" />';
    echo file_get_contents('/chemin/'.$coeurDemande.'/commentaires.html', FILE_TEXT);
}
else {
    // Dossier inexistant
    echo "erreur";
}

// La pagination, pour les autres coups de cœur
// Un lien par dossier trouvé dans /chemin/, sauf le dossier courant
$dh = opendir($_SERVER['DOCUMENT_ROOT'].'/chemin/);
while (($sousDir = readdir($dh)) !== false) {
    // Traduction du nom du dossier en français
    $annee = substr($sousDir, 0, 4);
    $mois = substr($sousDir, 5, 2);
    $moisFrancais = array('01'=>'Janvier', '02'=>'Février', ...... );
    $quandFrancais = $moisFrancais[$mois].' '.$annee;

    // Affichage du lien si tu n'es pas déjà sur la page
    if ($sousDir != $coeurDemande) {
        echo '<a href="coeur.php?mois='.$sousDir.'">Coup de cœur de '.$quandFrancais.'</a> | ';
    }
}
closedir($dh);
Voilà, il y a sans doute quelques erreurs, c'est pas facile de coder sans coloration et sans tester :p Tu devras bien entendu adapter (le "chemin" par exemple) et arranger à ta sauce la pagination.

N'hésite pas à consulter la doc PHP pour comprendre comment marchent les fonctions et à demander des précisions.


Précision utile : dans ton fichier commentaires.html, tu n'auras pas toute la structure d'un fichier HTML normal (avec balises html, head etc) : juste le code HTML que tu aurais mis à l'emplacement du commentaire. Quelques paragraphes, par exemple.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9) Gecko/2008052906 Firefox/3.0 (.NET CLR 3.5.30729)
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités