le téléchargement de plusieurs fichiers d'image en php mysql galerie
J'ai eu cette galère de travail 65% environ de l'endroit où je veux être. Je me demandais si quelqu'un pouvait regarder le code suivant et me dire comment faire pour télécharger plusieurs images de ma galerie.
Voici le code.
Simple admin code du formulaire:
<form enctype="multipart/form-data" action="uploader.php" method="POST">
Category: <select class="text" name="dataType[]">
<option value="treeremoval" selected="selected">treeremoval</option>
<option value="treetrimming" >treetrimming</option>
<option value="treebracing" >treebracing</option>
<option value="stumpgrinding" >stumpgrinding</option>
<option value="firewood" >firewood</option>
<option value="cleanup" >cleanup</option>
</select>
<br /><br />
Caption: <input type="text" name="title[]">
<br /><br />
Image to upload: <input type="file" name="image[]" />
<br /><br />
Category: <select class="text" name="dataType[]">
<option value="treeremoval" selected="selected">treeremoval</option>
<option value="treetrimming" >treetrimming</option>
<option value="treebracing" >treebracing</option>
<option value="stumpgrinding" >stumpgrinding</option>
<option value="firewood" >firewood</option>
<option value="cleanup" >cleanup</option>
</select>
<br /><br />
Caption: <input type="text" name="title[]">
<br /><br />
Image to upload: <input type="file" name="image[]" />
<br /><br />
<input type="submit" value="Upload">
</form>
uploader.php code:
<?php
include($_SERVER['DOCUMENT_ROOT'] . "/connections/dbconnect.php");
$dataType = mysql_real_escape_string($_POST["dataType"][$i]);
$title = mysql_real_escape_string($_POST["title"][$i]);
$fileData = pathinfo(basename($_FILES["image"]["name"][$i]));
$fileName = uniqid() . '.' . $fileData['extension'][$i];
$target_path = ($_SERVER['DOCUMENT_ROOT'] . "/images/gallery/" . $fileName);
for($i=0;$i<count($_FILES["image"]["name"]);$i++){
$dataType = mysql_real_escape_string($_POST["dataType"][$i]); //get the dataType with the same key - $i
$title = mysql_real_escape_string($_POST["title"][$i]); //get the title with the same key - $i
$fileData = pathinfo(basename($_FILES["image"]["name"][$i]));
while(file_exists($target_path))
{
$fileName = uniqid() . '.' . $fileData['extension'];
$target_path = ($_SERVER['DOCUMENT_ROOT'] . "/images/gallery/" . $fileName);
}
if (move_uploaded_file($_FILES["image"]["tmp_name"][$i], $target_path))
{ //The file is in the images/gallery folder. Insert record into database by
//executing the following query:
$sql="INSERT INTO images (data_type, title, file_name)"."VALUES('$dataType','$title','$fileName')";
$retval = mysql_query($sql);
echo "The image {$_FILES['image']['name'][$i]} was successfully uploaded and added to the gallery<br />
<a href='index.php'>Add another image</a><br />";
}
else
{
echo "There was an error uploading the file {$_FILES['image']['name'][$i]}, please try again!<br />";
}
} //close your foreach
?>
J'ai essayé de dupliquer le code du formulaire 4 fois, mais il serait seulement de téléchargement 1 image à la galerie.
Toute aide serait grandement appréciée.
Merci!
ajouter plusieurs
Vous pouvez le régler de façon relativement simple... je pense que c'est sur le input type="file", où vous avez mis un type de données... ou quelque chose? Ensuite, votre $_FILES sera un tableau de plusieurs fichiers. Nous l'avons fait à l'école, une entrée unique pour plusieurs fichiers, mais nous avons utilisé un enseignant modèle, de sorte que j'ai oublié. Si vous ne trouvez pas de m'en informer et je vous la recherche par le biais de mes fichiers.
pourriez-vous expliquer un peu plus en détail. Désolé un peu nouveau à ce type de codage.
J'aime le son de votre solution, si vous pouvez trouver ce fichier, j'apprécierais. vous pouvez m'envoyer un email à [email protected]
<input type="file">
chacune avec un nom uniqueVous pouvez le régler de façon relativement simple... je pense que c'est sur le input type="file", où vous avez mis un type de données... ou quelque chose? Ensuite, votre $_FILES sera un tableau de plusieurs fichiers. Nous l'avons fait à l'école, une entrée unique pour plusieurs fichiers, mais nous avons utilisé un enseignant modèle, de sorte que j'ai oublié. Si vous ne trouvez pas de m'en informer et je vous la recherche par le biais de mes fichiers.
pourriez-vous expliquer un peu plus en détail. Désolé un peu nouveau à ce type de codage.
J'aime le son de votre solution, si vous pouvez trouver ce fichier, j'apprécierais. vous pouvez m'envoyer un email à [email protected]
OriginalL'auteur cwd | 2013-07-11
Vous devez vous connecter pour publier un commentaire.
Dans votre formulaire, ajouter des fichiers multiples entrées. Une façon est d'utiliser un nom de tableau -
image[]
Puis dans votre
uploader.php
, enveloppez votre téléchargement de fichier de code avec une boucle forle manuel a une grande section sur les pièges courants lors du téléchargement de fichiers, surtout à plusieurs. http://www.php.net/manual/en/features.file-upload.common-pitfalls.php
Si vous voulez faire plusieurs des autres, il peut être fait de la même façon (j'ai abrégé le sélectionne pour réduire le copier/coller) -
et votre php, mettre la boucle autour de tous les éléments
modifier
vous y êtes presque. Supprimer le code en double au-dessus de la boucle for. Supprimer
basename()
, comme cela est la cause de votreextension
à l'échec, etpathinfo()
sera de retour le['basename']
.J'ai utilisé votre code. Je n'ai pas envie de copier/coller tout ça, donc j'utilise une abréviation
...
à montrer ce que vous ne devez pas modifier. Vous garder au code, mais juste ajouter/modifier les lignes que je t'ai montré.bon, je vais l'essayer de nouveau. Je vous remercie.
vous pouvez aussi lire à ce sujet dans le manuel php - php.net/manual/en/features.file-upload.multiple.php
Tout en relisant ma réponse, je me rends compte que j'étais un peu à côté. Au lieu de
foreach($_FILES['image'] as $files)
vous avez besoin de faire une boucle for -for($i=0;$i<count($_FILES["image"]["name"]);$i++)
. C'est parce qu'il est affiché comme$_FILES["image"]["name"][$i]
pas$_FILES["image"][$i]["name"]
. J'ai mis à jour ma réponse pour refléter cela.OriginalL'auteur Sean
Apparemment, une fonctionnalité HTML5 c'est malheureusement pas pris en charge dans Internet Explorer avant la version 10(!) vous permet de le faire:
Ceci est également valable:
(La fin slash est facultative, mais j'ai comme l'auto-balises de fermeture d'avoir un slash, donc j'ai décidé de mettre des barres obliques.)
Cependant, il existe de JavaScript, etc. des outils qui, apparemment, d'élargir la compatibilité. Comme cette Jquery chose.
blueimp.github.io/jQuery-File-Upload
(Source: Comment sélectionner plusieurs fichiers avec des <input type="file">?)
(J'étais sûr qu'il y a plus simple, c'est à dire compatible avec la méthode, mais peut-être que je l'avais imaginé. De toute façon, j'ai apparemment quitté le téléchargement de la documentation de mon professeur à l'école avant de quitter pour les vacances, donc je ne peux pas le savoir.)
Donc... ouais. Vous avez cette
multiple="multiple"
d'entrée qui fait le travail. Mais ce n'est certainement pas compatible suffisant pour vos besoins. Parce que, vous savez, pas beaucoup de gens ont IE 10, et il y a une limite à l'amerrissage forcé IE. A partir de là, vous avez un peu de choix.Vérifier la compatibilité multi-fichier intrants à l'aide d'un outil tel que Modernizr, et si le navigateur n'est pas compatible, alors au lieu de, vous serez en mesure d'afficher plusieurs fichier unique des entrées. Ou peut-être juste un, et ensuite, vous devez ajouter un autre à l'aide de Javascript lorsque la précédente est utilisée.
Pencher sur ce plugin jQuery ou autres outils similaires à "forcer" les navigateurs compatibles avec votre multi-fichier d'entrée.
Exemple d'utilisation d'un multi-fichier d'entrée:
HTML:
Puis en PHP, tous vos fichiers seront stockés où vous trouvez habituellement votre fichier unique, sauf que ça va être un tableau, maintenant, et vous aurez accès à elle par l'ajout d'une couche supplémentaire de crochets. Par exemple,
$_FILES['uploads']['name'][0]
est votre premier fichier.Le code suivant va vous permettre d'effectuer une itération sur chaque fichier. Bien sûr, ce code ne s'affiche à chaque nom de fichier, mais vous pouvez modifier le contenu de la boucle.
Et à l'intérieur de cette boucle, vous aurez pour télécharger chaque fichier comme vous le feriez normalement pour un seul fichier.
(Source: http://css-tricks.com/snippets/html/multiple-file-input/)
Pas sûr qu'on puisse écrire "vrai" comme valeur pour le
multiple
attribut. Juste<input type="file" name="upload[]" multiple>
œuvres. Aussi, assurez-vous que votre formulaire aenctype="multipart/form-data"
.OriginalL'auteur Ariane
Le plus simple est d'ajouter plusieurs
file
entrées (dans un formulaire) avec le même nom, en ajoutant entre crochets:Vous pouvez ensuite accéder aux fichiers en ajoutant un numéro incrémental:
Si vous mettez le tout après que la procédure de chargement dans une boucle d'itération sur les fichiers.
Veuillez noter que dans le cas où vous n'avez pas toujours soumettre une image avec chaque fichier d'entrée, certaines variables (=entrées) restera vide et que vous devez changer votre gestion des erreurs à ne pas montrer une erreur alors.
Je ferais comme ceci:
OriginalL'auteur user1666456
Je ne sais pas si je peux poster des liens, mais j'ai trouvé cela à la recherche d'un système de téléchargement de plusieurs fichiers, et que vous voulez partager avec tous les autres qui sont à la recherche de cette trop.
MySQL
PHP
Que c'est! L'espoir d'aider quelqu'un ^^
Explications complètes et tous les crédits à:
http://techstream.org/Web-Development/PHP/Multiple-File-Upload-with-PHP-and-MySQL
OriginalL'auteur Felipe Lima