8722 sujets

Développement web côté serveur, CMS

Bonjour,

je viens vous voir car j'ai un problème pour le traitement d'un formulaire.

je m'explique, j'ai un formulaire qui a pour but d'uploader un fichier pdf. donc je prend le nom, le fichier en question, la date, et je dois indiquer à qui le fichier sera associé

<?php
		//test erreurs
		if(isset($_GET['err']))
		{
			if($_GET['err'] == 1)
			{
			?>
            <p class="P_erreurs">Tous les champs n'ont pas été rempli. <a href="javascript:history.back();">Retour</a></p>
            <?php	
			}
			else if($_GET['err'] == 2)
			{
			?>
            <p class="P_erreurs">Le nom de fichier existe déja, veuillez le modifier.</p>
            <?php	
			}
			
		}
		
		else
		{
		?>
        	<h1>Ajoutez un nouveau rapport</h1>
            <form action="trait-admin2.php" method="post" name="Nouveau_rapport" enctype="multipart/form-data">
            	<fieldset><legend>Rapport</legend>
                	<label for="nom" class="float">Nom du rapport :</label> <input type="text" name="nom" id="nom" size="30" /><br/>
                    <label for="lien" class="float">Ajoutez un rapport :</label> <input type="file" name="lien" id="lien" size="30" /><br/>
                    <label for="date" class="float">Date du rapport :</label>
                    <select name="jour" class="dates">
                    	<option value="01">01</option>
                        <option value="02">02</option>
                    </select>
                    <select name="mois" class="dates">
                    	<option value="01">Janvier</option>
                    </select>
                    <select name="annee" class="dates">
                    	<option value="2013">2013</option>
                        <option value="2014">2014</option>
                    </select><br/>
                     <?php
						try
						{
							$bdd = new PDO('mysql:host=localhost;dbname=metrosite', 'root', '');
						}
						catch(Exception $e)
						{
							die('Erreur : '.$e->getMessage());
						}
					?>
                    <label for="client" class="float">Société :</label> <select name="clients" id="client" size="1" /><br/>	
                    	<option selected>Veuillez indiquer un client...</option>
                    <?php
 						$reponse = $bdd->query('SELECT * FROM clients');
						 
						while ($donnees = $reponse->fetch())
						{
					?><option value="<?php echo $donnees['id']; ?>"> <?php echo $donnees['societe']; ?></option>
					<?php
					}
	 				?>
                    </select>
                    <div class="center"><input type="submit" value="Envoyez" /></div>
                </fieldset>
        	</form>
       	<?php
		}
		?>

Pour le traitement, je n'ai pas eu trop de difficulté, mais lors des tests, j'ai un problème, j'ai un fichier A de 6ko et un fichier B de 8mo
lors du traitement du fichier A, je n'ai aucun problème, mais lors du traitement du fichier B, j'ai une erreur qui m'indique que la variable "nom" n'est pas définie, alors que juste avant pour le fichier A le traitement est OK.
De plus, j'ai pensé à la taille du fichier mais ce n'est pas cela car j'ai fais des test pour la taille voici le code pour traiter le fichier.

//////////////////////////////////////////////////////////
				$dossier = '../rapports/';
				$fichier = basename($_FILES['lien']['name']);
				$taille_maxi = 1000000;
				$taille = filesize($_FILES['lien']['tmp_name']);
				$extensions = array('.csv', '.pdf');
				$extension = strrchr($_FILES['lien']['name'], '.'); 
				//Début des vérifications de sécurité...
				if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
				{
     				$erreur = 'Vous devez ajouter un fichier de type pdf. <a href="admin2.php">Retour</a>';
				}
				if($taille>$taille_maxi)
				{
     				$erreur = 'Le fichier est trop gros...<a href="admin2.php">Retour</a>';
				}
				if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
				{
					
					
					//On formate le nom du fichier ici...
					$fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
					$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
					if(move_uploaded_file($_FILES['lien']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
					{?>
                    	<p>vous venez d'ajouter un rapport avec succès !<a href="admin2.php">Ajoutez un nouveau rapport</a></p>


Merci par avance pour votre aide.
Modifié par cid5420 (03 Jan 2014 - 16:59)
Je n'ai pas lu tout le code, juste survolé et encore, mais quand tu as un fichier trop volumineux, as-tu une erreur d'affichée via ton script? Quelles sont les valeurs de upload_max_filesize et de post_max_size dans ton php.ini? Tu peux faire un phpinfo() pour les voir.
dans mon script je regarde si tous les champs sont complété, si oui, il exécute si non il me met "tous les champs ne sont pas remplie". Le problème c'est que lorsque je vais charger le fichier "A", il exécute, et lorsque je vais charger le fichier "B" il passe dans ma condition 'else' qui indique que les champs ne sont pas remplis.

Je viens de regarder le php.ini et le "upload_max_filesize" était à 2mo hors mon fichier est de 8mo.
Chose que j'ai évidement corrigé, mais le problème persiste.

Ça ne fait pas longtemps que je je suis au php, donc pour faire un phpinfo(), je vais devoir fouiller sur le net.
Quel "noob", sur wamp il y a un lien vers le phpinfo et je ne l'avais même pas vue pffff!!!!!

Bon je viens de regarder et j'ai forcé la valeur de "upload_max_filesize" a 80mo mais il retient 20, mais j'ai la valeur "post_max_size" qui est a 8mo, je ne trouve pas cette ligne dans le php.ini
Pour voir ta configuration :
echo phpinfo();


Pour modifier ta configuration sans passer par php.ini ou htaccess

ini_set('upload_max_filesize', 20M);
ini_set('post_max_size', 20M);
ini_set('max_execution_time', 700);
ini_set('memory_limit', 120M); 
Merci pour cette réponse rapide,

Juste une petite précision, est ce que ce bout de code ce met dans une page de mon site?
Si oui à quel moment ?
Oui, il est a mettre dans la page (au début Smiley cligne ). C'est des fonction php donc il faut mettre les balises <?php ... ?>
lorsque je met ces lignes de code, j'ai toujours le même problème.

Donc j'ai cherché un peu, certain font un ".htaccess" avec les valeurs, mais je ne pense pas qu'en local ça fonctionne.
De plus, est ce que je vais avoir des contraintes lorsque je passerais mon site en ligne a cause de ces paramètres?

C'est la première foi que je dois uploader des fichiers pdf, ceux-ci peuvent faire max 20 Mo donc je suis dans la phase de test et je bloc vraiment sur la taille !!
Bonjour,
Quand tu dis:
cid5420 a écrit :
lorsque je met ces lignes de code, j'ai toujours le même problème.

Tu les as insérées dans quelle page de ton site? l'index? Celle avec le formulaire? La page de traitement? Normalement, la solution donnée par benj devrait fonctionner il me semble.
j'ai inséré les ligne dans la page du formulaire, mais à y repenser, je devrai peut être la mêtre dans le traitement !

De plus au début j'ai un session_start()
donc j'ais mis les lignes en dessous.
Ok un grand merci à vous, j'ai effectivement mis les lignes de code dans le traitement, puis j'ai augmenté ma variable qui m'indique la taille max du fichier, et ça fonctionne.

J'ai un autre petit problème sur ce même site, dois-je r'ouvrir un nouveau topic et mettre celui-ci en "résolu" ?