upload dans une boucle - PHP - Programmation
Marsh Posté le 13-07-2011 à 10:03:02
Normal, ton formulaire semble ne contenir qu'un champ input pour l'upload. Cela dit, le bout de code que tu postes me semble incomplet pour résoudre ton pb...
Marsh Posté le 13-07-2011 à 10:19:18
Oui, Pour le formuliare celui que tu cherche est dans la fonction HalloViewModif::upload(), si tu veut je peut te le mettre. Et je sais aussi que le code est loin d'être complet, en faite je sais pas comment m'y prendre pour faire ce que je veut...
Marsh Posté le 13-07-2011 à 11:01:52
Ben faut 1 seul formulaire pour tout le tableau qui contient autant de input type file pour l'upload, avec un name et un id du style "uploadID" ou ID représente l'ID de l'enregistrement, ce qui te permettra durant le traitement d'associer le fichier uploadé à l'ID de l'enregistrement en parsant le name de l'input en court de traitement (dans ta boucle, faudra récupérer l'ensemble des names d'input qui commencent par "upload".
Bien entendu, tous les inputs vides seront laissés de côté.
Marsh Posté le 13-07-2011 à 11:45:44
function Upload($id2)
{
//$txt.=$id2;
$txt.="ca marche pas";
$txt.= '<form method="POST" action="" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko -->
<INPUT type="hidden" name="MAX_FILE_SIZE" value="100000">
<INPUT type="file" name="fichePDF"><br>
<INPUT type="submit" name="upload" value="Envoyer les fichiers">
</form>';
$txt.=$id2;
$blnFlagImage = FALSE;
$repertoire = "../www/fichePDF/";
if (is_uploaded_file($_FILES['fichePDF']['tmp_name']))
{
$fichier_temp = $_FILES['fichePDF']['tmp_name'];
/*$nom_fichier = strtr($nom_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$nom_fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $nom_fichier);*/
//$nom_rep = date("Y" ) . date("m" ) . date("d" ) . date("G" ) . date("i" ) . date("s" );
$nom_fichier = $_FILES['fichePDF']['name'];
$txt.=$id2;
//création d'un répertoire.
//mkdir ( $repertoire, 0777);
}
/*$txt.= "<h3>Le nom d'origine du fichier est '"
. $nom_fichier . "'.</h3>";
$txt.= "<h3>Le type du fichier est '"
. $_FILES['fichePDF']['type'] . "'.</h3>";
$txt.= "<h3>La taille du fichier est de '"
. $_FILES['fichePDF']['size'] . " octets'.</h3>";
*/
$txt.= $repertoire.$id2 ."<br>" ;
$txt.= $fichier_temp ."<br>" ;
if( move_uploaded_file($fichier_temp, $repertoire.$id2.".pdf" ) )
{
$txt.= "Le fichier a bien été uploadé";
}
else
$txt.="Impossible de copier le fichier dans $repertoire";
return $txt;
}
Ceci est le code de ma fonction upload appeler dans AffichPDF
Cette fonction marche correctement, mais c'est son utilisation dans AffichPDF que je n'arrive pas à réaliser correctement...
Je comprend ce que tu veut me dire, et c'est ce que j ai essayé de faire, mais je suis débutant en php mysql et même si je sais ce que je dois faire, je sais pas comment m'y prendre, j'ai essayé plusieurs façons différentes, mais maintenant mon code ne ressemble plus à rien
Auras tu un exemple ou quelque chose qui me mettrait plus sur la bonne voie?
Merci d'avance pour tes reponses.
Marsh Posté le 14-07-2011 à 12:12:23
Bah déjà, c'est pas logique d'avoir dans la même fonction, l'affichage du formulaire et le traitement de celui-ci puisque ce sont 2 actions (affichage et traitement de l'upload) qui se font à des moment différents...
Par ailleurs, ton form n'a pas d'url dans l'attribut action, c'est pas normal.
Enfin, je te disais que si tu veux faire de l'upload de plusieurs ficheirs à la fois, faut un seul form dans ta page html (donc 1 seul bouton submit) qui va contenir plusieurs input de type file dans le name sera un truc du genre "uploadID" où ID représente l'ID de l'enregistrement dans le tableau auquel le fichier devra être associé en base.
A mon avis, avant de faire du php, tu devrais mieux te former au html car je pense qu'il te manque des bases...
Marsh Posté le 29-07-2011 à 15:18:38
Bonjour,
j'ai été lancer sur un autre projet, donc désolé de repondre que maintenant...
J'ai remodifier mon code en suivant tezs instruction
un seul formulaire
un adresse url
j'utilise un id pour mon enregistrement
maintenant tout ce passe bien, à l'affichage, j'ai ce que je veut... la seul chose qui marche c'est le téléchargement dans le fichier destinataire
Voici mon code :
function AffichPDF ()
{
$txt="";
$sql = "SELECT * FROM `P_Produit` WHERE Fich_PDF IS NULL"; //requête SQL
$resultat = mysql_query($sql) or die('<br>Erreur SQL !<br>' . $sql . '<br>' . mysql_error()); //on traite les résultat de la requête
$var = "option=".$_REQUEST['option']."&view=".$_REQUEST['view']."&Itemid=".$_REQUEST['Itemid'];
//déclaration du formulaire
$txt.='<form method="POST" action="?'.$var.'" name="listeProduit" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko -->
<INPUT type="hidden" name="MAX_FILE_SIZE" value="100000">';
//déclaration du tableau qui récup les résultats par la boucle while
$txt.='<table border="1" cellspacing="2" cellpadding="2" style="border-collapse: collapse">';
$txt.= '<th>Id_Produit</th>
<th>Reference</th>
<th>Nom_Synonyme</th>
<th>Numero CAS</th>
<th>Fich_PDF</th>';
while($ligne = mysql_fetch_array($resultat))
{
$txt.= '<tr><td>'
.($id2=$ligne['Id_Produit']).'</td><td>'
.$ligne['Ref_Fournisseur'].'</td><td>'
.$ligne['Nom_Produit_Synonyme '].'</td><td>'
.$ligne['NumCAS'].'</td><td>';
$txt.='<INPUT type="file" name="fichePDF"><br>';
$repertoire = "../www/fichePDF/";
if (is_uploaded_file($_FILES['fichePDF']['tmp_name']))
{
$fichier_temp = $_FILES['fichePDF']['tmp_name'];
$nom_fichier = $_FILES['fichePDF']['name'];
$txt.=$fichier_temp;
$txt.=$id2;
}
$txt.= $repertoire.$id2 ."<br>" ;
$txt.= $fichier_temp ."<br>" ;
if( move_uploaded_file($fichier_temp, $repertoire.$id2.".pdf" ) )
{
$txt.= "Le fichier a bien été uploadé";
}
else
$txt.="Impossible de copier le fichier dans $repertoire$id2";
$txt.='</td></tr>';
}
$txt.='</table>';
//bouton d'envoi des valeurs et fermeture du formulaire
$txt.='<INPUT type="submit" name="upload" value="Envoyer les fichiers">';
$txt.='</form>';
return $txt;
Marsh Posté le 29-07-2011 à 15:32:43
et la question est?
Marsh Posté le 13-07-2011 à 09:27:15
Bonjour,
Voivi mon code.
function AffichPDF ()
{
$txt="";
$txt.="ca marche";
$sql = "SELECT * FROM 'P_Produit' WHERE Fich_PDF IS NULL";
$resultat = mysql_query($sql) or die('<br>Erreur SQL !<br>' . $sql . '<br>' . mysql_error());
$txt.='<table border="1" cellspacing="2" cellpadding="2" style="border-collapse: collapse">';
$i=0;
$txt.= '<th>Id_Produit</th>
<th>Reference</th>
<th>Nom_Synonyme</th>
<th>Numero CAS</th>
<th>Fich_PDF</th>';
while($ligne = mysql_fetch_array($resultat))
{
$txt.= '<tr><td>'
.($id2[$i]=$ligne['Id_Produit']).'</td><td>'
.$ligne['Ref_Fournisseur'].'</td><td>'
.$ligne['Nom_Produit_Synonyme '].'</td><td>'
.$ligne['NumCAS'].'</td><td>'
.HalloViewModif::upload($id2[$i]).'</td></tr>';
$i++;
}
$txt.='</table>';
//$id2 = $ligne['Id_Produit'];
$txt.=$id2[$i];
$txt.='<form method="POST" action="" name="listeProduit">';
$txt.='<INPUT type="submit" name="terminer" value="terminer">';
$txt.='</form>';
return $txt;
}
Ce programme affiche par requête tout les produits de ma BDD qui n'ont pas de fiche PDF, cette affichage ce fait dans un tableau avec en dernière case la possibilité d'uploader une fiche pdf rennommé avec l'Id correspondant au produit de la ligne.
Mon problème, l'upload ce fait correctement seulement sur la premiere ligne de mon tableau et ce même si je choisi d'uploader sur les autres lignes.
Même si certains paramêtres de HalloViewModif::upload() doivent etre changer je suis sure du fonctionnement de cette fonction.
Je pense que le programme est à repenser différement...
Si vous avez une idée, merci d'avance.