Problème pour afficher image avec texte en dessous
Tout d'abord bonjour à toutes et à tous,
Je suis tout nouveau et pas spécialement doué en PHP, mais je viens chercher ici quelques réponses et si possible avoir votre aide.
Voilà j'ai un site sur les Années 80... en éternelle m.à.j et j'ai un petit souci avec une requête dans ma bdd. voici le lien vers le site et l'affichage actuel.
http://planet-80.com/ALpha_Acteur.php?lettre=B
Ce que je voudrais donc c'est pouvoir afficher le nom de l'acteur sous l'image tout en gardant l'affichage actuel.
Ci-dessous un bout du code pour que vous puissiez me dire où j'ai une erreur :
<?php
// sélectionne les fiches de la table
$query="SELECT * FROM acteur".$SQL2
." ORDER BY Nom_Acteur LIMIT $Ndeb,$Nmax";
$result = mysql_query($query);
$query = "SELECT * FROM `acteur` WHERE Nom_Acteur LIKE '$val%' ORDER BY `Nom_Acteur` ASC ";
echo "Acteurs commençant par "." ".$Lettre."<BR>"."<BR>";
while ($val = mysql_fetch_array($result)) {
// affiche un champ
echo "<align=left><a href='Acteurs.php?page=".$val["Nom_Acteur"]."'>".'<img style="margin:0px 15px 5px 0px;padding:3px;border:1px solid white;" src="http://www.planet-80.com/image/Acteurs/Miniatures Acteurs/'.$val["Miniature_Alpha_Acteur"].'" title="'.$val["Prenom_Acteur"]." ".$val["Nom_Acteur"].'">'." ";
} php ?>
En vous remerciant par avance,
Bonne journée
1. ton script est vulnérable à du XSS. Quand tu créés un document HTML, il faut que tu encode correctement les éléments que tu y insères :
<?php htmlentities($Lettre, ENT_NOQUOTES, 'UTF-8');
Lis attentivement la documentation de cette fonction pour comprendre son fonctionnement. Surtout ENT_QUOTES, ENT_NOQUOTES, qui sont des valeurs importantes dès lors que tu insères des données dans des attributs HTML.
2. Ne ferme pas ta section de code avec ?>. Le 'php' dans la ligne 21 est d'ailleurs en trop.
3. N'utilises pas echo et la concaténation de chaînes, ça rend les choses illisibles.
<?php
while ($val = mysql_fetch_array($result)): /* affiche une entrée */ ?>
<align=left><a href='Acteurs.php?page="<?php
echo htmlentities($val["Nom_Acteur"], ENT_QUOTES, 'UTF-8');
?>"><img style="margin:0px 15px 5px 0px;padding:3px;border:1px solid white;" src="http://www.planet-80.com/image/Acteurs/Miniatures Acteurs/<?php
echo htmlentities($val["Miniature_Alpha_Acteur"], ENT_QUOTES, 'UTF-8');
?>" title="<?php
echo htmlentities($val["Prenom_Acteur"], ENT_QUOTES, 'UTF-8');
?>"> <?php
echo htmlentities($val["Nom_Acteur"], ENT_QUOTES, 'UTF-8');
?>">
<?php endwhile;
Voilà, avec ça, tu devrais déjà y voir plus clair et savoir où placer ce que tu souhaites.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
1. ton script est vulnérable à du XSS. Quand tu créés un document HTML, il faut que tu encode correctement les éléments que tu y insères :
<?php htmlentities($Lettre, ENT_NOQUOTES, 'UTF-8');
Lis attentivement la documentation de cette fonction pour comprendre son fonctionnement. Surtout ENT_QUOTES, ENT_NOQUOTES, qui sont des valeurs importantes dès lors que tu insères des données dans des attributs HTML.
2. Ne ferme pas ta section de code avec ?>. Le 'php' dans la ligne 21 est d'ailleurs en trop.
3. N'utilises pas echo et la concaténation de chaînes, ça rend les choses illisibles.
<?php
while ($val = mysql_fetch_array($result)): /* affiche une entrée */ ?>
<align=left><a href='Acteurs.php?page="<?php
echo htmlentities($val["Nom_Acteur"], ENT_QUOTES, 'UTF-8');
?>"><img style="margin:0px 15px 5px 0px;padding:3px;border:1px solid white;" src="http://www.planet-80.com/image/Acteurs/Miniatures Acteurs/<?php
echo htmlentities($val["Miniature_Alpha_Acteur"], ENT_QUOTES, 'UTF-8');
?>" title="<?php
echo htmlentities($val["Prenom_Acteur"], ENT_QUOTES, 'UTF-8');
?>"> <?php
echo htmlentities($val["Nom_Acteur"], ENT_QUOTES, 'UTF-8');
?>">
<?php endwhile;
Voilà, avec ça, tu devrais déjà y voir plus clair et savoir où placer ce que tu souhaites.
Merci LupusMic, je teste ça et je vois la documentation. Pourquoi ne dois-je pas fermer le code avec ?> ?
Pour ce qui est de la concaténation j'ai lu quelque part qu'il valait mieux favoriser ça à des "echo" répétés. Y a t-il plusieurs écoles ?
De toutes façons comme je l'ai dit je suis plus un bidouilleur de Php qu'un cador.
Merci encore et bonne journée,
Je reviendrais montrer les résultats.
> Pourquoi ne dois-je pas fermer le code avec
Parce que c'est inutile, ce qui est inutile est potentiellement une source de bogues.
J'ai fait une erreur en corrigeant ton code. Sur la ligne 11, il y a un chevron > en trop. Ceci dit, il doit rester des problèmes : fais attention à bien distinguer les quotes/doublequotes qui délimitent des chaînes en PHP, et les paires qui délimitent des attributs en HTML.
Peut-être que tu devrais écrire une fonction qui simplifie les choses:
<?php
function make_tag($name, $attributes = array(), $nested = null)
{
$outpur = '';
//IMPLEMENT
return $output;
}
// Use case:
echo make_tag('a', array('href' => 'http://example.com'), 'Example'));
Ce qui donnerait :
<a hreaf='http://example.com'>Example</a>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
OK. Par contre d'une part les fonctions je suis pas assez calé et d'autre part, le résultat que je veux ne marche pas. Je voudrais juste pouvoir afficher sous chaque photo d'acteurs, son nom et prénom.
Ne prends pas les choses par dessus la jambe. Il y a des failles de sécurité parfaitement exploitable sur ton site, et tu ferais mieux d'appliquer ce que je te conseille.
Les fonction, ce n'est pas dur. Au contraire, ça va simplifier ton code, et tu pourras plus facilement produire le HTML que tu souhaites.
D'ailleurs, as-tu tenté de créer le code HTML manuellement pour placer les noms sous les photos ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Comme je te l'ai dit je suis pas un cador, donc certaines choses me semblent pas toujours très aisées.
J'ai testé avec les balises <figure> et <figcaption>. ce qui n'est pas mal, mais je voudrais que l'affichage soit identique au lien suivant :
http://planet-80.com/ALpha_Movies.php?lettre=A avec comme demandé, sous chaque miniature, le nom la désignant.
Le souci c'est qu'à chaque fois je me retrouve avec les images les unes sous les autres et pas comme dans le lien ci-dessus.
Pour les fonctions ça serait avec grand plaisir, mais même celle que tu as mise, je la comprends pas bien, donc...
Ah oui autre petite choses. Je sais bien et je me doute qu'il y a des failles, mais c'est essentiellement parce que je bidouille plus que je ne code, donc ça explique un peu cela.