2010-09-26 9 views
0

Je travaille sur un uploader d'image dans lequel l'utilisateur télécharge l'image dans la base de données mysql via un simple formulaire HTML/PHP.Comment afficher l'image de la table MySQL vers la page PHP au format tableau?

Cela fonctionne, et maintenant je veux récupérer les images sauvegardées à partir de MySQL dans un format de tableau HTML. Mais je ne réussis pas. Je suis très novice en PHP. J'ai joint le code actuellement utilisé ... quelqu'un peut m'aider s'il vous plaît à créer une solution qui affiche le résultat comme une jolie table?

Je souhaite également autoriser l'utilisateur à télécharger plusieurs fichiers/images à la fois et à les stocker dans la base de données. Comment serait-ce possible?

Voici mon code:

$query = "SELECT * FROM ae_gallery"; 
$result = mysql_query($query) or die('Error, query failed'); 
if(mysql_num_rows($result) == 0) 
{ 
echo "Database is empty <br>"; 
} 
else 
{ 
echo "<center><b><h1><u>WV Images</u></h1></b></center><br>"; 
echo "E_Name &ndash; Job_Num &ndash; Reason &ndash; Time &ndash;Image<br><hr>"; 
while(list($E_Name,$Job_num,$ext,$image_time,$data,$Remarks,)=mysql_fetch_array($result)) 
    { 
    echo " 
    {$E_Name} 
    &ndash; 
    {$Job_num} 
    &ndash; 
    {$Model} 
    &ndash; 
    {$Reason} 
    &ndash; 
    {$image_time} 
    &ndash; 
    <a href='download.php?id={$id}'><img src='http://pagename/wv-images /download.php?id={$id}' width='80' height='80' alt='{$title}' border='0'></a> 
    <br><hr>" ; 
    } 
    } 
    ?> 
    </body> 
    </html> 
+2

personnellement je ne mettrais pas les images/fichiers dans la base de données, mais seulement dans un dossier et garder le lien dans la base de données – In81Vad0

+0

@ In81Vad0 je ne sais pas cette méthode ... s'il vous plaît, si possible, aidez-moi comment peux-tu faire ça? Je suis très novice en PHP. – user437641

+1

Vous avez demandé tout à fait une bouchée. Comment imprimer dans un tableau, comment télécharger plusieurs images, comment gérer ces images. Peut-être que ce serait mieux comme quelques questions distinctes ... Essayez de vous concentrer sur le tableau pour cette question. – JoshD

Répondre

1

Normalement ce que vous allez faire est de télécharger l'image du système de fichiers, généralement sous un nom de fichier comme 123.jpeg, où 123 est la clé primaire de la ligne de base de données associée à la fichier téléchargé. (Ne pas confiance nom de fichier soumis de l'utilisateur pour stocker le fichier sous.)

Vous pouvez télécharger des images dans une colonne BLOB dans la base de données elle-même, puis utiliser un script download.php pour récupérer et recracher:

<?php 
    $result= mysql_query('SELECT imagedata FROM ae_gallery WHERE id='.intval($_GET['id'])) 
    if (mysql_num_rows($result)==0) { 
     header('Status: 404 Not Found'); 
     exit(); 
    } 
    $row= mysql_fetch_assoc($result); 
    header('Content-Type: image/jpeg'); 
    echo $row['imagedata']; 
// no PHP end-tag to avoid accidental whitespace being included in the output 

Cependant, cela signifie que vous n'obtiendrez aucune mise en cache par défaut. Vous devez ajouter une charge de gestion d'en-tête de mise en cache assez compliquée pour l'empêcher de ré-extraire l'image à chaque fois. Le serveur Web est en général un moyen plus efficace de fournir des données statiques.

Pour la page que vous avez cité, vous voulez vraiment afficher dans un <table>. Vous aurez également besoin d'utiliser htmlspecialchars() chaque fois que vous renvoyez une valeur de texte en HTML, sinon vous aurez des problèmes d'injection HTML et des failles de sécurité potentielles pour les scripts intersites.

<?php 
    function h($s) { 
     echo htmlspecialchars($s); 
    } 

    $result= mysql_query('SELECT * FROM ae_gallery') or die('Error, query failed'); 
?> 

<?php if (mysql_num_rows($result)==0) { ?> 
    Database is empty <br/> 
<?php } else { ?> 
    <table> 
     <tr> 
      <th>E_Name</th> 
      <th>Job_Num</th> 
      <th>Model</th> 
      <th>Reason</th> 
      <th>Time</th> 
      <th>Image</th> 
     </tr> 
     <?php while ($row= mysql_fetch_assoc($result)) { ?> 
      <tr> 
       <td><?php h($row['E_Name']); ?></td> 
       <td><?php h($row['Job_Num']); ?></td> 
       <td><?php h($row['Model']); ?></td> 
       <td><?php h($row['Reason']); ?></td> 
       <td><?php h($row['image_time']); ?></td> 
       <td> 
        <a href="/uploaded-images/<?php h($row['id']); ?>.jpeg"> 
         <img src="/uploaded-images/<?php h($row['id']); ?>.jpeg" alt="<?php h($row['title']); ?>"/> 
        </a> 
       </td> 
      </tr> 
     <?php } ?> 
    </table> 
<?php } ?> 

Notes:

  • J'ai défini une fonction avec un nom court pour ne pas avoir à tant taper echo htmlspecialchars(). J'ai supposé que id et title sont des colonnes dans le tableau. (Ils ne semblent pas provenir de n'importe où dans le code exemple.)

  • J'ai supposé que les noms de variables que vous avez utilisés sont les noms de colonnes dans la table, donc utilisé les mêmes noms pour accéder à $row. Il est préférable d'accéder aux résultats d'une requête via des colonnes nommées plutôt que de se fier à leur commande (ce qui peut changer si vous commencez à modifier le schéma).

+0

merci ... ça marche. – user437641

+0

comment placer une vignette d'images à la place de grande image, je pense qu'il peut être fait par le paramètre de largeur et de hauteur dans img tag. – user437641

+0

J'ai essayé la largeur, la hauteur ... mais ne fonctionne pas ... je pense que quelques points ou points-virgules, citations question .. Quelle est la syntaxe correcte pour la largeur, la hauteur pour cette situation. – user437641