Affichage d'une image en PHP

Fermé
Hmd3D2Y - Modifié le 2 janv. 2023 à 15:38
jordane45 Messages postés 38039 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 février 2024 - 4 janv. 2023 à 07:03

Bonjour,

Je travaille actuellement sur un projet de cours, qui a pour objectif de réalisation une application/site de gestion d'une équipe de sport en PHP. J'ai pour cela dû faire héberger mon site. Mais depuis le début il y a un problème qui persiste, c'est celui d'afficher mes images qui sont dans un répertoire or répertoire de mes pages PHP/HTML. 

Voici la liste de mes répertoires :

Et là le code d'une de mes pages pour afficher ces images :

<?php
    $server = "localhost";
    $login = "root";
    $mdp = "";
    $db = "projet_php";

    try {
        $bdco = new PDO("mysql:host=$server;dbname=$db",$login,$mdp);
        $bdco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Erreur de connexion : ' . $e->getMessage();
    }
?>
<!DOCTYPE HTML>
<html>
	<head>
	<title>Recherche</title>
	</head>
	<body>
		<form action="consultationjoueur.php" method="GET" >
			<label for="Poste_prefere">Poste joueur :</label>
				<select name="Poste_prefere" id="Poste_prefere">
					<option value="">Tous</option>
					<option value="Attaquant">Attaquant</option>
					<option value="Defenseur">Défenseur</option>
					<option value="Passeur">Passeur</option>
					<option value="Central">Central</option>
					<option value="Libero">Libero</option>
					<option value="Receptionneur">Receptionneur</option>
				</select>
			<input type="submit" value="Filtrer">
		</form>
		<h1>Liste des Joueurs </h1>
			<ul>
				<?php
					$repertoire = "../projetPhotos/";
					if (isset($_GET["Poste_prefere"]) && !empty($_GET["Poste_prefere"])) {
						$Poste = $_GET["Poste_prefere"];
						$req = $bdco->prepare("SELECT * FROM joueur WHERE Poste_prefere = ?");
						$req->execute([$Poste]);
						while ($Joueur = $req->fetch()) {
							echo '<li>';
							echo '<img src="' . $repertoire. $Joueur['Photo'] . '" alt="" height="42" width="42">';
							echo ' - ' . $Joueur['Prenom'] . ' - ' . $Joueur['Nom'] . ' - ' . $Joueur['numero_de_licence'] . ' - ' . $Joueur['Notes']. ' - ';
							echo "<a href=\"modificationJoueur.php?numero_de_licence=".$Joueur['numero_de_licence']."\">Modifier</a>";
							echo " ou ";
							echo "<a onClick=\" javascript:return confirm('Voulez-vous supprimer ce Joueur ?')\" href=\"suppressionJoueur.php?numero_de_licence=".$Joueur['numero_de_licence']."\">Supprimer:</a>";
							echo '</li>';
						}
					} else {
						$req = $bdco->prepare("SELECT * FROM joueur");
						$req->execute();
						while ($Joueur = $req->fetch()) {
							echo '<li>';
							echo '<img src="' . $repertoire. $Joueur['Photo'] . '" alt="" height="42" width="42">';
							echo $Joueur['Prenom'] . ' - ' . $Joueur['Nom'] . ' - ' . $Joueur['numero_de_licence'] . ' - ' . $Joueur['Notes'] . ' - ' . $Joueur['Poste_prefere']. ' - ';
							echo "<a href=\"modificationJoueur.php?numero_de_licence=".$Joueur['numero_de_licence']."\">Modifier</a>";
							echo " ou ";
							echo "<a onClick=\" javascript:return confirm('Voulez-vous supprimer ce Joueur ?')\" href=\"suppressionJoueur.php?numero_de_licence=".$Joueur['numero_de_licence']."\">Supprimer:</a>";
							echo '</li>';
						}
					} 
				?>
			</ul>
			<button><a href="saisiejoueur.html">Ajout de Joueur</a></button>
			<button><a href="feuilleDeMatch.php">Créer une feuille de match</a></button>
			<button><a href="Statistique.php">Statistique</a></button>
			<button><a href="EvaluationResultat.php">Evaluer les joueurs</a></button>
	</body>
</html>

J'ai en soi, donné les droits nécessaires pour l'exécution, donc je ne comprends pas comment faire...

Merci de l'aide que vous pouvez m'apporter.
 

3 réponses

yg_be Messages postés 22483 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 février 2024 1 446
2 janv. 2023 à 16:00

bonjour,

tu as négligé de nous expliquer quel était le problème.

as-tu compris que le PHP envoyait simplement du code HTML au navigateur, et que c'est le navigateur qui va utiliser le lien en source de l'image pour afficher l'image?  Ce n'est donc pas le programme PHP qui accéde aux images, mais le navigateur.

Tu dois donc mettre les images, sur ton site, de façon à ce qu'elles soient accessibles via un navigateur.

as-tu examiné le code source HTML à partir du navigateur?

0

Voici les instructions que je dois respecter : 

Pour uploader la photo des joueurs vous devez suivre les instructions suivantes :

1/ créer un dossier, par exemple "projetPhotos" en dehors du dossier www  ;

2/ ajouter le droit d'écriture à ce nouveau dossier pour les autres ;

3/ uploader vos photos dans ce nouveau dossier.

Les photos ainsi téléchargées appartiennent à l'utilisateur www-data, celui utilisé pour exécuter apache.

Pour le moment je pense avoir tout respecter.

Pour l'affichage de mon image je peux voir ça dans mon code source après quelque modifications :

il y a bien un lien qui se fait mais je ne pense pas qu'il soit bon, sachant que je suis sur un hébergeur je vois pas trop comment faire.

0
yg_be Messages postés 22483 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 février 2024 1 446 > Hmd3D2Y
2 janv. 2023 à 17:53

Tu as négligé de nous expliquer quel était le problème.  As-tu un message d'erreur?

Où sont les instructions que tu dois respecter en ce qui concerne l'affichage des joueurs?

D'où viennent ces instructions?  Ne peux-tu pas créer le dossier "projetPhotos" à l'intérieur du dossier www?

0
Hmd3D2Y > yg_be Messages postés 22483 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 février 2024
Modifié le 2 janv. 2023 à 18:01

Voilà l'une de mes pages : 

Ici comme on peut le voir l'image ne s'affiche pas mais le reste oui, et j'ai bien des instructions à suivre et je suis bien obligé de mettre le répertoire photo en dehors du répertoire www (celui de mes pages). Il s'agit d'un projet à réaliser en PHP, la réalisation de mon projet se passe sans trop de mal mais j'ai pas encore toutes les notions surtout concernant l'affichage de mes images je vois pas trop comment faire.

0
yg_be Messages postés 22483 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 février 2024 1 446 > Hmd3D2Y
2 janv. 2023 à 18:08

Avant de visualiser les images via ta page PHP, il est nécessaire que ces images soient accessible à partir du navigateur.  (Ce n'est pas strictement nécessaire, mais c'est le plus simple.)

Il est donc nécessaire que tu modifies la définition de ton site (chez ton hébergeur) de façon à ce que le dossier contenant les photos soit accessible à partir d'un navigateur.  Quand tu auras modifié et testé cela, tu pourras ensuite adapter ta page PHP.

0
jordane45 Messages postés 38039 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 février 2024 4 622
4 janv. 2023 à 07:03

Bonjour

Ton dossier photo doit se trouver dans le www sinon ton php ne peut pas y accéder.


.
Cordialement,
Jordane

0

Il manque la base de données il me semble.

Un dossier est un dossier et n'indique rien. Vous devez stocker le texte de l'adresse de chaque fichier utilisé(URL) dans une base de données.

Imaginons nous avons une table de donnée(en général une c'est pas suffisant) composée comme ceci:

images(tables):

adresse(texte)

description(texte)

dateAjout(date)

Si on veut afficher la dernière image il faut faire une requête (SQL) sur le serveur de bases de données. Avec PHP c'est le rôle de PDO. On peut par exemple obtenir la dernière image ajoutée(en utilisant le champ dateAjout) ou toutes les images dans l'ordre désirée.

En cas pratique si nous voulons changer une image tous les 2 mois il faut enregistrer sur la base de donnée une nouvelle image. Le reste étant fait par le PHP si on affiche la dernière image ajoutée il n'y a rien à faire.

Ce principe des pages dynamiques est essentiel car cela permet d 'automatiser, l'autre solution étant de changer à la main le HTML. Même s'il n'y a qu'un changement tous les mois c'est une énorme économie d'énergie et la possibilité de pouvoir changer les contenus(que ce soit images, textes, mise en pages, musiques, l'âge du capitaine...) et dans le cas de nombreuses données devant être changée régulièrement(la majorité des sites) la seule solution possible est d'utiliser ce type d'automatisation en 3 parties séparées physiquement:

_Base de données(SQL) indique à PHP les données à afficher dans la page HTML(SQL est un langage de programmation donc on peut faire des filtres et tris facilement)

_PHP crée/modifie le HTML avant que la page soit utilisée en obtenant le résultat de la reqûete de la base

_HTML affiche le contenu une fois chargé dans le navigateur
 

et dans l'autre sens

_HTML fournit l'information à changer(formulaire) au programme PHP

_PHP trie et vérifie les données de la requête, prépare et envoit la requête à la base(avec PDO)

_Base de données: reçoit le changement/ajout/suppresion dans la base

Sauf que là j'ai pas l'impression que vous ayez la partie base de données ou c'est pas clair pour vous le rôle de PHP. PHP sert à faire la liaison entre le HTML et la base de données.

Aucune utilité sans la base autant faire du pur HTML. Par contre les sites HTML (statiques) sans bases de données et application serveur(PHP ou autre) ont aucune persistance dans le temps puisque qu'on ne peut pas changer facilement la moindre donnée de la page il devient rapidement onéreux ou faux de devoir changer les contenus à afficher puisque ça revient en général à réécrire une partie(ou plus souvent tout) le HTML

https://fr.wikipedia.org/wiki/Architecture_trois_tiers

-1

J'ai à ma disposition une base de données, par exemple dans le cas des joueurs, j'ai dans ma base de données la possibilité d'y mettre des "images" mais en réalité il s'agit seulement du nom de l'image que j'insère et après via une requête SQL j'affiche l'image grâce à la balise <img> qui prend en valeur la concaténation d'une variable (qui reprend le chemin relatif vers le répertoire de mes photos) et du nom de la photo présente dans la BDD. Je ne sais pas si cela peut fonctionner  mais en soi, si la photo se trouve dans le même répertoire que mes pages, tout fonctionne et en dehors ça ne fonctionne pas. 

0