Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trombinoscope PHP

Sujet résolu
24 juin 2014 à 10:15:40

Bonjour tous le monde,

Je vous explique mon problème: j'essaye de faire un trombinoscope à l'aide d'une base de donnée. Le procédé est le même que pour récupéré des informations d'une BDD sauf que nous stockons dans celle ci le chemin d'accès a photo voulu.

Le problème que je rencontre est que je n'arrive pas a organiser mon code correctement pour pouvoir afficher d'une part mes informations contact et d'une autre part la photo qui vas avec.

J'utilise une page où sont présentent toutes mes fonctions (requêtes sql),et ma page d'affichage en html/php. J'utilise PhpMyAdmin pour ma base de donnée.

Mon code de base marche très bien avec les entrées du tableau, c'est a partir du moment ou j'essaye d'afficher les images que sa bug.

<table border=2>
    <th>Nom</th>
    <th>Prenom</th>
    <th>Telephone</th>
    <th>Poste</th>
    <th>Adresse</th>
    <?php asort($listeContact);
	foreach ($listeContact as $cle=>$valeur): ?>
  <tr>
    <?php foreach ($valeur as $val): ?>
    <td><?= $val ?></td>
<tr>
	<?php foreach($valeur as $val): ?>
	<td><?= echo "<img src="$val"/>"; ?></td>

    <?php endforeach; ?>
    <?php endforeach; ?>
    <?php endforeach; ?>

je sais que la partie image c'est du n'importe quoi, me juger pas sévèrement :euh:

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 10:25:34

<td><?= echo '<img src="' . $val . '"/>'; ?></td>
<td><?= echo "<img src='$val'/>"; ?></td>
  Au choix ;)
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 10:25:38

Tu fais un foreach dans un foreach, avec les même noms de variables.

Si je me trompe pas, tu vas avoir de gros problèmes.

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 10:26:54

Par contre pourquoi ouvrir des balises pour chaque foreach ? Et pourquoi utiliser <? et <?= 

Faut être homogène ;)

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 10:34:21

Le plus choquant étant "<?= echo"... C'est comme si t'écrivais "<? echo echo" étant donné que "<?=" est un raccourci pour "<? echo". ^^
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:03:04

J'avais pas fais gaffe pour mon "<?= echo"  ^^' merci

Par contre après avoir corriger la ligne le code fonctionne mais il n'affiche pas l'image

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:10:02

Il manque l'extension a l'image

<td><?= echo '<img src="' . $val . '.png"/>'; ?></td>
<td><?= echo "<img src='$val.png'/>"; ?></td>

Et je suis presque sur que tu as un foreach en trop :)

<table border=2>
    <th>Nom</th>
    <th>Prenom</th>
    <th>Telephone</th>
    <th>Poste</th>
    <th>Adresse</th>
    <?php asort($listeContact);
    foreach ($listeContact as $cle=>$valeur): ?>
  <tr>
    <?php foreach ($valeur as $val): ?>
    <td><?= $val ?></td>
<tr>
    <td><?= "<img src="$val"/>"; ?></td>
    <?php endforeach; ?>
    <?php endforeach; ?>


?!

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:29:20

Je vois un autre problème dans ton code :

echo "<img src="$val"/>";

Ici, les doubles quotes (") délimitent les strings à faire afficher par echo, et pour lui, la chaîne s'arrête à "src=" étant donné que la double quote suivante ferme la chaîne. Tu dois donc concaténer avec la variable de cette manière :

echo "<img src='" . $val . "'/>";

Ou plus simplement (puisque tu utilises justement des doubles quotes) :

echo "<img src='$val'/>";

Et c'est là que je remarque que c'est exactement ce que t'as proposé Hartouze un peu plus haut ! ^^

(désolé, je suis aveugle !)





-
Edité par Sir_Winn3r 24 juin 2014 à 11:49:16

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:29:42

Ba pour l'extension j'ai rentré dans ma BDD mon chemin avec l'image donc /Images/monimage.png
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:33:05

ça t'affiche un carré type image indisponible ou rien du tout ?
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:34:25

sa m'affiche le texte brut "/Images/monimage.png"
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:36:45

Repost le morceau de code corrigé stp
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:41:57

<table border=2>
    <th>Nom</th>
    <th>Prenom</th>
    <th>Telephone</th>
    <th>Poste</th>
    <th>Adresse</th>
    <th>Images</th>
    <?php asort($listeContact);
	foreach ($listeContact as $cle=>$valeur): ?>
  <tr>
    <?php foreach ($valeur as $val): ?>
    <td><?= $val ?></td>
 <tr>
    <td><?= "<img src='$val'/>"; ?></td>


    <?php endforeach; ?>
    <?php endforeach; ?>
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:42:20

Pour ce qui est du foreach en trop, j'ai pensé que ça ne fonctionnait pas, mais après avoir testé, on peut très bien imbriquer des foreach sur des même données et avec des même variables.

Mais il est clair que son utilisation ici ne peut causer l'effet escompté.

Le code d'Hartouze est normalement suffisant

<?php foreach ($valeur as $val): ?>
    <td><?= $val ?></td>
<tr>
    <td><?= "<img src='$val'/>"; ?></td>
    <?php endforeach; ?>

Cependant, dans cette forme, le code va, pour chaque donnée (y compris les noms, prénoms et autres données des utilisateurs), tenter de l'afficher, puis d'afficher une image se trouvant à ce chemin d'accès (pour le prénom, il va être dur d'afficher une image s'appelant "Jean-Pierre" ou "Bernard", par exemple). ^^

Je pense plutôt à un code de ce type :

<?php foreach ($valeur as $key=>$val): 
    if ($key == '[nom du champ image dans la BDD]') { ?>
<tr>
    <td><?= "<img src='$val'/>"; ?></td>
<?php } else { ?>
    <td><?= $val ?></td>
    <?php } ?>
    <?php endforeach; ?>




-
Edité par Sir_Winn3r 24 juin 2014 à 11:48:37

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:44:01

<td><?= '<img src="' . $val . '"/>'; ?></td>
Plutot comme ça, essaie :)
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:53:08

Le tableau s'affiche mieux mais l'image est toujours en texte brut >_<
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:58:29

Et surtout affiche la source de la page HTML générée :)
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 11:59:13

<table border=2>
    <th>Nom</th>
    <th>Prenom</th>
    <th>Telephone</th>
    <th>Poste</th>
    <th>Adresse</th>
    <th>Images</th>
    <?php asort($listeContact);
	foreach ($listeContact as $cle=>$valeur): ?>
  <tr>
<?php foreach ($valeur as $key=>$val):
    if ($key == '[image]') { ?>
<tr>
<td><?= '<img src="' . $val . '"/>'; ?></td>
<?php } else { ?>
    <td><?= $val ?></td>
    <?php } ?>
    <?php endforeach; ?>
    <?php endforeach; ?>

Merci de votre patience :honte:
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 12:01:26

Sois homogène si tu fais foreach: endforeach; fait if: else: et endif; :D

$key = image plutôt non ? Je ne crois pas que foreach donne la valeur encadrée de crochets. On peut avoir le html généré ? 

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 12:05:17

Oui, j'avais mis les crochet pour préciser qu'il ne fallait pas écrire exactement ça mais remplacer par le nom du champ dans la table. ^^

Hartouze : Il a juste copié mon code, et je n'ai pas l'habitude de faire if: else: endif; donc c'est normal de se retrouver avec un mix.

-
Edité par Sir_Winn3r 24 juin 2014 à 12:12:13

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 12:14:11

?php
 require_once('fonction.php');
       

  $listeContact = getAllContact();


?>



<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8" />
  <link href="CSS/annuaire.css" rel="stylesheet" type="text/css">
  <title> Accueil </title>
</head>
<body>

<br>
<br>
<br>

<table border=2>
    <th>Nom</th>
    <th>Prenom</th>
    <th>Telephone</th>
    <th>Poste</th>
    <th>Adresse</th>
    <th>Images</th>
    <?php asort($listeContact);
	foreach ($listeContact as $cle=>$valeur): ?>
  <tr>
<?php foreach ($valeur as $key=>$val):
    if ($key == image) { ?>
<tr>
<td><?= '<img src="' . $val . '"/>'; ?></td>
<?php } else { ?>
    <td><?= $val ?></td>
    <?php } ?>
    <?php endforeach; ?>
    <?php endforeach; ?>

 
</table>
<br>
<br>
<br>
<br>
</body>
</html>


Code de la page en entier

qui me donne mon tableau  (ps: dans mon code images n'est pas a la bonne place mais je m'occupe pas vraiment du details pour l'instant)

-
Edité par Snoopy7710 24 juin 2014 à 12:18:31

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 12:20:25

ce que je voudrai c'est que tu fasses un clique droit sur la page affichée par ton navigateur et que tu mettes le code généré par PHP, surtout celui de l'image. 

N'hésites pas à faire ça régulièrement quand tu as des erreurs d'affichage ça aide souvent à trouver la solution

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 12:24:51

Oui, montre-nous le code source HTML.

Par contre, il fallait laisser les guillemets autours de "image", c'est pour ça que je l'ai avais mis (c'est plutôt étonnant qu'il ne t'envoi pas une erreur du genre "Unexpected T_STRING", d'ailleurs !).

-
Edité par Sir_Winn3r 24 juin 2014 à 12:25:37

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 13:23:53

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8" />
  <link href="CSS/annuaire.css" rel="stylesheet" type="text/css">
  <title> Accueil </title>
</head>
<body>

<br>
<br>
<br>

<table border=2>
    <th>Nom</th>
    <th>Prenom</th>
    <th>Telephone</th>
    <th>Poste</th>
    <th>Adresse</th>
    <th>Images</th>
      <tr>
<tr>
<td><img src=""/></td>
        <td>0</td>
            <td>R*********</td>
            <td>*****</td>
            <td>0</td>
            <td>******@*********.fr</td>
              <tr>
<tr>
<td><img src=""/></td>
        <td>0  </td>
            <td>L*********  </td>
            <td>********</td>
            <td>***</td>
            <td>**********@**********.fr</td>
              <tr>
<tr>
<td><img src="/Images/monimage.png"/></td>
        <td>*********      </td>
            <td>********      </td>
            <td>***</td>
            <td></td>
            <td>*********@*****************.fr      </td>

voila dans les grandes lignes ce que j'obtiens
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 14:19:23

Ok, donc c'est plutôt bon, en fait. Dans quelle dossier se trouve le dossier "Images" ? Est-ce que la page générée par le serveur se trouve dans le même dossier ? C'est visiblement un problème de 404, et tu peux le voir dans l'onglet console de la console (F12) de ton navigateur (je crois que c'est pareil sur Chrome et Firefox), il doit te marquer un truc du genre "'/Images/monimage.png' 404" en ligne rouge.
  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 15:02:12

je suis sur iceweasel comme navigateur (je programme principalement sous linux)

Problème résolu c'était effectivement mon chemin d'accès où j'avais une faute.

Sa marche niquel

Merci beaucoup de votre patience et d'avoir pris le temps de m'aider :D

  • Partager sur Facebook
  • Partager sur Twitter
24 juin 2014 à 15:14:12

Pas de problème. Bonne chance.

Revois quand même ton architecture HTML, surtout les <tr> non fermés (mais je pense que tu as dû le remarquer à l'affichage). :)

P.S. : N'oublie pas de marquer le sujet comme résolu.

-
Edité par Sir_Winn3r 24 juin 2014 à 15:14:44

  • Partager sur Facebook
  • Partager sur Twitter