Affichage d'une image dont l'url est stockée dans la bdd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage d'une image dont l'url est stockée dans la bdd

par Cyrano » 28 août 2005, 13:11

BOn, j'ai regardé ton code d'un peu plus près et il y a des bizarreries. J'ai simplifié certains éléments, voici une proposition de corrigé (à tester):
<?php
//Variable à modifier
$carte='1';
$x=1; $y=1;

//Boucle d'affichage de 11 cases sur 11
?>
<table border='1' bordercolor='black' cellpadding='0' cellspacing='0'>
<?php
for ($y = 1; $y <= 11; $y++)
{
?>
  <tr>
    <td><?php echo($y); ?></td>
<?php
    $x = 1;
    for ($x = 1; $x <= 11; $x++)
    {
        $where = " where id_carte = ". $carte ." and x = ". $x ." and y = ". $y;
        //Requête pour l'affichage d'un pj, d'un pnj ou d'un objet.
        $objet   = mysql_query("SELECT objet FROM `th_position`". $where .";");
        $resultat_objet = mysql_result($objet, 0);
        //Requête pour l'affichage du type de terrain
        $terrain = mysql_query("SELECT type FROM `th_position` ". $where .";");
        $resultat_terrain = mysql_result($terrain, 0);

        if (!$resultat_objet)
        {
?>
    <td><img src="<?php echo($resultat_terrain); ?>"></td>
<?php
        }
        else
        {
            switch($objet)
            {
                //Si l'objet est un pj
                case 1 : $sql = "SELECT image FROM `th_user`". $where .";";
                break;
                //Si l'objet est un pnj
                case 2 : $sql = "SELECT image FROM `th_pnj`". $where .";";
                break;
                //Si l'objet est un objet
                case 3 : $sql = "SELECT image FROM `th_objetcarte`". $where .";";
                break;
            }
            /* Affichage de débuggage */
            // echo("<p>". $sql ."</p>\n");
            /* Fin affichage débuggage */
            $image = mysql_query($sql);
            //Affichage général
            $resultat_img = mysql_result($image, 0)
?>
    <td background="<?php echo($resultat_terrain); ?>"><img src="<?php echo($resultat_img); ?>"></td>";
<?php
        }
    }
?>
  </tr>
<?php
}
//Fin du tableau
?>
</table>
Note que j'ai ajouté une ligne de débuggage après les "case", décommente la ligne echo() si ça marche pour pour védifier la requête qui est générée et teste la dans phpMyAdmin directement pour vérifier si tu obtiens un résultat.

par Shenryu » 28 août 2005, 12:44

Oui, je me connecte bien à la base de données et je la ferme via un mysql_close();

En fait je crois que ce qui en va pas, c'est que quelque soit la valeur de la variable $objet, le echo dont je parle, cherche a afficher la variable $image. Le problème, c'est que cette image n'existant pas, cela affiche une croix rouge. Je pense qu'une fonction permettant de ne pas afficher ce echo en cas d'erreur. Mais je ne connais pas assez le php pour ça :s

par Cyrano » 27 août 2005, 22:31

Il manquerait pas par hasard la connexion à la base de données avant tout ça ? :-k

par Shenryu » 27 août 2005, 19:02

En fait j'ai toujours la même erreur malgré que j'ai corrigé toutes les erreurs de concaténation. J'ai rectifié également pour les variables déclaré avant comme terrain et objet. Mais le
echo "<td background=\"". mysql_result($terrain, 0) ."\"><img src=\"". mysql_result($image, 0) ."\"></td>";
que j'avais mis en rouge plus haut ne passe toujours pas. Néanmoins, petite différence dans l'erreur indiquée. Il y a écrit index 4 tandis que tout à l'heure c'était index 5 mais je ne sais pas ce que cela représente.

par Cyrano » 27 août 2005, 18:37

Il y a une erreur et des concaténations à revoir dans ton switch:
            switch($objet)
            {
                //Si l'objet est un pj
                case 1 : $image=mysql_query("SELECT image FROM `th_user` where id_carte=". $carte ." and x=". $x ." and y=". $y .";");
                break;
                //Si l'objet est un pnj
                case 2 : $image=mysql_query("SELECT image FROM `th_pnj` where id_carte=". $carte ." and x=". $x ." and y=". $y .";");
                break;
                //Si l'objet est un objet
                case 3 : $image=mysql_query("SELECT image FROM `th_objetcarte` where id_carte=". $carte ." and x=". $x ." and y=". $y .";");
                break;
            }
Et comme tu vois, on ne met pas d'accolades après les case, en revanche, chacun se termine par un break.

par Shenryu » 27 août 2005, 18:08

Euh je reviens parce qu'en fait j'ai toujours un problème lié à ces fameuses images... En fait j'aimerai créer une carte sur laquelle des bonhommes pourront se déplacer. J'ai donc besoin d'afficher deux images en même temps. Pour cela j'utilise un td background suivi d'un img src qui contiendra le bonhomme. Voici le code que j'ai utilisé :
//Variable à modifier
$carte='1';
$x=1; $y=1;

//Boucle d'affichage de 11 cases sur 11
echo "<table border='1' bordercolor='black' cellpadding='0' cellspacing='0'>";
for ($y = 1; $y <= 11; $y++)
{
	echo "<tr><td>$y</td>";
	$x = 1;
	for ($x = 1; $x <= 11; $x++)
	{
	//Requête pour l'affichage d'un pj, d'un pnj ou d'un objet.
		$objet=mysql_query("
			SELECT objet FROM `th_position` where id_carte=$carte and x=$x and y=$y;
		");
	//Requête pour l'affichage du type de terrain
		$terrain=mysql_query("
			SELECT type FROM `th_position` where id_carte=$carte and x=$x and y=$y;
		");

		if ($objet == NULL)
		{
			echo "<td><img src=\"".mysql_result($terrain, 0)."\"></td>";
		}

		elseif ($objet != NULL)
		{
			switch($objet)
			{
			//Si l'objet est un pj
				case 1:
				{
					$image=mysql_query("
						SELECT image FROM `th_user` where id_carte=$carte and x=$x and y=$y;
					");
				}
			//Si l'objet est un pnj
				case 2:
				{
					$image=mysql_query("
						SELECT image FROM `th_pnj` where id_carte=$carte and x=$x and y=$y;
					");
				}
			//Si l'objet est un objet
				case 3:
				{
					$image=mysql_query("
						SELECT image FROM `th_objetcarte` where id_carte=$carte and x=$x and y=$y;
					");
					break;
				}
			}
			//Affichage général
			echo "<td background=\"".mysql_result($terrain, 0)."\"><img src=\"".mysql_result($image, 0)."\"></td>";
		};

		//Retour à la ligne lorsque la première ligne est complète
		if ($x == 11)
		{
			echo "</tr>";
		};
	};
};
//Fin du tableau
echo "</table>";
Et voici l'erreur qui m'est indiqué :
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 5 in /var/www/free.fr/5/8/shenryu72/Carte/affichage.php on line 59
La ligne 59 est le echo mis en rouge plus haut.
J'ai essayé de rajouter un défaut à la fin de mon switch mais rien n'y change. Si je fais un echo dans le switch ce qui rend le code un peu moins bon, je n'ai qu'une erreur de ce type qui se situe à l'endroit où le joueur se trouve ($objet == 1). Et l'erreur que l'on m'indique se situe sur le case suivant ici case 2.

par Cyrano » 25 août 2005, 22:37

Ha si alors ça effectivement, c'est une concaténation : le point est l'opérateur de concaténation en PHP et on doit échapper le premier guillemet parce que c'est du html, le second fermant la partie chaine de caractère pour afficher une variable PHP... et inversement juste après.

par Shenryu » 25 août 2005, 22:34

Comment s'appelle cette méthode ?
echo "<img src=\"".$photo['type']."\">";
Le mysql_result fonctionne nikel maintenant. Merci beaucoup pour ton aide.

par Cyrano » 25 août 2005, 22:15

Ce n'est pas une concaténation, le "0" est un pointeur parce que le retour de mysql_result est un tableau indexé, donc 0 te donne le premier résultat.

par Shenryu » 25 août 2005, 22:10

Merci beaucoup pour cette réponse si rapide.

Le mysql_fetch_assoc fonctionne par contre le mysql_result ne fonctionne pas. J'ai enlevé la faute de parenthèses mais il y a toujours une erreur dans ma page.

Je voulais aussi savoir à quoi servait le 0
$photo = mysql_result($terrain, 0)
Et pourquoi faut-il concaténer pour pouvoir afficher l'image. Je débute en codage de Java et de C et je n'ai jamais de concaténation de ce type. On fait plutot un passage d'int en varchar ou autre...

par Cyrano » 25 août 2005, 21:54

Tu as zappé une étape entre mysql_query et l'affichage.

Utilise par exemple mysql_fetch_assoc():
$terrain= mysql_query("SELECT type FROM `position`;");

/* On récupère les résultats */
while($photo = mysql_fetch_assoc($terrain))
{
    echo "<img src=\"".$photo['type']."\">";
}
Si tu sais que tu n'auras qu'un seul résultat, tu pourrais aussi le faire avec mysql_result():
$terrain= mysql_query("SELECT type FROM `position`;");

/* On récupère les résultats */
$photo = mysql_result($terrain, 0))
{
    echo "<img src=\"".$photo."\">";
}

Affichage d'une image dont l'url est stockée dans la bdd

par Shenryu » 25 août 2005, 21:47

Je n'arrive pas à afficher l'image dont j'ai enregistré l'adresse dans ma base dans un fichier install.php

J'ajoute l'image à ma base :
mysql_query("
INSERT INTO `position` ( `type`)
VALUES ('http://shenryu72.free.fr/Carte/images/herbe.jpg',);
");
Les adresses sont bien stockées dans l'entité type (varchar 200 not null) car j'ai vérifié dans ma bdd.
C'est ensuite que les choses posent problèmes je pense. Voici ma page affichage.php
$terrain= mysql_query("
SELECT type FROM `position`;
");

echo $terrain;
echo "<img src=$terrain>";
echo "<img src=\"".$terrain."\">";
Voila pour moi, le premier echo devrait m'afficher l'url de l'image mais il m'affiche
Resource id #2
Le second echo m'affiche une magnifique croix rouge alors que je voulais l'image :'( et le dernier echo est ce qu'on m'a dit de faire sur un autre site (concaténer) mais là encore j'obtiens une croix rouge.

Merci d'avance pour votre aide.