2017-10-08 3 views
1

J'essaie de charger les fichiers précédemment téléchargés dans la base de données MySQL. Les fichiers sont stockés sur le dossier tout en soumettant la forme où la page d'aperçu contiendra des hyperliens vers ces fichiers (quelque chose comme les pièces jointes)Afficher les fichiers téléchargés à partir de MySQL en fonction de l'extension de fichier et du nombre de fichiers avec des liens hypertexte

problème que je suis en train est:

  • si je sélectionne seulement 1 ou plusieurs fichiers avec spécifiques extension de fichier à télécharger, puis je vais obtenir le nombre correct de fichiers répertoriés et les liens hypertexte fonctionneront. Si je sélectionne 2 fichiers avec 2 extensions de fichier différentes (PDF et JPG), alors 4 hyperliens seront affichés.
  • si je sélectionne 4 avec 2 différentes extensions de fichier (PDF et JPG), je les obtenir 8 hyperliens affichés

Probablement erreur est avec la commande foreach dans mon code.

Veuillez vérifier l'image ci-jointe à quoi ressemble le chargement des fichiers.

preview of results

index.php

<?php 
include('dbconfig.php'); 

date_default_timezone_set('Europe/Oslo'); 
$loaddate1 = date('Y-m-d'); 
$loadtime1 = date('H-i-s'); 
?> 

<form name="myForm" id="myForm" class="workshop add" action="" method="post" enctype="multipart/form-data"> 
<input id="" type="text" name="toolsn" value=""> 
<input id="" type="text" name="actioninsertdate" value="<?php echo $loaddate1;?>" readonly> <br/> 
<input id="" type="text" name="actioninserttime" value="<?php echo $loadtime1;?>" readonly><br/> 
<input type="file" name="files[]" multiple/><br/> 
<button type="submit" name="submit">Submit</button></div> 
</form> 



<?php 


if(isset($_POST['submit'])) 
{ 
$path = 'images/'; 
$toolsn = $_POST['toolsn']; 
$actioninsertdate = $_POST['actioninsertdate']; 
$actioninserttime = $_POST['actioninserttime']; 
$errors= array(); 
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
    $file_name = $key.$_FILES['files']['name'][$key]; 
    $file_basename = substr($file_name, 0, strripos($file_name, '.')); // get file extension 
    $file_ext = substr($file_name, strripos($file_name, '.')); // get file name 
    $file_size =$_FILES['files']['size'][$key]; 
    $file_tmp =$_FILES['files']['tmp_name'][$key]; 
    $file_type=$_FILES['files']['type'][$key]; 
    $newfilename = $toolsn.'-'.$loaddate1.'_'.$loadtime1.'_'.rand(1,20).$file_ext; 
    if($file_size > 2097152){ 
     $errors[]='File size must be less than 2 MB'; 
    } 

    $query="INSERT workshop1 SET toolsn='$toolsn',file='$newfilename',type='$file_type',size='$file_size',actioninsertdate='$actioninsertdate',actioninserttime = '$actioninserttime'" 
    or die(mysqli_error ($connection)); 
    if(empty($errors)==true || empty($toolsn)==false){ 
     if(is_dir($path.$toolsn)==false){ 
      mkdir("images/$toolsn", 0700);  // Create directory if it does not exist 
     } 
     if(is_dir("images/$toolsn/".$file_name)==false){ 
      //$newfilename = $toolsn.'-'.$loaddate1.'_'.$loadtime1.'_'.rand(1,4).$file_ext; 
      move_uploaded_file($file_tmp,"images/$toolsn/".$newfilename); 
     }else{         // rename the file if another one exist 
      //$newfilename = $toolsn.'-'.$loaddate1.'_'.$loadtime1.'_'.rand(1,4); 
      $new_dir="images/$toolsn/".time().$newfilename; 
      rename($file_tmp,$new_dir) ; 
     } 
    mysqli_query($connection, $query); 
    }else{ 
      print_r($errors); 
    } 
} 

} 
?> 

read.php

<?php 
include('dbconfig.php'); 
$sqls=mysqli_query($connection, " 
SELECT 
GROUP_CONCAT(DISTINCT toolsn SEPARATOR '<br />') as toolsn, 
GROUP_CONCAT(DISTINCT type SEPARATOR '<br />') as type, 
GROUP_CONCAT(DISTINCT file ORDER BY type SEPARATOR '<br />') as file, 
GROUP_CONCAT(DISTINCT actioninsertdate SEPARATOR '<br />') as actioninsertdate, 
GROUP_CONCAT(DISTINCT actioninserttime SEPARATOR '<br />') as actioninserttime 
from workshop1 
group by actioninserttime"); 

//get feedback why database not working 
if (!$sqls) { 
printf("Error: %s\n", mysqli_error($connection)); 
exit(); 
} 
?> 

<table id="table" class="table table-hover table-responsive"> 
<thead class="thead-default"> 
    <tr> 
    <th>Toolsn</th> 
    <th>Date added</th> 
    <th>Time added</th> 
    <th>Attachment</th> 
    </tr> 
</thead> 
<?php 
echo '<tbody id="tbody"><tr>'; 
while ($row = mysqli_fetch_array($sqls)) { 
    echo '<td>'.$row['toolsn'].'</td>'; 
    echo '<td>'.$row['actioninsertdate'].'</td>'; 
    echo '<td>'.$row['actioninserttime'].'</td>'; 

echo '<td>'; 
$eachtoolsn=explode('<br />',$row['toolsn']); 
$eachfile=explode('<br />',$row['file']); 
$eachtype=explode('<br />',$row['type']); 

foreach($eachfile as $listfile) { 
//echo $listfile; 

    foreach($eachtoolsn as $key => $listoolsn) { 
    //echo [$key]; 
    } 

    foreach($eachtype as $listtype) { 
     if ($listtype === 'image/jpeg'){ 
      echo '<a href="images/'.$row['toolsn'].'/'.$listfile.'" target="_blank"><img src="images/'.$row['toolsn'].'/'.$listfile.'" width="48" height="48"></a>'; 
     } elseif ($listtype === 'application/pdf'){ 
      echo '<a href="images/'.$row['toolsn'].'/'.$listfile.'" target="_blank"><img src="images/icon-pdf.png" width="48" height="48"></a>'; 
     } 
    } 

echo '</td>'; 
echo '</tr>';} 
echo '</tbody></table>'; 
?> 
+0

code Vous est ** [Injection SQL vulnérable] (https://stackoverflow.com/questions/601300/what- is-sql-injection) **, ne l'utilisez pas en production et apprenez à vous protéger. – Blag

Répondre

0

Votre logique est pas bon:

<?php 
foreach($eachfile as $listfile) { 
    foreach($eachtype as $listtype) { // <= your bug is here 
     if ($listtype === 'image/jpeg'){ 
      echo '<a href="images/'.$row['toolsn'].'/'.$listfile.'" target="_blank"><img src="images/'.$row['toolsn'].'/'.$listfile.'" width="48" height="48"></a>'; 
     } elseif ($listtype === 'application/pdf'){ 
      echo '<a href="images/'.$row['toolsn'].'/'.$listfile.'" target="_blank"><img src="images/icon-pdf.png" width="48" height="48"></a>'; 
     } 
    } 
} 

Voici la nouvelle version:

<?php 
foreach($eachfile as $key => $listfile) { 
    if ($eachtype[$key] === 'image/jpeg') 
     echo '<a href="images/'.$row['toolsn'].'/'.$listfile 
     .'" target="_blank"><img src="images/'.$row['toolsn'] 
     .'/'.$listfile.'" width="48" height="48"></a>'; 
    elseif ($eachtype[$key] === 'application/pdf') 
     echo '<a href="images/'.$row['toolsn'].'/'.$listfile 
     .'" target="_blank"><img src="images/icon-pdf.png" ' 
     .'width="48" height="48"></a>'; 
} 

Le $key est l'indice de votre ligne dans le tableau que vous faites avec explode()

$eachfile = array(
    0=>'file1', 
    1=>'file2', 
) 

$eachtype = array(
    0=>'PDF', 
    1=>'JPG', 
) 

Vous venez d'utiliser la clé de vous déposer pour obtenir la bonne ligne du type.

+0

En utilisant votre code, je reçois une erreur: Notice: Undefined offset: 1, ou Notice: Undefined offset: 2? Est-ce que tu sais pourquoi? – stvlada

+0

@stvlada Qu'avez-vous dans $ eachfile et $ eachtype?(Utilisez var_dump) – Blag

+0

pour la première ligne de l'image ci-dessus où j'ai deux images stockées dans mysql, mon var_dump ressemble à tableau: (size = 2) 0 => chaîne 'ASM5000-006-2017-10-08_11-05-42_18 .jpg '(longueur = 38) 1 => chaîne' ASM5000-006-2017-10-08_11-05-42_16.jpg '(longueur = 38) – stvlada

0

J'ai réussi à obtenir des aperçus de fichiers distingués si un seul poste est téléchargé. Si je télécharge plusieurs fichiers avec deux extensions différentes, je ne peux pas faire de code pour que les fichiers PDF téléchargés obtiennent l'icône PDF en aperçu. Soit tous les fichiers peuvent avoir la même icône (code différent) ou ceci montré sur l'image. Pour une raison quelconque ce qui se passe quand GROUP_CONCAT est utilisé pour recueillir un ou plusieurs fichiers regroupés par « actioninsertime ».

Aperçu de l'image:

enter image description here

code utilisé:

$eachfile=explode('<br />',$row['file']); 
$eachtype=explode('<br />',$row['type']); 
$eachextension=explode('<br />',$row['extension']); 

foreach ($eachtype as $listtype){} 
foreach ($eachextension as $listextension){} 


foreach ($eachfile as $listfile){ 
if ($listextension === 'pdf') { 
echo '<a href="images/'.$row['toolsn'].'/'.$listfile.'" target="_blank"><img src="images/icon-pdf.png" width="48" height="48"></a>';} 
} 

foreach ($eachfile as $listfile){ 
if ($listextension === 'jpg') { 
echo '<a href="images/'.$row['toolsn'].'/'.$listfile.'" target="_blank"><img src="images/'.$row['toolsn'].'/'.$listfile.'" width="48" height="48"></a>';} 
}