PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-06-2016 09:02:18

darktwiin
Membre
Inscription : 09-06-2016
Messages : 3

[Résolu] Affichage d'un blob a partir d'une base de donnée

Tout dabord bonjour tout le monde !
je viens de m'inscrire sur ce forum car après plusieurs jour d'écheques je viens demander de l'aide pour afficher un blob..

Bon, mon projet est d'afficher le contenu d'une base de donnée MYSQL en localhost donc y compris des blob, tout fonctionne sauf l'affichage d'image.

Ma base s’appelle : goproviewer la table : table_goproviwer (il manque bien le "e") et elle contiens "ID_pick" "Date" "Position_GPS" et "Captures".
Vous l'aurez compris ID_pick est en A.I, date en date lol Position_GPS en varchar ET Captures en BLOB. j'utilise WAMP (ca peu peu-etre aider ^^)

le mieux serait de vous montrer mon code, alors le voici :
Donc le premier qui s'apelle test2.php

<!DOCTYPE html PUBLIC>
<html>
  <head>
    <meta charset="UTF-8"  >
    <meta charset="ISO-8859-1"  >
    <title>Gestion de la BDD GoProViwer</title>
  </head>
  <body bgcolor="lightgrey">
 
    <h1 style="color:black; text-align:center;">Gestion de la BDD GoProViwer</H1>
    <form name="FormAccesBDD" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
      <table border='10' align="center" style='background-color:grey cellspacing="10" ; bordercolor:red' >
        <tr>
          <td style="text-align:center ; color:black">Serveur : </td>
          <td> <input type="text" name="adServeur" size="30" value="<?php if(isset($_POST['btn_listerTable'])) echo $_POST['adServeur']; else echo "localhost"; ?>" /></td>
        </tr>
        <tr>
          <td style="text-align:center ; color:black">Nom de l'utilisateur : </td>
          <td> <input type="text" name="nomUser" size="30" value="<?php if(isset($_POST['btn_listerTable'])) echo $_POST['nomUser']; else echo "admin"; ?>" /></td>
        </tr>
        <tr>
          <td style="text-align:center ; color:black">Mot de passe : </td>
          <td> <input type="text" name="motPasse" size="30" value="<?php if(isset($_POST['btn_listerTable'])) echo $_POST['motPasse']; else echo ""; ?>" /></td>
        </tr>
        <tr>
          <td style="text-align:center ; color:black">Nom de la base de donees : </td>
          <td> <input type="text" name="nomBdd" size="30" value="<?php if(isset($_POST['btn_listerTable'])) echo $_POST['nomBdd']; else echo "goproviewer"; ?>" /></td>
        </tr>
        <tr>
          <td style="text-align:center ; color:black">Nom de la table : </td>
          <td> <input type="text" name="nomTable" size="30ali" value="<?php if(isset($_POST['btn_listerTable'])) echo $_POST['nomTable']; else echo "table_goproviwer"; ?>" /></td>
        </tr>
        <tr>
          <td>
          <input type="submit" name="btn_listerTable" align="center" value="lister le contenu de la table" /></td>
        </tr>
      </table>
    </form>
  </body>
<?php
  if(isset($_POST['btn_listerTable']))
  {
  try
    {
    // On se connecte à MySQL
   
   
    $bdd = new PDO('mysql:host=localhost; dbname=goproviewer;charset=utf8',$_POST['nomUser'],$_POST['motPasse']);
    //$base = mysqli_connect ("localhost", $_POST['nomUser'],$_POST['motPasse'],"goproviewer"); //utilisation de l'extention mysqli
    }
 
  catch(Exception $e)
  {
    // En cas d'erreur, on affiche un message et on arrête tout
    die('Erreur : '.$e->getMessage());
  }
 
  // On récupère tout le contenu de la table table_goproviwer
  $reponse = $bdd->query('SELECT * FROM table_goproviwer');
  // On affiche chaque entrée une à une
  while ($donnees = $reponse->fetch())
  {
?>
    <p>
    Entree No :<strong> <label style="color:red"> <?php echo $donnees['ID_pick']; ?></label></strong><br />
    La date de prise est :<strong> <label style="color:red"> <?php echo $donnees['Date']; ?></label></strong>, a ces coordonees GPS : <strong> <label style="color:red"> <?php echo $donnees['Position_GPS']; ?></label></strong><br />
  <img src="liste.php?ID_pick=$id">
  </p>
  <?php
  }
  include ("liste.php"); 
  ?>
<?php
 
 
  $reponse->closeCursor(); // Termine le traitement de la requête
  }
?>
</html>

le second s'apelle connexion.php

<?php
    $hote = 'localhost';
    $base = 'goproviewer';
    $user = 'admin';
    $pass = 'admin';
    $cnx = mysqli_connect($hote, $user, $pass) or die(mysql_error());
?>

Et le dernier liste.php :

<html>
   <head>
      <title>Stock d'images</title>
   </head>
   <body>
   <?php
include ("connexion.php");
  $conn=mysqli_connect($hote,$user,$pass,$base) or die(erreurServeurMySQL());
  mysqli_select_db($conn,"test") OR die;
  $id = intval ($_GET['ID_pick'])
  $requete="SELECT ID_pick FROM Captures WHERE ID_pick = '$id'";
  $resultat=mysqli_query($requete,$conn);
  while ($tableau=mysql_fetch_array($resultat))
  {
    $image=$tableau[0];
    echo $image;
  }
  mysqli_close($conn)
  ?>
   </body>
</html>

Voila tout, désolé je sait que ce n'est pas bien organisé mais pour m'a défense j'y ai passerp lusieur jour et fait beaucoup d'essaie qui n'ont pas marcher, je vais dailleur mettre un screen du résultat actuel.
visuel BDD actuel

Merci beaucoup a celui qui pourra m'aider tongue

Dernière modification par darktwiin (09-06-2016 20:38:04)

Hors ligne

#2 09-06-2016 12:04:08

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] Affichage d'un blob a partir d'une base de donnée

Bonjour,

Je pense que la lecture du tutorial http://www.phpdebutant.org/article112.php serait bénéfique.

"Au hasard" je dirai qu'il manque un ; à la fin de la ligne 37 (qui n'est pas la ligne 37 sur l'extrait du code ici, mais la ligne avant celle qui commence par $requete, ce qui me parait bien correspondre).

NB: ce n'est pas une base PHPMyAdmin mais une base MySQL smile

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#3 09-06-2016 20:41:11

darktwiin
Membre
Inscription : 09-06-2016
Messages : 3

Re : [Résolu] Affichage d'un blob a partir d'une base de donnée

Merci pour t'a réponse, l'erreur sur la photo est corrigée, cependant mon image n’apparaît toujours pas hmm
je suis plutôt novice en programmation et tout le code ci dessus est tirée du travail de plusieurs personne alors je sait que ça fait un peu brouillon donc désolé encore une fois, ça doit pas être facile a lire ^^
Si quelqu'un a une idée du pourquoi du comment mon image n’apparaît pas et qu'il veuille bien m'aider je lui serait très reconnaissant smile

Hors ligne

#4 10-06-2016 11:00:20

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] Affichage d'un blob a partir d'une base de donnée

Bonjour,

Il y a je pense beaucoup à dire hmm

- test2 utilise du PDO pour l'accès à la base de données, liste.php et connexion.php du mysqli, étrange d'avoir deux choix, il faut harmoniser et n'utiliser qu'une seule façon ! (de plus il y a un mysqli_connect dans connexion puis dans liste, ça commence à faire beaucoup)

- liste.php récupère l'id pour son select par un $_GET, hors sauf erreur de ma part, on appelle pas test2.php en donnant un id par l'url, il faudrait donc plutot alimenter $id via $donnees['ID_pick'].

- la requête présente dans liste.php selectionne ID_pick, donc la donnée qu'on lui fourni dans le WHERE, ce qui n'a que peu de sens (à part dans certains usages spécifiques et encore).

- et du coup, on réalise que la requête dans liste.php n'a pas de sens, la donnée est déjà sélectionnée dans la requête faite dans test2 via PDO, puisqu'elle sélectionne tous les champs - au passage c'est "mal" de faire comme ça, cf http://www.phpdebutant.org/article152.php

Il est donc possible de nettement simplifier le code sur cette partie.

Ou alors cette construction imbriquée relève de la mauvaise compréhension d'une autre problématique, celle de l'affichage de l'image car on a finalement que son contenu blob, ce qui mis tel quel dans la page ne fait pas d'image. Il y a alors deux "écoles" :

- Intégrer l'image en tant que src base64 dans le code html directement, simple à faire ici : cf http://www.bellami.fr/encoder-ses-images-en-base64 , mais cela peut vite faire des pages très lourdes, et à chaque rechargement de la page il faudra retransférer tout le html donc le poid des images

- Intégrer les images "à l'ancienne", dans ce cas ce n'est pas un include du liste.php qu'il faut faire, mais un appel externe, fait par le navigateur, via un html du genre


<img src="liste.php?ID_pick=<?php echo $donnees['ID_pick']; ?>" />
 

ce qui "complexifie" le code, fait faire plus de requêtes vers le serveur, mais à l'avantage que les images peuvent être mises dans le cache du navigateur.

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#5 13-06-2016 15:36:58

darktwiin
Membre
Inscription : 09-06-2016
Messages : 3

Re : [Résolu] Affichage d'un blob a partir d'une base de donnée

Merci beaucoup de tes réponses ! smile
j'ai utiliser l’intégration en base64 et ça fonctionne big_smile

Hors ligne

Pied de page des forums