Problème pour afficher image avec texte en dessous

Répondre
albatross
le 23/05/2014 à 10:54
albatross
<?php Votre code php ?>
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 "."&nbsp".$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"]."&nbsp;".$val["Nom_Acteur"].'">'."&nbsp;";

} php ?>


En vous remerciant par avance,

Bonne journée
LupusMic
le 23/05/2014 à 12:07
LupusMic
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');
?>">&nbsp;<?php
echo htmlentities($val["Nom_Acteur"], ENT_QUOTES, 'UTF-8');
?>">&nbsp;

<?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.
albatross
le 23/05/2014 à 12:44
albatross
LupusMic
le 23/05/2014 à 12:07 LupusMic a écrit
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. smiley
albatross
le 23/05/2014 à 13:00
albatross
Oups !
résultat:
http://planet-80.com/ALpha_Acteur_Test_Nom_050514.php?lettre=b

ma page avec mon code normal :
http://planet-80.com/ALpha_Acteur.php?lettre=B

LupusMic
le 23/05/2014 à 15:47
LupusMic
> 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.
albatross
le 25/05/2014 à 08:21
albatross
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.
LupusMic
le 26/05/2014 à 11:33
LupusMic
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.
albatross
le 26/05/2014 à 16:14
albatross
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... smiley
albatross
le 26/05/2014 à 16:15
albatross
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.
Répondre
LoadingChargement en cours