Transformer un site HTML en PHP

  • Créateur du sujet Créateur du sujet Deleted member 2927
  • Date de début Date de début
D

Deleted member 2927

Invité
Bonjour,

J'ai dans l'idée de transformer mon site HTML en site PHP. Il n'a rien de complexe et je ne cherche pas à révolutionner la mise en page générale. Juste à limiter le travail pour les mises à jour (sachant que pour la galerie, il faudrait en fait 3 "modèles" de page au lieu des dizaines de pages HTML à l'heure actuelle), être indépendant de JAlbum, refaire le "livre d'or" et mettre un place un RSS qui se mette à jour "seul" en fonction des uploads (si possible, car j'en ai créé un, et je le modifi à la main en fait)

Mais faire tout de A à Z quand on n'y connait pas grand chose en PHP, c'est ardu... auriez-vous des idées pour avoir une "structure" de base simple ? Ou des conseils sur la façon de s'y prendre au tout début ? (mise en place d'une base de données MySQL entre autre)
J'ai commencé à lire un (très long) tuto, mais pas sûr que ça me suffise...
icon_mrgreen.gif
(c'est celui de www.siteduzero.com vu que.. je suis très proche du zero zn PHP :rose: )

Pour info j'ai déjà installé MAMP, testé 2-3 commandes PHP qui ont bien fonctionnées et je m'apprete à apprendre à créer une table dans MySQL.

Mais en fait, ce que je cherche à savoir, plus que d'apprendre tout PHP d'un coup, c'est de ce don j'aurai besoin pour mettre mon site en place. Et si effectivement il pourrait me créer les index de chaque catégorie dans la galerie à partir d'une seule page PHP et si l'affichage de chaque image peut aussi être controlé par une seule page PHP.

Mon site est en lien dans ma signature :zen:

Merci d'avance pour votre aide et vos conseils :up:
 
Bonjour,

J'ai dans l'idée de transformer mon site HTML en site PHP. Il n'a rien de complexe et je ne cherche pas à révolutionner la mise en page générale. Juste à limiter le travail pour les mises à jour (sachant que pour la galerie, il faudrait en fait 3 "modèles" de page au lieu des dizaines de pages HTML à l'heure actuelle), être indépendant de JAlbum, refaire le "livre d'or" et mettre un place un RSS qui se mette à jour "seul" en fonction des uploads (si possible, car j'en ai créé un, et je le modifi à la main en fait)

Mais faire tout de A à Z quand on n'y connait pas grand chose en PHP, c'est ardu... auriez-vous des idées pour avoir une "structure" de base simple ? Ou des conseils sur la façon de s'y prendre au tout début ? (mise en place d'une base de données MySQL entre autre)
J'ai commencé à lire un (très long) tuto, mais pas sûr que ça me suffise...
icon_mrgreen.gif
(c'est celui de www.siteduzero.com vu que.. je suis très proche du zero zn PHP :rose: )

Pour info j'ai déjà installé MAMP, testé 2-3 commandes PHP qui ont bien fonctionnées et je m'apprete à apprendre à créer une table dans MySQL.

Mais en fait, ce que je cherche à savoir, plus que d'apprendre tout PHP d'un coup, c'est de ce don j'aurai besoin pour mettre mon site en place. Et si effectivement il pourrait me créer les index de chaque catégorie dans la galerie à partir d'une seule page PHP et si l'affichage de chaque image peut aussi être controlé par une seule page PHP.

Mon site est en lien dans ma signature :zen:

Merci d'avance pour votre aide et vos conseils :up:
Tu n'aura besoin de rien de plus que PHP et MySQL. MySQL n'est nécessaire que si tu compte mettre des description et des notes aux photos par exemple (si t'as besoin de données autres que le nom du fichier).

Oui il suffira d'une seule page PHP pour l'affichage d'une image, c'est bien ça l'intérêt comme tu l'as compris, ne plus avoir une page html par image :)

Pareil pour la navigation dans les dossiers/albums : il suffira d'une seule pages pour ça aussi.
 
Merci p4bl0 :)
Je met effectivement des descriptions aux photos, donc il me faudra MySQL. Dans ce cas, peut-on faire une table par catégorie ? Avec dedans une entrée correspondant à une photo et les différents champs seront par exemple "titre" et "commentaire" ? Ou j'en ai mal compris le fonctionnement :rose:
 
Si si c'est exatcment ça, mais tu ne va pas faire une table par catgéorie !

Tu fais une table avec par exemple les champs :
id -> un nombre avec incrementation automatique, qui servira d'identifiant unique à chaque photo.
img -> chemin vers l'image sur ton serveur.
titre -> titre de l'image.
categorie -> la catgégorie de l'image.
commentaire -> le commentaire sur l'image.

Déjà ça ça devrait suffire si tu n'a qu'un niveau de catgéorie, si tu en a deux alors tu peux mettre un champ souscatgeorie, si tu ne sais pas à l'avance combien de niveaud e sous catégorie tu peux avoir alors il faut prévoir un autre système, par exemple en mettant dans la table des photos un champ `cat_id` et d'avoir une table `categories` à côté avec les champ `id` (auquel se référence le champ `cat_id` de la table des photos), un champ `name` (le nom de la catégorie) et un un champ `child_of` (qui contient l'id de la catégorie de niveau supérieur).

Avec ça tu devrais t'en sortir assez simplement.

Bon mais te laisse pas impressionner hein, tu verra dans quelques temps tout ça sera clair si ça ne l'est pas encore ;)
 
Oui, en fait une seule table ça pourrait aller. J'ai actuellement 88 photos, et il sera pas trop compliqué de modifer mes tables plus tard je pense si ça augmente vraiment beaucoup.

Une autre question, sur l'organisation sur le serveur. Puis-je mettre mes pages PHP à la racine et faire un dossier + sous-dossier pour les photos et un autre pour les images utilisées pour la mise en page du site (c'est à dire très peu :p ) ?

Et peut-on trouver des "exemples" de pages PHP sur lesquelles se baser ? Joomla, spip, etc pourraient me servir de base ou ils sont déjà en soi pas mal complexe ?
Parce que le principe je le comprends bien, c'est la programmation où j'ai peur de me mélanger les pinceaux... surtout que je débute vraiment totalement, même si le siteduzero aide énormément à comprendre les bases, pour l'instant la mise en place concrète reste flou...
 
T'inquiètes pas pour la taille de ta table, 88 enregistrement c'est peanuts surtout avec une table aussi petite. Je travaille actuellement sur des tables avec une quinzaine de champs et dans les 200 000 enregistrement et MySQL ne bronche pas ;).

Je suis en train de penser que tu devrais mettre un un champ `comment` dans la table `catgeories` aussi, pour pouvoir mettre un petit texte de description, et un champ `cover_pic` avec l'id de la photo qui servira d'image à la catégorie (sauf si tu ne met pas d'image mais seulement du texte pour sélectionner une catgéorie).

Pour l'organisation de tes fichiers je pense qu'un truc du genre peut être pas mal :
Bloc de code:
- /
  | - index.php -> page d'accueil
  | - browse.php -> navigation dans les catégories
  | - view.php -> visualisation d'une photo avec son commentaire etc
  | - includes/ -> tes includes PHP par exemple :
  |   | - top.inc.php -> header (titre) + menu à inclure sur toutes les pages, comme ça pas là peine de le réécrire à chaque fois.
  |   | - bottom.inc.php -> footer (bas de page), pareil. Tu pourrais aussi avoir une sidebar par exemple :-).
  | - img/ -> dossier images
  |   | - layout/ -> images du design du site
  |   | - pics/ -> dossier avec les photos
  | - css/ -> styles...
  | - js/ -> JavaScript...
  |

Après dans le dossiers pics/ tu peux organiser les photo comme tu veux puisque de toute façon il y a un champ pour dire le chemin dans la base de données. Par exemple tu peux faire un dossier par importation, ou un dossier par catégorie...

Exemple : tu importe une image dans /img/pics/vacances/marseille/soleil.jpg (:p).
En base de données tu mettra :
id -> ça se mettra tout seul avec le auto-increment, tu verra ça.
img = "vacances/marseille/soleil.jpg"
titre = "Soleil, tong, Méditerranée"
cat_id = 51 (catégorie spécial :D)
commentaire = "raconte ta vie ici".


Laisse tomber Joomla, spip and co, ils sont bien trop compliqué (personnalisation, paramettrage... tout ces bordel vont t'embrouiller plus qu'autre chose).
Essaye de faire les choses par toi même et n'hésite pas à venir poser des question dans cette discussion si t'as un problème ou juste un doute sur un truc :).
Mais n'hésite pas à demander de l'aide à Google, la doc PHP, et la doc MySQL avant ;).
 
  • J’aime
Réactions: g.robinson
Parfait, là c'est beaucoup plus concret dans ma tête :) Si j'envisageais plusieurs table, c'est par souci de clareté et de rangement. Mais en fait.. avec les champs ça se range très bien in fine (et comme de ce que j'ai lu, les tables c'est juste une façon de schématiser une BDD et qu'en fait MySQL range comme il veut en réalité toute l'histoire...)

Ton schéma est très intéressant, je ne pensais pas aux includes pour les header et footer. Par contre, une sidebar dans le footer, ça donnerait obligatoirement quelque chose d'horizontal ? Ca me donne une idée pour la page PHP affichant l'image, pour afficher en-dessous les thumbnails des autres images de la catégorie.
Et effectivement, je mets une "cover_pic" par catégorie, donc la table catégorie sera utile.

Bon, je bosse sur l'idée dans la soirée / nuit et je fais des essais de base pour voir si ça fonctionne... et en attendant je retourne lire mes tutos :p

A plus tard donc :zen:
 
Petit topo rapide.

Donc header et footer sont bon et valables pour l'index, la page de présentation perso, la page de contact et la page d'index des catégories.
Index.php ok

Je vais donc créer la page categories.php vite fait.

J'ai également fait un début de BDD avec une table à 5 champs et une dizaine d'entrées sont faites pour pouvoir au minimum tester le fonctionnement.
Mais j'ai pas encore bien compris comment utiliser la BDD :/ Dans la théorie, pour afficher les images d'une catégorie, je pense qu'il faut demander de sélectionner les images de cette catégorie et de les afficher en fonction du numéro d'incrément (croissant) (je les ai mise dans la BDD dans le bon ordre exprès, puisque les ajout se feront à la suite)
3 "problèmes" : vaut-il mieux lui faire créer les miniatures à chaque requête ? Ou avoir 2 dossiers, un pour les thumbs et un pour les images normales ? (ce qui oblige à tout faire en double dans la BDD je suppose...) Et si miniature... la librairie GD et imagecopyresampled est une bonne solution ? Et enfin, quelle fonction peut être utilisée ici pour demander l'affichage des images ?

Ensuite, pour la page slide.php, qui affichera l'image en "grand", je pensais lui faire comporter à droite et à gauche soit une mini-miniature des images suivantes et précédentes, soit "bêtement" des flèches ou des images "next" et "previous". Ces liens, on les crée comment ? Je suppose que ça doit etre quelque chose de l'ordre "image de la catégorie avec l'incrément précédent" ou "image.... incrément suivant", mais concrètement je n'ai encore rien lu qui me donne une idée de quoi écrire.

Désolé si mes questions sont très basiques... j'apprend vite normalement, mais là c'est vraiment très très vaste le PHP et je lis pas mal de chose qui me sont totalement inutile, ne pouvant deviner à l'avance quelle fonction me servira ou non.

Eddy

PS : Par exemple, ce site est pas mal pour ses galeries : http://www.philippepache.com/portraits/index.php
Il se sert des variables dans l'url avec le truc $_GET a priori pour passer d'une photo à une autre, photos qui sont tout betement numérotées. Je me demande même si son système nécessite une BDD. En dehors de la mise en page de l'index de chaque catégorie, je ne vise pas quelque chose de plus complexe que ça, à part que si je peux en profiter pour apprendre un minimum à utiliser une BDD, ça me fera tout de même plaisir :) (suis pas maso.. mais je trouve cette histoire de BDD très intéressant et à terme probablement qu'on peut en faire des choses bien sympa.. donc autant avoir quelques bases si j'y parviens :zen: )
 
Petit topo rapide.

Donc header et footer sont bon et valables pour l'index, la page de présentation perso, la page de contact et la page d'index des catégories.
Index.php ok

Je vais donc créer la page categories.php vite fait.

J'ai également fait un début de BDD avec une table à 5 champs et une dizaine d'entrées sont faites pour pouvoir au minimum tester le fonctionnement.
Mais j'ai pas encore bien compris comment utiliser la BDD :/ Dans la théorie, pour afficher les images d'une catégorie, je pense qu'il faut demander de sélectionner les images de cette catégorie et de les afficher en fonction du numéro d'incrément (croissant) (je les ai mise dans la BDD dans le bon ordre exprès, puisque les ajout se feront à la suite)
3 "problèmes" : vaut-il mieux lui faire créer les miniatures à chaque requête ? Ou avoir 2 dossiers, un pour les thumbs et un pour les images normales ? (ce qui oblige à tout faire en double dans la BDD je suppose...) Et si miniature... la librairie GD et imagecopyresampled est une bonne solution ? Et enfin, quelle fonction peut être utilisée ici pour demander l'affichage des images ?
Ne créer pas les miniatures à chaque fois ! C'est travailler pour rien.

Si tu veux pas te faire chier à les faire à la main, tu as deux solutions : soit tu les créer au moment de l'upload, soit tu les créer à la demande seulement si elles n'existent pas. C'est à dire que tu fait un
Bloc de code:
if (!file_exists('chemin/vers/la/miniature')) {
  // tu créer la miniature et tu l'enregistre pour que les prochaine fois elle existe
}
Dans la BDD rien en double : soit tu rajoute un champ "thumbs" avec le chemin de la miniature, soit tu ré-utilise le champ img mais à la place d'aller chercher dans /img/pics/, tu va chercher dans /img/thumbs/ (dossier que tu créer à côté de pics/ et layout/ dans img/).

Pour ce qui est de l'ordre dans la BDD, ça ne sert à rien tu les ordonnes comme tu veux dans ta requête :
Bloc de code:
mysql_query("select * from `taTableAvecLesImg` where `cat_id`='" . $catgeorie . "' [B]order by `name` asc[/B];");
Par exemple te renverra les images de la catégorie n° $catgeorie (sûrement récupéré en GET) ordonnés dans l'ordre croissant par leur champ `name` (qui devrait être un VARCHAR (du texte), donc par ordre alphabétique). Tu peux classer sur n'importe quel champ.

Pour afficher les images, tu le fait en HTML ! Imaginons que tu récupère un enregistrement de la bdd dans une variable $pic et que le nom du champ qui contient le chemin de l'image soit [font]`img`[/font], tu va faire ça :
Bloc de code:
<img src="/img/pics/<?php echo $pic['img']; ?>" alt="<?php echo addslashes($pic['name']); ?> />

Ensuite, pour la page slide.php, qui affichera l'image en "grand", je pensais lui faire comporter à droite et à gauche soit une mini-miniature des images suivantes et précédentes, soit "bêtement" des flèches ou des images "next" et "previous". Ces liens, on les crée comment ? Je suppose que ça doit etre quelque chose de l'ordre "image de la catégorie avec l'incrément précédent" ou "image.... incrément suivant", mais concrètement je n'ai encore rien lu qui me donne une idée de quoi écrire.
La solution la plus simple est sûrement de passer en GET à slide.php les id des images précédente et suivante en plus de l'id celle à afficher en grand. C'est simple parce que tu les as sûr la pages qui listes les photos de la catégorie depuis laquelle tu va linké vers slide.php.

Une autre solution simple est de jouer avec limit de MySQL, je te laisse un peu chercher, mais un indice : "select <données> where <catégorie> order by <id ou nom ou ...> limit ".$numpage.",1;"


Désolé si mes questions sont très basiques... j'apprend vite normalement, mais là c'est vraiment très très vaste le PHP et je lis pas mal de chose qui me sont totalement inutile, ne pouvant deviner à l'avance quelle fonction me servira ou non.
No souci, c'est toujours mieux de poser trop de questions assez précises qu'une question sans aucun sens.


Eddy

PS : Par exemple, ce site est pas mal pour ses galeries : http://www.philippepache.com/portraits/index.php
Il se sert des variables dans l'url avec le truc $_GET a priori pour passer d'une photo à une autre, photos qui sont tout betement numérotées. Je me demande même si son système nécessite une BDD. En dehors de la mise en page de l'index de chaque catégorie, je ne vise pas quelque chose de plus complexe que ça, à part que si je peux en profiter pour apprendre un minimum à utiliser une BDD, ça me fera tout de même plaisir :) (suis pas maso.. mais je trouve cette histoire de BDD très intéressant et à terme probablement qu'on peut en faire des choses bien sympa.. donc autant avoir quelques bases si j'y parviens :zen: )

Oui tu peux très bien faire tout ça sans bdd : tu ranges tes images dans les dossier par catégories puis tu utilises les fonctions opendir, readdir, closedir.
Mais si ta gallerie deviens conséquente ça sera bien plus lent que la base de données.
Pour les noms des images faut se coller au nom de fichier, comme pour les catégories aux noms des dossiers.
Sauf si tu dit par exemple que les info sur une images dans dans un fichier texte nommé pareil que l'image mais un .txt en plus dans le même dossiers et les info d'une catégorie dans le fichier categ.txt dans le dossier de la catégorie....
Mais ça commence à devenir ridicule...

On peut tout faire dans bdd, mais c'est vraiment tordu de pas se servir des fonctionnalité d'une bdd quand c'est aussi simple et aussi efficace.

À moins que tu ne veuille plus de nom, description... et à ce moment là tu prend une convention simple pour les nom de tes fichiers (des nombres) et tu fais juste une boucle à chaque fois, mais c'est plus du tout la même chose... :)
 
Okay, j'arrive à faire UNE chose.. afficher toutes les images d'une catégories.
Sauf que c'est en grand et... de façon assez chaotique vu qu'elles sont les unes à la suite des autres :D
Donc je mettrais volontier en place un tableau et j'y arrive en fait en quelque sorte, avec le code suivant :

Bloc de code:
<table>
<tr>
<?php
mysql_connect("localhost", "root", "root");
mysql_select_db("2eyeswideopen");

$_GET['categorie'];

$reponse = mysql_query("SELECT * FROM photos WHERE cat_id='".$_GET['categorie']."' ORDER BY name ASC;");

while ($pics = mysql_fetch_array($reponse) )
{
?>

<td>
<p>
  <img src="<?php echo $pics['img']; ?>" alt="<?php echo $pics['name']; ?>" /></p>
<p></p>
</td>

<?php
}

mysql_close();
?>
</tr>  
</table>
Mais j'ai en guise de tableau une seule ligne et autant de colonnes que d'images. Je visais plutot un tableau avec 5 colonnes et autant de ligne que nécessaire (je tenterai le coup des "limit" pour les mettre sur plusieurs pages une autre fois :D)

Ton explication pour les miniatures n'est pas très claire pour le moment, je vais creuser la question et je reviendrai dessus si ça n'aboutit à rien.

Il me reste à mettre les histoires de $_GUET en place depuis l'index des catégories, je vais tenter ça aussi.. je croise les doigts pour moins galérer que là... (3h pour arriver au code co-dessus, et encore p4bl0 et les tutos du net m'ont beaucoup servi à trouver la bonne syntaxe :o)

PS : N'empeche, c'est bien cool de pouvoir afficher aussi facilement une suite d'images avec si peu de code !!!

EDIT : J'ai mis le $_GET en place (enfin, testé et il fonctionne après quelques essais), du coup je met à jour le code ci-dessus.

Donc en résumé mes questions sont :
1- Comment mettre en place un vrai tableau ? Je suis quasi sûr que c'est juste une histoire d'HTML... je cherche de toute façon.
2- Pour les valeurs que je donne dans les différents Champs de chaque entrée de ma table, je constate que mettre des espaces ne semble pas le perturber (pour les noms de fichier en particulier). Est-ce acceptable d'en mettre ou plutôt à éviter ? Et j'ai cherché la différence entre "TEXT" et "VARCHAR" en vain... du coup j'ai mis img et name en varchar et cat_id et commentaire en TEXT.

3- Pour l'ordre, je pense mettre plutôt comme code
Bloc de code:
ORDER BY id ASC
Ainsi, si les espaces ne posent pas de problème, le champ "name" pourra servir à afficher le titre de l'image :) Pas d'erreur à signaler à ce niveau ?

4- Juste pour savoir et même si je n'en suis pas encore là, c'est compliqué ou long de mettre à jour une BDD ? Parce qu'il me faudra la modifier à chaque MAJ, et je crois avoir compris qu'elle sera sur le serveur. Donc in fine en pratique je devrais uploader mon/mes images, les ajouter dans la BDD et.. c'est tout. Est-ce bien le cas ?
 
Ne créer pas les miniatures à chaque fois ! C'est travailler pour rien.
"travailler pour rien" ça me fait penser à une phrase d'intro d'un des tutos que je lis où il est expliqué que le PHP c'est pour les webmaster fainéant :o et.. ça me convient ! :love:

Si tu veux pas te faire chier à les faire à la main, tu as deux solutions : soit tu les créer au moment de l'upload, soit tu les créer à la demande seulement si elles n'existent pas. C'est à dire que tu fait un
Bloc de code:
if (!file_exists('chemin/vers/la/miniature')) {
  // tu créer la miniature et tu l'enregistre pour que les prochaine fois elle existe
}

Dans la BDD rien en double : soit tu rajoute un champ "thumbs" avec le chemin de la miniature, soit tu ré-utilise le champ img mais à la place d'aller chercher dans /img/pics/, tu va chercher dans /img/thumbs/ (dossier que tu créer à côté de pics/ et layout/ dans img/).
Je ne sais pas si c'est l'heure, mais ce passage reste obscur... Comment les créer à l'upload ? Via le FTP ? Ou tu pensais à un formulaire ? (ça je maitrise pas du tout...)
Et à la demande ça veut dire quand un visiteur du site demande une page qui nécessite les thumb ? Parce que ton "if" avec "file_exists" je le comprends "si la miniature existe déjà".

Pour la BDD par contre j'ai compris ! :cool:
 
Okay, j'arrive à faire UNE chose.. afficher toutes les images d'une catégories.
Sauf que c'est en grand et... de façon assez chaotique vu qu'elles sont les unes à la suite des autres :D
Donc je mettrais volontier en place un tableau et j'y arrive en fait en quelque sorte, avec le code suivant :

Bloc de code:
<table>
<tr>
<?php
mysql_connect("localhost", "root", "root");
mysql_select_db("2eyeswideopen");

$_GET['categorie'];

$reponse = mysql_query("SELECT * FROM photos WHERE cat_id='".$_GET['categorie']."' ORDER BY name ASC;");

while ($pics = mysql_fetch_array($reponse) )
{
?>

<td>
<p>
  <img src="<?php echo $pics['img']; ?>" alt="<?php echo $pics['name']; ?>" /></p>
<p></p>
</td>

<?php
}

mysql_close();
?>
</tr>  
</table>
Mais j'ai en guise de tableau une seule ligne et autant de colonnes que d'images. Je visais plutot un tableau avec 5 colonnes et autant de ligne que nécessaire (je tenterai le coup des "limit" pour les mettre sur plusieurs pages une autre fois :D)
LES TABLEAU POUR LA MISE EN PAGE C'EST MAL !
Et pense simplement à l'opérateur modulo ;)

Et tu ne devrais pas mettre ton $_GET[...] directement dans ta requête MySQL, ça peut être dangereux (vérifie avant que c'est bien un nombre avec is_numeric() par exemple).

Ton explication pour les miniatures n'est pas très claire pour le moment, je vais creuser la question et je reviendrai dessus si ça n'aboutit à rien.
Ne soit pas pressé, vas-y au fur et à mesure...

Il me reste à mettre les histoires de $_GUET en place depuis l'index des catégories, je vais tenter ça aussi.. je croise les doigts pour moins galérer que là... (3h pour arriver au code co-dessus, et encore p4bl0 et les tutos du net m'ont beaucoup servi à trouver la bonne syntaxe :o)

PS : N'empeche, c'est bien cool de pouvoir afficher aussi facilement une suite d'images avec si peu de code !!!

EDIT : J'ai mis le $_GET en place (enfin, testé et il fonctionne après quelques essais), du coup je met à jour le code ci-dessus.

Donc en résumé mes questions sont :
1- Comment mettre en place un vrai tableau ? Je suis quasi sûr que c'est juste une histoire d'HTML... je cherche de toute façon.
N'utilise pas de tableau pour ça.
Le mieux pour une galerie c'est d'utiliser une liste de définition :
Bloc de code:
<dl>
  <dt>nom de la photo 1</dt>
  <dd>photo 1</dd>
  <dt>nom de la photo 2</dt>
  <dd>photo 2</dd>
  ...
</dl>
et de styler ça avec CSS.
2- Pour les valeurs que je donne dans les différents Champs de chaque entrée de ma table, je constate que mettre des espaces ne semble pas le perturber (pour les noms de fichier en particulier). Est-ce acceptable d'en mettre ou plutôt à éviter ? Et j'ai cherché la différence entre "TEXT" et "VARCHAR" en vain... du coup j'ai mis img et name en varchar et cat_id et commentaire en TEXT.
TEXT c'est pour stocker des textes long type post de forum, post de blog...
ici tout devrais être en VARCHAR(255), le commentaire en TEXT si il est susceptible de faire plus de 255 caractère sinon VARCHAR aussi, mais les ID doivent être des INT.

oublie les espaces et les caractères spéciaux dans les nom de fichiers.

3- Pour l'ordre, je pense mettre plutôt comme code
Bloc de code:
ORDER BY id ASC
Ainsi, si les espaces ne posent pas de problème, le champ "name" pourra servir à afficher le titre de l'image :) Pas d'erreur à signaler à ce niveau ?
à priori non.

4- Juste pour savoir et même si je n'en suis pas encore là, c'est compliqué ou long de mettre à jour une BDD ? Parce qu'il me faudra la modifier à chaque MAJ, et je crois avoir compris qu'elle sera sur le serveur. Donc in fine en pratique je devrais uploader mon/mes images, les ajouter dans la BDD et.. c'est tout. Est-ce bien le cas ?
Non, tu verra en lisant les tuto, ça se fait via des requête INSERT (insertion) ou UPDATE (mise à jour).
 
  • J’aime
Réactions: Mr Eddy
Et une lecture de plus :) Merci, je vais voir donc ce pourquoi c'est mal... (dommage, je trouvais ça sympa les tableaux :p)

Et tu ne devrais pas mettre ton $_GET[...] directement dans ta requête MySQL, ça peut être dangereux (vérifie avant que c'est bien un nombre avec is_numeric() par exemple).
Dangereux carrément ? Tu m'inquiètes...
En fait j'avais tenté autrement en ratant la syntaxe et entre temps j'ai retrouvé la bonne syntaxe donc c'est réglé, mais juste pour éviter un drame je veux bien savoir le risque encouru.
Et même en faisant $categorie = $_GET('categorie') il faudrait vérifier que c'est un nombre ? Parce que je ne connais pas is_numeric...

1. Pour la liste de définition, je vais chercher aussi, parce que je ne connais pas non plus (mais ça semble un peu long à moins de pouvoir à nouveau se servir d'une boucle en php pour les noms)

2. Merci pour TEXT et VARCHAR, je changerai en conséquence. Idem pour les noms de fichier :zen:

3 et 4. Encore merci :)

Bon, y a du boulot encore !!! Je ne suis pas pressé pressé, mais reprise des cours le 1er septembre et début d'un temps partiel la semaine prochaine... donc si j'ai la structure du site de fait dans le week end, je m'occuperai d'améliorer le CSS et finir de compléter la BDD plus tard tranquillement entre 2 révisions.

Donc.. direction les tableaux (euh non, les tableaux qui n'en sont pas :D) et les miniatures:up:
 
Très intéressant le site de cyber codeur :) J'ai pu énormément alléger mes header et footer en remplacant les tableaux par des balises <ul> et <li>, même si je ne maitrise pas vraiment ces 2 balises.
Par exemple je vois qu'il arrive à faire une sorte de menu horizontal avec des <li> successifs, alors que moi ça me donne une liste verticale.. impossible de piger la commande à mettre dans le CSS pour que ça reste horizontal.

Petit topo de l'avancée : pour les miniatures, je les ai (du fait du site HTML) alors pour le moment je m'en sers... et je verrai plus tard comment faire mieux pour les créer :rose:
Sinon, j'ai donc maintenant de fonctionnel:
- /
| - index.php -> page d'accueil
| - index_categorie.php -> Qui ouvre toutes les images d'une categorie en miniature (à la suite... :/ )
| - slide.php -> Qui affiche donc la version "agrandit" des photos.
| - includes/
| | - header.php
| | - footer.php
| - img/
| | - layout/ -> images du design du site
| | - People_BW/ etc -> contient les photos (un dossier par categorie, pas utile pour la BDD ou autre, mais moi je m'y retrouve mieux ainsi)
| | | - thumbs -> contient les miniatures (oui.. un peu long comme arborescence..)
| - css/ -> styles...
Reste à créer un livre d'or digne de ce nom avec formulaire. Je pense me baser sur celui proposé par le siteduzero, mais ça ne presse pas, je peux reprendre l'actuel en attendant si je réussi à le faire fonctionner malgré les balises php qui semblent le géner pour le moment.
Et à comprendre comment utiliser à bon escient les balises <dl>, <dt> et <dd> :)

EDIT : Maintenant que j'y pense, mon "slide.php" est prévu pour passer à l'image suivante quand on clic sur l'image affichée (pas fait de next et previous pour le moment), mais... j'ai oublié de lui dire quoi faire quand il est à la dernière image :/
Et en fait, je ne vois pas comment faire... il faudrait quelque chose comme "if $id est égal au plus grand chiffre du champ id de la categorie en cours, aller à telle page". Mais c'est le "égal au plus grand chiffre du champ id de la categorie en cours" que je ne sais pas faire.

Voilà mon code de slide si je n'ai pas été clair:
Bloc de code:
$categorie = $_GET['categorie'];
$id = $_GET['image'];

$reponse = mysql_query("SELECT * FROM photos WHERE cat_id='".$categorie."' AND id='".$id."';");
$pics = mysql_fetch_array($reponse)

?>

<p align="center">
  <a href="slide.php?categorie=<?php echo $categorie; ?>&amp;image=<?php echo $id+1; ?>"><img class="slideImage" src="img/People_BW/<?php echo $pics['img']; ?>" alt="<?php echo $pics; ?>" /></a></p>
<p align="center"><?php echo $pics['name']; ?></p>
<p align="center"><?php echo $pics['img']; ?></p>

<?php
mysql_close();
?>
 
J'ai tenté d'introduire ceci après la requete SQL:
Bloc de code:
if (!empty($pics['img']))
{
header ("Location: index_categorie.php");
}else{

Et page blanche... donc j'ai du planter quelque chose. Mais quoi ?... J'ai tenté un echo de $pics['img'], ça ne donne rien, donc la variable doit réellement être vide (toute façon rien dans la BDD ne correspondrait)

Donc, où placer le if pour qu'il fonctionne si c'est la bonne solution ?
 
Bon, le header n'était pas du tout la bonne solution dans mon cas (après lecture de divers sujet et du manuel PHP :) )

Là je tente un truc avec if else, en lui faisant faire 2 recherches en fait, une sur la base du numéro "$id" de la photo à afficher, et une sur celle de la photo de la page suivante, en supposant que celle-ci me donnera un résultat nul.

En clair, j'ai tenté ça :
Bloc de code:
$categorie = $_GET['categorie'];
$id = $_GET['image'];
$id_b = $id+1;

mysql_connect("localhost", "root", "root");
mysql_select_db("MA_BDD");

$reponse = mysql_query("SELECT * FROM photos WHERE cat_id='".$categorie."' AND id='".$id."';");
$pics = mysql_fetch_array($reponse)

$reponse_b = mysql_query("SELECT * FROM photos WHERE cat_id='".$categorie."' AND id='".$id_b."';");
$pics_b = mysql_fetch_array($reponse_b)
Où $id_b = $id+1
Et si pour cette série, c'est la dernière photo, la 2ème requêtes devraient être vide sur chacun des champs de ma table.

Donc je mets ensuite
Bloc de code:
if (empty($pics_b))
{
?>

<a href="index_categorie.php"><img src="lien/vers/photo"></a>

<? php } else { ?>

<a href="lien/vers/photo/suivante"><img src="lien/vers/photo"></a>
Et là je mets comme lien quand on clic sur l'image l'index de ma galerie.

Mais il est manifeste que les 2 query de suite bloque tout...

Auriez-vous une idée de comment faire 2 query à la suite ? Ou alors il existe une fonction qui pourrait me rendre service ? (je suis en train de faire des recherches dans le manuel de PHP mais... quand on ne sait pas exactement ce qu'on cherche, c'est :eek:
 
Pour le moment ça fonctionne avec if else et 2 requêtes sql.

Bloc de code:
<?php
$categorie = $_GET['categorie'];
$id = $_GET['image'];
$id_b = $id+1;

mysql_connect("localhost", "root", "root");
mysql_select_db("ma_bdd");

$reponse = mysql_query("SELECT * FROM photos WHERE cat_id='".$categorie."' AND id='".$id."';") or die(mysql_error());
$pics = mysql_fetch_array($reponse);

$reponse_b = mysql_query("SELECT * FROM photos WHERE cat_id='".$categorie."' AND id='".$id_b."';") or die(mysql_error());
$pics_b = mysql_fetch_array($reponse_b);

if (empty($pics_b['img']))
{
?>

<p align="center">
  <a href="index_categorie.php"><img class="slideImage" src="img/<?php echo $categorie; ?>/<?php echo $pics['img']; ?>" alt="<?php echo $pics; ?>" />
  </a>
</p>
<p class="title" align="center"><?php echo $pics['name']; ?></p>

<?php 
} else { 
?>

<p align="center">
  <a href="slide.php?categorie=<?php echo $categorie; ?>&amp;image=<?php echo $id+1; ?>"><img class="slideImage" src="img/<?php echo $categorie; ?>/<?php echo $pics['img']; ?>" alt="<?php echo $pics; ?>" />
  </a>
</p>
<p class="title" align="center"><?php echo $pics['name']; ?></p>

<?php
}
mysql_close();
?>

Est-il possible de faire plus propre ? Ou existe-t-il des fonctions plus adaptées ?

Pour ma présentation en "tableau", je n'ai pas réussi à le faire autrement que comme ça :
Bloc de code:
<?php
mysql_connect("localhost", "root", "root");
mysql_select_db("root");

$categorie = $_GET['categorie'];

$reponse = mysql_query("SELECT * FROM photos WHERE cat_id='".$categorie."' ORDER BY img ASC;");

$j=0;//comptage cellule
$l=0;//comptage ligne

echo '<table align="center" cellspacing="6">';
echo '<tr>';//une 1iere ligne

while ($pics = mysql_fetch_array($reponse) )
{
?>
<td style="width:140px; height:80px;">

<p align="center" class="cat_title">
  <a href="slide.php?categorie=<?php echo $categorie; ?>&amp;image=<?php echo $pics['id']; ?>"><img class="image" src="img/<?php echo $categorie; ?>/thumbs/<?php echo $pics['img']; ?>" alt="<?php echo $pics['name']; ?>" /></a></p>

</td>

<?php

$j++;

if($j==5)
{

$j=0;//pour recommencer le comptage

$l++;

echo '</tr>';;//fermeture ligne en cours

if($l<5) echo '<tr>';//et ouverture nouvelle ligne

}
}

echo '</table>';
mysql_close();
?>

Je n'ai pas compris comment me servir de modulo et/ou du CSS pour m'aider. Donc un peu la même question, peut-on faire plus propre ? Ou plus efficace ?

Merci d'avance :zen:
 
Cherche un peut sur le net il y a des tuto xhtml+css, laisse tomber les tableux, va lire la page wikipédia concernant les modulo que je t'ai linké plus haut, tu verra c'est simple.

Pourquoi tu compte les lignes ? Enfin de toute façon quand tu fera ça proprement en xhtml+css avec les listes de définitions t'aura pas besoin de compter ça s'adaptera tout seul à la largeur de la fenêtre... :)
 
J'ai lu ton lien sur wiki et.. ça m'a paru super obscur... peut être qu'à tête reposée ça passera mieux ;)

Pour le comptage des lignes c'est vrai que c'est inutile... mais ça me servira peut être pour changer de "page" au bout d'un certain nombre de ligne en fait... mais bon, ce n'est pas encore décidé et surtout, je n'ai pas encore cherché comment faire.

J'ai mis de côté 2 ou 3 tutos d'xhtml+css et je vais les lire tranquillement pour tenter de voir comment utiliser les listes de définition (en commencant par voir comment on cale la définition sous le terme au lieu d'avoir ce léger décalage d'origine :p )

Merci encore pour ton aide !