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

Petit nouveau ! | 7 Messages

19 févr. 2007, 23:37

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.

colin2mars2
Invité n'ayant pas de compte PHPfrance

24 févr. 2007, 14:17

up

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

ViPHP
ViPHP | 1996 Messages

24 févr. 2007, 14:49

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.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Petit nouveau ! | 7 Messages

24 févr. 2007, 20:12

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.

ViPHP
ViPHP | 1996 Messages

25 févr. 2007, 12:39

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';
                    } 
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

colin2mars2
Invité n'ayant pas de compte PHPfrance

25 févr. 2007, 12:50

C'est ça. :D

ViPHP
ViPHP | 1996 Messages

25 févr. 2007, 13:09

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
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

colin2mars2
Invité n'ayant pas de compte PHPfrance

25 févr. 2007, 13:51

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.

ViPHP
ViPHP | 1996 Messages

25 févr. 2007, 16:57

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
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

colin2mars2
Invité n'ayant pas de compte PHPfrance

25 févr. 2007, 21:52

je pars demain en vacance pour trois jours.

Je poste tous ça Jeudi.

Petit nouveau ! | 7 Messages

01 mars 2007, 19:49

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

ViPHP
ViPHP | 1996 Messages

01 mars 2007, 20:05

Essaye avec un fichier > 1Mo mais en jpeg. Ca fait quoi ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Petit nouveau ! | 7 Messages

01 mars 2007, 20:34

Le script renvoi bien la bonne $erreur

Petit nouveau ! | 7 Messages

01 mars 2007, 20:51

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.

Petit nouveau ! | 7 Messages

01 mars 2007, 21:05

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?