Page 1 sur 1

petit soucis de tableau

Posté : 13 nov. 2007, 22:52
par choubix
hello,

j'ai un script qui me permet d'uploader entre 1 et x fichiers.
je genere des noms aleatoires pour ces fichiers.

le hic est que tous ces noms sont stockes dans une variable $uploadname
chaque nom de fichier fait exactement 45 caracteres a chaque fois

disons que j'upload 6 images:
si je fais un print ou echo de $uploadname: les 6 noms de 45 caracteres vont tous etre colles.

l'etape suivante pour moi est de stocker le chemin et le nom de ces fichiers das une table.

j'ai alors utilise la fonction str_split() mais ca me retourne entre 1 et 6 tableaux dont la clef est toujours [0]. ce qui ne va pas etre tres pratique pour inserer dans ma base de donnees...

ce que je voudrais faire: tant que $uploadname n'est pas "vide", recuperer $uplaodname[0], $uploadname[1] ... et les stocker dans ma base de donnees.

aussi: est ce que vous auriez une idee svp?

merci! :)

Posté : 13 nov. 2007, 23:09
par Kaoteknik
Peut-être qu'en utilisant une boucle tu parviendrais à obtenir ce que tu veux :
$nombre_de_fichiers = x;
$uploadname = array();

for ($i = 1 ; $i <= $nombre_de_fichiers ; $i++) {
$uploadname[$i] = "nom_du_fichier";
}

Posté : 13 nov. 2007, 23:20
par choubix
salut kaoteknik et merci deta reponse

dans mon cas $uploadname retourne ca:
20071113_iuybgvjocmgqumb2le12ysysn0n1yer4.jpg20071113_4omp40obiroiky2xc2j1g2jbqfo5pa1m.jpg20071113_pkgro1tf4itz0dcfzdkagly4brhaobk3.jpg
20071113_1t2prcclgne6ez6j522wvkkclzxwghs6.jpg20071113_mxfs00t2mm0mchadgwntou2gdoxcnjxz.jpg
20071113_omkknxpgtl3v6hm5osudwxtmv2tr3bpk.jpg
alors que je souhaiterais avoir:

$uploadname[0] = 20071113_iuybgvjocmgqumb2le12ysysn0n1yer4.jpg
$uploadname[1] = 20071113_4omp40obiroiky2xc2j1g2jbqfo5pa1m.jpg;
.
.
.
$uploadname[5] = ....


avec la boucle que tu proposes ca ne passe pas :(
j'avais fait un test avec une boucle for auparavant mais je n'arrive pas a stocker ce que je souhaite.

un peu de sommeil me ferait peut etre du bien pour trouver la solution ;)

Posté : 13 nov. 2007, 23:24
par Kaoteknik
Pourrais-tu poster le script qui permet d'enregistrer le nom des fichiers dans la variables $uploadname ? Je crois que ça m'aiderait à y voir plus clair ! :)

Sinon une solution serait peut-être d'utiliser les expressions régulières pour séparer le nom des fichiers...

edit : ou la fonction "explode", maintenant que j'y pense ! ^^

Posté : 13 nov. 2007, 23:31
par choubix
hello:

voila le script:

au final je stocke entre 1 et 6 iamges en remplacant le nom original par un nom genere aleatoirement. dans la suite du script je voudrais inserer des infos qui viennent du formulaire ET le chemin et le nom de ces images.

<?php

session_start();

if (isset($_SESSION['level']) && $_SESSION['level'] == 2){}
else
{
$_SESSION['error'] = "3";
header('Location: ../../error.php');
}

require("../../includes/config.php");
require('../../includes/functions.tpl.php');

while(list($key,$value) = each($_FILES['image']['name']))
{
	if(!empty($value))
	{
	//$filename = $value;
	//echo $_FILES['image']['name'][$key];    
	//print "<br>$filename<br>";
	
	$uploaddir = "../../gifts"; 

	$allowed_ext = array( 'jpg', 'gif', 'jpeg', 'png' );  
		
	$max_size = "50000"; 
	$max_height = "300"; 
	$max_width = "300"; 
	
	$upload = ''; 

	//get the file's extension
	$ext = pathinfo($_FILES['image']['name'][$key]);
	$extension = $ext['extension'];

	//compare uploaded file with authorized extensions
		if (in_array($extension,$allowed_ext)) 
		{
		//check the file's size in kb
		if($_FILES[image][size][$key] > $max_size)
		{
		print "File '$key' size is too big!";
		$upload = false;
		}
		//check the file's	dimension WxH
					if ($max_width && $max_height) 
					{
					list($width, $height, $type, $w) = getimagesize($_FILES['image']['tmp_name'][$key]);
						if($width > $max_width || $height > $max_height)
						{
						print "<br>File '$key' height and/or width are too big!";
						$upload = false;	
						}
						//upload the file!			
						else
						{
							//echo $_FILES['image']['tmp_name'][$key];
							if(empty($upload) && is_uploaded_file($_FILES['image']['tmp_name'][$key]))
							{
							//create a random name for the uploaded file
							$date = date ("Ymd");
							$name = random_string();
							$uploadname = $date.'_'.$name.'.'.$extension;
							
							//print "$uploadname.<br>";
							//ini_set('display_errors', 1);
							//error_reporting(E_ALL);
						
							move_uploaded_file($_FILES['image']['tmp_name'][$key],$uploaddir.'/'.$uploadname);
							//$name = str_split($uploadname,45);
							//print_r($name);
											
							}
						}
									
					}
		}
		else 
			{
			print "Incorrect file extension!";
			}	
	
	}
}


?>

merci du coup de main :)

Posté : 13 nov. 2007, 23:57
par Kaoteknik
Apparemment tu utilises déjà une boucle while pour enregistrer le nom de tes fichiers dans la variable $uploadname. Cependant je dirais qu'à première vu il lui manque un compteur permettant de les distinguer. La boucle a donc besoin d'une variable ($i si on se tient aux conventions).
$i = 1;
$uploadname = array();

while (list($key,$value) = each($_FILES['image']['name'])) {
...
else
                        {
                            //echo $_FILES['image']['tmp_name'][$key];
                            if(empty($upload) && is_uploaded_file($_FILES['image']['tmp_name'][$key]))
                            {
                            //create a random name for the uploaded file
                            $date = date ("Ymd");
                            $name = random_string();
                            $uploadname[$i] = $date.'_'.$name.'.'.$extension;
                            
                            //print "$uploadname.<br>";
                            //ini_set('display_errors', 1);
                            //error_reporting(E_ALL);
                        
                            move_uploaded_file($_FILES['image']['tmp_name'][$key],$uploaddir.'/'.$uploadname);
                            //$name = str_split($uploadname,45);
                            //print_r($name);
                                            
                            }
                        }

...
$i++
}
Je n'ai évidemment pas testé, mais je ne vois pas de raison pour que cela ne fonctionne pas !

Posté : 14 nov. 2007, 00:03
par choubix
j'avais tente ca mais ca me retourne une belle page blanche :(

je pense qu'il me faut qq chose au moment ou j'ai besoin de splitter la variable sinon ca me fiche le desordre dans tout le reste du script.

Posté : 14 nov. 2007, 00:25
par Kaoteknik
La fonction str_split semble pourtant adaptée à ton besoin. Peut-être faut-il lui indiquer le nombre de caractères que tu souhaites intégrer dans chaque élément du tableau. Si la chaîne splittée doit comporter 45 caractères, alors
$tableau = str_split($uploadname, 45);
devrait fonctionner... :?

Posté : 14 nov. 2007, 00:39
par choubix
en fait je devais pas avoir les yeux en face des trous au post precedent:

j'arrive a retourner

0 = fichier1.jpg
1 = fichier2.jpg
.
.
.
5 = fichier6.jpg

mais ca va pas etre tres pratique pour inserer dans la table.

sinon str_split je l'utilisais bien avec "45" mais ca me retourne 6 tableaux (dans le cas ou je mets 6 images dans le formulaire) tous avec la clef 0 (au lieu de clefs 0, 1, 2... 5)

Posté : 14 nov. 2007, 09:27
par choubix
hello,

bon moi je pietine :(
qq un aurait une idee svp?

je souhaiterais casser $uplaodname en une chaine de 45 caracteres a chaque fois et que je puisse appeller chaque chaine de la facon suivante: $uploadname[1], $uploadname[2]...

ca me permettrait de pouvoir stocker les noms des images dans une table via INSERT.

avec ce code dans une boucle while:
$date = date ("Ymd");
$name = random_string();
$uploadname = $date.'_'.$name.'.'.$extension;
							
print "$i = $uploadname<br>";
							
$i++;	
j'obtiens:

Code : Tout sélectionner

0 = 20071114_fz4g1mfasinkgtxreu6pin6utmtbnids.jpg 1 = 20071114_4psc5cefshu5y1zbhltw4jpq0ppximld.jpg 2 = 20071114_djzfqa6zi2sxf645zmvxnbblnrw6xh1y.jpg 3 = 20071114_0nh32tfhtg6e5u5skwmbj5fppamshnc5.jpg 4 = 20071114_oabyofizesd2j4j0i3u5vc0oiw3cg4nu.jpg 5 = 20071114_ihwo2lkdqhajvmsuywfmwjyaippjffjn.jpg
comment faire en sorte que tout ca soit dans un tableau ou la clef serait 0, 1, 2... et la valeur : le nom du fichier?

sachant que str_split me retourne bien des tableaux mais la clef est toujours = 0


merci :)

Posté : 14 nov. 2007, 11:25
par Ryle
Oups, répondu dans l'autre topic..

:arrow: http://www.phpfrance.com/forums/voir_re ... php#221073

Posté : 14 nov. 2007, 12:41
par Truc
Oups, répondu dans l'autre topic..
La question est... comment se fait-il qu'il y ait un autre topic |(X

Posté : 14 nov. 2007, 18:35
par choubix
salut Truc,

il y avait un autre topic car les questions s'enchainaient.
je voulais eviter a ceux qui seraient susceptibles de me filer un coup de pouce d'avoir a relire 20 posts d'affile. en d'atures termes: par soucis de lisibilite pour les forumeurs :)