Page 1 sur 2

Mon scipt bug. C'est à cause des arrays (enfin je crois)...

Posté : 19 févr. 2007, 23:37
par colin2mars
Bonsoir,

J'ai fais un script d'upload pour photos avec formulaires.
Et je bloque sur l'affichage des erreurs (si il y en a) ou sinon des messages de confirmation.

De temps en tant le script affiche ce qu'il faut de temps en temps il n'affiche rien du tout :evil: ...
J'ai remarqué que si j'essaye d'uploader un .avi il n'affiche aucun message.

Je résume en gros ce j'ai fait pour le détail il y a le script (je l'ai modifier pour que vous puissiez l'essayer sur votre ordi sans ma BDD):


1) une boucle pour afficher 6 formulaires d'upload, avec comme nom $_FILE[fichier_1] $_FILE[fichier_2] etc

2) une boucle qui vérifie:
- si chaque image uploadée ne pas trop grande (1Mo max)
si ce n'est pas le cas je met $erreur[$i] = 'blablabla'
- si l'extension est bonne
si ce n'est pas le cas je met $erreur[$i] = 'blablabla'
- si l'image n'a pas de $erreur[$i] on lui met $message[$i]

3) Message de confirmation et, ou d'erreur
<h1>Ajout image pour les diaporamas (HTML)</h1>

<?php

/**********************************/
/**    VERIFICATION ET UPLOAD    **/
/**********************************/

	if (isset($_POST['submit']) && !isset($erreur))
	{	
		$ID_titre = $_POST['ID_titre'];
		if (!empty($ID_titre)) // si l'album a bien ete choisi
		{
		  //on commence les verifications mais seulement si le formulaire est rempli
		  	for ($i = 1; $i <=6 ; $i++)
		  	{
		  		$fichier = $_FILES['fichier_'.$i.''];
		  
				if ($fichier['error'] != 4)
				{
					//verif extention images			
					$extensions_valides = array( 'jpg', 'jpeg', 'gif', 'png');
					$extension_upload = substr(strrchr($fichier['name'], '.')  ,1);
					if (!in_array($extension_upload,$extensions_valides))
					{
						$erreur[$i] = 'L\'extension du fichier num&eacute;ro '.$i.' n\'est pas correcte vous pouvez envoyer les fichier suivants: .jpg .jpeg .gif .png';
					}
					
					//verif taille
					$taille_max = 1048576;   //env. 1Mo
					if ($fichier['size'] > $taille_max)
					{
						$erreur[$i] = 'Le fichier num&eacute;ro '.$i.' est trop volumineux';
					}
				  // si il n'y pas d'erreur ici c'est que tout est bon on procède alors au déplacement du fichier
					if (empty($erreur[$i]))
					{
						$message[$i] = 'Le fichier num&eacute;ro '.$i.' est arriv&eacute; &agrave; bon port<br>';
					}
					
				}
			}
		}
		else 
		{
			$erreur[0] = 'Choisissez un titre.';
		}
	}
	
?>

<?php
/*********************************/
/**********FORMULAIRES************/
/*********************************/

    
?>
		<form action="" method="post" enctype="multipart/form-data">
		
			<label>Choisissez le titre de l'album dans le quel vous voulez ajouter des photos
				<select name="ID_titre">
				
					<option value="0">Faites votre choix...</option> 
					<option value="2">2eme Album</option>
					<option value="1">Voici le premier album photos</option>
				  
				</select>
			</label><br>
			
	   <?php // on affiche les 6 formulaires
			for($nbr=1; $nbr <= 6; $nbr++)
			{
				echo '<label>Fichier num&eacute;ro '.$nbr.'<input type="file" name="fichier_'.$nbr.'"/></label><br>';
			}
	   ?>	
	   		<input type="submit" name="submit" value="Envoyer"/>
		</form>
	<?php 
/**********************************/
/**Message erreur et confirmation**/
/**********************************/	
	
		if (!empty($erreur)) 
		{
			echo '<hr>';
			
			for ($i = 0; $i <=6 ; $i++)
			{
				echo $erreur[$i] . '<br />';
			}
		}
		if (!empty($message))
		{
			echo '<hr>';
			foreach($message as $element)
			{
				echo $element . '<br />';
			}
		}
		
	
	?>

<?php
echo '<br><br><br><br><br><br><br><br><br><br>';

?>


Je sais vraiment pas où est l'erreur et je cherche depuis déjà un bon moment.

Merci d'avance à tous ceux qui pourront m'aider à comprendre où est ma faute.

Posté : 24 févr. 2007, 14:17
par colin2mars2
up

je suis sûr que quelqu'un a une solution...

Posté : 24 févr. 2007, 14:49
par Aureusms
Bonjour,

Il y a un truc bizarre tu marques :
$ID_titre = $_POST['ID_titre'];
        if (!empty($ID_titre)) // si l'album a bien ete choisi 
mais dans ton formulaire :

Code : Tout sélectionner

<select name="ID_titre"> <option value="0">Faites votre choix...</option> <option value="2">2eme Album</option> <option value="1">Voici le premier album photos</option> </select>
Aussi $ID_titre ne sera jamais vide...
je pencherai plutôt pour :
if ($ID_titre != '0')) // si l'album a bien ete choisi 
Qu'entends tu par de temps en temps... Il n'y a pas de phénomène aléatoire en informatique.

Posté : 24 févr. 2007, 20:12
par colin2mars
Tout d'abord merci de t'intéresser à mon cas
Il y a un truc bizarre tu marques :
$ID_titre = $_POST['ID_titre'];
        if (!empty($ID_titre)) // si l'album a bien ete choisi 
Justement le !empty($var) renvoi false si la $var vaux zero.

Et le "faites votre choix..." vaux zéro si la personne n'a pas choisis de titre.
Mais dce toute façon ce point fonctionne.
Qu'entends tu par de temps en temps... Il n'y a pas de phénomène aléatoire en informatique.
Il y pas le random? :)
Mais bon ici c'est de tout de facon pas le cas.

Enfait j'ai justement pas réussi à comprendre ce qui fait bugger mon script.
Je peux te dire que si j'essaye d'envoyer un .avi qui fait plus d'un mo le script ne renvoit rien.
Si j'envoie que des fichiers de moins d'un mo et du bon format il fonctionne.
Mais sinon je peux pas te dire ce qui fait bugger le script.
Mais tu peux l'essayer, je l'ai modifié pour qu'il fonctionne sans BDD.

Je comprend vraiment pas d'où vient cette erreur.

Merci d'avance.

Posté : 25 févr. 2007, 12:39
par Aureusms
Ok, j'essaye de résumer si tu envoi un .avi il ne renvoit pas ton numéro d'erreur suivant :
{
$erreur[$i] = 'L\'extension du fichier num&eacute;ro '.$i.' n\'est pas correcte vous pouvez envoyer les fichier suivants: .jpg .jpeg .gif .png';
                    } 

Posté : 25 févr. 2007, 12:50
par colin2mars2
C'est ça. :D

Posté : 25 févr. 2007, 13:09
par Aureusms
Alors ok j'ai vu que tu avais deux clauses if consécutives qui pouvait écraser ton $erreur:
for ($i = 1; $i <=6 ; $i++)
              {
                  $fichier = $_FILES['fichier_'.$i.''];
          
                if ($fichier['error'] != 4)
                {
                    //verif extention images            
                    $extensions_valides = array( 'jpg', 'jpeg', 'gif', 'png');
                    $extension_upload = substr(strrchr($fichier['name'], '.')  ,1);
                    if (!in_array($extension_upload,$extensions_valides)) // première
                    {
                        $erreur[$i] = 'L\'extension du fichier num&eacute;ro '.$i.' n\'est pas correcte vous pouvez envoyer les fichier suivants: .jpg .jpeg .gif .png';
                    }
                    
                    //verif taille
                    $taille_max = 1048576;   //env. 1Mo
                    if ($fichier['size'] > $taille_max) // deuxième
                    {
                        $erreur[$i] = 'Le fichier num&eacute;ro '.$i.' est trop volumineux';
                    }
                  // si il n'y pas d'erreur ici c'est que tout est bon on procède alors au déplacement du fichier
                    if (empty($erreur[$i]))
                    {
                        $message[$i] = 'Le fichier num&eacute;ro '.$i.' est arriv&eacute; &agrave; bon port<br>';
                    }
                    
                }
            }
        }
        else 
        {
            $erreur[0] = 'Choisissez un titre.';
        }
    }
    
?> 
As tu voulu ton script comme ca ?
Car si ton fichier n'a pas la bonne extension ET dépasse 1 Mo tu n'auras que le message sur le dépassement

Posté : 25 févr. 2007, 13:51
par colin2mars2
Car si ton fichier n'a pas la bonne extension ET dépasse 1 Mo tu n'auras que le message sur le dépassement
C'est vrai.

Mais le script ne m'affiche aucune erreur. Il m'affiche juste les six formulaires. :?
A la limite ça fait rien si le script affiche qu'une des erreurs si il y en a plusieurs.

Posté : 25 févr. 2007, 16:57
par Aureusms
As tu testé par défaut ta variable $erreur en fin de script via print_r(). pour voir si elle contenanit quelque chose. Car on a deux choix :
  • soit $erreur est vide et donc le problème vient lors de l'enregistrement
  • soit le problème vient de l'affichage de $erreur
ajoute
echo'<pre>'; print_r ($erreur); echo'</pre>';
juste après les labels pour voir ce que contient la variable. Ensuite teste l'erreur et envoi nous le contenu

Posté : 25 févr. 2007, 21:52
par colin2mars2
je pars demain en vacance pour trois jours.

Je poste tous ça Jeudi.

Posté : 01 mars 2007, 19:49
par colin2mars
Alors quand ça bug le print_r ne renvoi rien.

Il y donc, comme tu l'a dit un problème lors de l'enregistrement

Posté : 01 mars 2007, 20:05
par Aureusms
Essaye avec un fichier > 1Mo mais en jpeg. Ca fait quoi ?

Posté : 01 mars 2007, 20:34
par colin2mars
Le script renvoi bien la bonne $erreur

Posté : 01 mars 2007, 20:51
par colin2mars
J'ai aussi tester la variable $_FILES.
Elle ne renvoi rien si le script bug.
echo'<pre>'; print_r ($_FILES); echo'</pre>'; 
résultat après bug:
Array
(
) 
J'ai aussi testé d'autre vidéo de plus d'un mo.
La plus part renvoie l'erreur:
'L\'extension du fichier num&eacute;ro '.$i.' n\'est pas correcte vous pouvez envoyer les fichier suivants: .jpg .jpeg .gif .png'
Or je crois qu'il devrait renvoyer l'erreur sur la taille du fichier. non?

Par contre je n'ai pas réussis a trouver ce qui fait qu'une vidéo fait bugger et une autre pas.

Posté : 01 mars 2007, 21:05
par colin2mars
J'ai trouvé ce qui fait bugger::D :D

Si la somme des tailles des fichiers que je veux envoyer est plus grosse que celle autorisée dans le php.ini le script bug.

Par contre y'a t'il un moyen de mettre un message d'erreur qui dit à l'utilisateur que si ses fichiers sont trop gros il peut les uploader en plusieurs fois?