Uploder des photos

audi68 Messages postés 626 Statut Membre -  
audi68 Messages postés 626 Statut Membre -
Bonjour,
J aimerais rajouter des photos sur mon serveur grace a la partie admin

J arrive a les charger et les renomer

Puis je veux less inserer dans la base mysql et ca va aussi
Le probleme est qu il me met a chaque fois le nom de la photo suivante dans la ligne suivante

Moi j aimerais arriver a un tableau du genre id photo1 url1 photo2 url2 et ainsi de suite

Est ce que cela est possible?

Voici mon code

<?php
session_start();
if (!isset($_SESSION['email'])) {
header ('Location: index.php');
exit();
}

// On récupère le contenu de $_GET dans l'adresse, soit ce qu'il y a après page.php?id=
$idd=$_GET['id'];

function rewrite($c)
{
$c = strtr($c,

'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',

'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$c = preg_replace('`([^[:alnum:]]+)`', '_', $c);

return strtolower($c);
}
if( !empty($_FILES['photo']) )
{
$extensionValide = array( 'jpg' , 'jpeg' , 'gif' , 'png' , 'bmp' );
$maxSize = 2097152;
$dirUpload = 'upload/';
$nbImg = count($_FILES['photo']['name']);

$arrImg = array(); // Sert à stocker les infos que l'on veut garder des images et les messages

// Vérification des images et upload si ok
for( $i=0; $i<$nbImg; $i++ )
{
if( !empty($_FILES['photo']['name'][$i]) ) // && is_uploaded_file($_FILES['photo']['name'][$i]) )
{
// Traitement des erreurs
if( !$_FILES['photo']['error'][$i] )
$arrImg[$i]['upload'] = true;
else
{
$arrImg[$i]['upload'] = false;
if( $_FILES['photo']['error'][$i] == 1 )
$arrImg[$i]['message'] = 'L\'image ' . $_FILES['photo']['name'][$i] . ' excède la taille maximale autorisée qui est de ' . floor(2097152/1024) . ' ko';
else
$arrImg[$i]['message'] = 'L\'image ' . $_FILES['photo']['name'][$i] . ' n\'a pu être transférée sur le serveur';
}

// Vérification des extensions
if( $arrImg[$i]['upload'] && !array($ext = strtolower(pathinfo($_FILES['photo']['name'][$i], PATHINFO_EXTENSION)), $extensionValide) )
{
$arrImg[$i]['upload'] = false;
$arrImg[$i]['message'] = 'L\'extension de l\'image ' . $_FILES['photo']['name'][$i] . ' n\'est pas de type autorisé';
}
elseif( $arrImg[$i]['upload'] )
{
$arrImg[$i]['ext'] = $ext;
$arrImg[$i]['nom'] = rewrite(substr($_FILES['photo']['name'][$i], 0, -(strlen($ext)+1)));
}

// Vérification du mime
if( $arrImg[$i]['upload'] && !($mime = @getimagesize($_FILES['photo']['tmp_name'][$i])) )
{
$arrImg[$i]['upload'] = false;
$arrImg[$i]['message'] = 'Le fichier ' . $_FILES['photo']['name'][$i] . ' n\'est pas une image';
}

// Vérification de la taille
if( $arrImg[$i]['upload'] && filesize($_FILES['photo']['tmp_name'][$i]) > $maxSize )
{
$arrImg[$i]['upload'] = false;
$arrImg[$i]['message'] = 'L\'image ' . $_FILES['photo']['name'][$i] . ' dépasse ' . floor(2097152/1024) . 'ko';
}

//
// Creation d'un identifiant

//
$num =$dirUpload . uniqid(rand()) . $arrImg[$i]['nom'] . '.' . $arrImg[$i]['ext'];
// Upload si tout est ok
if( $arrImg[$i]['upload'] )
{
$upload = move_uploaded_file($_FILES['photo']['tmp_name'][$i], $num );

//
mysql_connect ( );
mysql_select_db (' ');

mysql_query('INSERT INTO photos2 (idd, photo, url) VALUES ( "'.$idd.'", "'.$_FILES['photo']['name'][$i].'", "'.$num.'" )');

//
//
$file = ''.$num.''; # L'emplacement de l'image à redimensionner. L'image peut être de type jpeg, gif ou png

$x = 125;

$y = 75; # Taille en pixel de l'image redimensionnée

$size = getimagesize($file);

if ( $size) {
echo 'Image en cours de redimensionnement...
';

if ($size['mime']=='image/jpeg' ) {
$img_big = imagecreatefromjpeg($file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);

imagejpeg($img_mini,$file );

}
elseif ($size['mime']=='image/png' ) {
$img_big = imagecreatefrompng($file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);

imagepng($img_mini,$file );

}
elseif ($size['mime']=='image/gif' ) {
$img_big = imagecreatefromgif($file); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]);

imagegif($img_mini,$file );

}
echo 'Image redimensionnée !
'; ///
}

if( $upload )
$arrImg[$i]['message'] = 'L\'image ' . $_FILES['photo']['name'][$i] . ' a été transférée avec succès';
else
$arrImg[$i]['message'] = 'Un problème est survenu dans la tentative de transfert de l\'image ' . $_FILES['photo']['name'][$i];
}

}
}

// Résultat de l'upload
echo "<h2>Résultat du transfert</h2>\n";
echo "<ul>\n";
if( !empty($arrImg) )
{
foreach( $arrImg as $k => $arr )
echo '<li>' . htmlspecialchars($arrImg[$k]['message']) . "</li>\n";

}
else
echo "<li>Aucune image n'a été envoyée</li>";
echo "</ul>\n";
}
else
{
?>
<form name="form1" enctype="multipart/form-data" method="post" action="">
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
<label>
<input name="photo[]" type="file" id="photo1">
</label>
<p>
<label>
<input name="photo[]" type="file" id="photo2">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo3">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo4">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo5">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo6">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo7">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo8">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo9">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo10">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo11">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo12">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo13">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo14">
</label>
</p>
<p>
<label>
<input name="photo[]" type="file" id="photo15">
</label>
</p> <p>
<label>
<input name="photo[]" type="file" id="photo16">
</label>
</p>
<p>
<label>
<input type="submit" name="Submit" value="Envoyer">
</label>
</p>
</form>
<?php
}
?>
</body>
</html>

merci de votre aide
A voir également:

27 réponses

audi68 Messages postés 626 Statut Membre 9
 
personne a une idee?
0
caccia Messages postés 96 Statut Membre 16
 
Salut!

je pense que plein de monde aura une idée, mais serait-il possible que tu cibles un peu plus le code que tu nous donnes?

Je t'avoue que la page entière de code, c'est un peu lourd à lire...

Essaye de voirà peu près où se situe ton problème et j'essaierai de voir ce qu'il se passe.

A+
0
audi68 Messages postés 626 Statut Membre 9
 
Merci de ta reponse

Au faites le probleme est lors de linsertion dans ma base

Tous fonctionne a par que a chaque fois il me met l image suivant a la ligne
ex :
Ma base
id/nom image/ url

et moi je voudrais sous la forme suivante
id /nom1 / url2/nom2/url2 .... et ainsi de suite

Je sais pas si cela est possible

mon site consiste a vendre des voitures

Donc les photos seront a utiliser lors de l affiche de la voiture en question

Sinon y a t il une autre solution pour faire cela?

Merci de votre aide
0
caccia Messages postés 96 Statut Membre 16
 
Si j'ai bien compris ton problème c'est que tu voudrais que les url et noms de tes images soient dans la même colonne de ta table Mysql?

Je te conseille donc de prendre le problème dans l'autre sens et de créer une table 'images' qui référencera le nom des photos que tu ajoutes et l'id correspondant à la voiture à laquelle les images se rapportent.

ex: table voiture: id_voiture, nom_voiture, cylindree_voiture...
table image: id_image, nom_image, id_ref_voiture

avec id_voiture et id_ref_voiture qui sont égales.

Cela demande à ce que tu insères les données correspondant à la voiture, que tu récupères l'id de la nouvelle entrée et que tu insères le nom de l'image et l'id récupérée dans la table image.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
audi68 Messages postés 626 Statut Membre 9
 
Merci de ta reponse

Oui j'aimerais uploader une dizaine de photos qui sont pas dans la meme colonne mais dans la meme le ligne

Ou si ca fonctionne comme tu dis ca va aussi

Car mon probleme c est lors de la recupération dess images que ca beug
J ai le meme id pour la oiture et la photo

Cela correspond a quoi id_ref_voiture ?

c es pas facile a expliquer

je te montre un exemple

Actuellment j ai une base voiture
ou il y a id, marque ........

et une autre table photos
qui a le meme id que voiture
mais la j ai chaque fois ex:
id1 photo1
id1 photos2
id1 photos3
id2 206
id2 2061
.....

Mais le probleme c es de recupere ces photos pas facile

Si tu peux me montrer un exemple ce serai plus simple

Merci encore de ton aide
0
caccia Messages postés 96 Statut Membre 16
 
C'est justement là, à mon avis que la façon que tu as choisis pour gérer l'insertion des références de tes images dans la bdd n'est pas (à mon humble avis) optimale mais peu importe pour l'instant.

Pour résumer et être sûr de comprendre: à chaque fois que tu ajoutes une voiture, tu lui ajoutes toute une série de référence (poids, taille, cylindrée...) et 16 photos.
Avec deux tables: une voiture, une image. Cette table image contient deux champs id et photos.

quand tu fais ta requête SQL via php pour récupérer l'ensemble des noms des photos:

$reponse = mysql_query("SELECT * FROM image WHERE id = ' ".$id." ' ");
while($donnees = mysql_fetch_assoc($reponse)){
echo $donnees['nom_photo'];
}

ou alors tu peux aussi utiliser la fonction foreach :)
avec : $id représentant l'id des photos que tu veux récupérer et 'nom_photo' le nom du champs dans lequel les noms des photos sont inclus.
0
audi68 Messages postés 626 Statut Membre 9
 
que me conseil tu alors?
0
caccia Messages postés 96 Statut Membre 16
 
$reponse = mysql_query("SELECT * FROM image WHERE id = ' ".$id." ' ");
while($donnees = mysql_fetch_assoc($reponse)){
echo $donnees['nom_photo'];
?>
<img src="dossier/images/voiture/<?php echo $donnees['nom_photo']; ?>" alt="<?php echo $donnees['nom_photo']; ?>" />
<?php

}

Avec ça, tu vas récupérer le nom des documents et le document lui-même et l'afficher.

En gros: le while récupère toutes les entrées de ta table photo pour lesquel l'id est égal à l'id de référence (qui correspond à l'id de la voiture que tu veux afficher si 'jai bien compris) et pour chaque photo, il affiche le nom de l'image et affiche cette image.

Je ne sais pas si ça répond à ta question...
0
audi68 Messages postés 626 Statut Membre 9
 
oui c est ce que je fais actuellment

Seulmeent j utilise array et pas assoc
while ($data = mysql_fetch_array($reponse) )
{

Quel est la difference?

Mais le probleme est l affichage dans ma galerie photos qui me pose probleme
Ou mon css est mal au point

car j ai sur ma page les 3meme photos par ligne
pas un autre une a la suite de l autre
Tu vois ce que je veux dire?

Merci de ton aide
0
caccia Messages postés 96 Statut Membre 16
 
Est ce que dans ta table, les noms de toutes tes photos sont bien insérées? ou juste une seule plusieurs fois?
Autrement dit: est-ce que tu as dans ta table
1 photos1
1 photos2
1 photos3
etc...

ou bien

1 photos1
1 photos1
1 photos1
etc...

?

Si tu peux me dire ça, je saurai te dire si le problème vient de l'affichage ou de l'insertion dans la bdd...
0
audi68 Messages postés 626 Statut Membre 9
 
L insertion dans la table se fait comme cela
id / photo / url
1 / photo1/ www.photo1
1/photos/www....
1/photo3/...
2/photo1/..
2/photo2....

Merci de ton aide
0
caccia Messages postés 96 Statut Membre 16
 
C'est donc que ton problème provient de l'affichage. Pourrais-tu me donner les quelques lignes de code qui concernent cet affichage?

Pour ce qui est de la la différence entre mysql_fetch_array et mysql_fetch_assoc: mysql_fetch_array est un tableau associatif et numéroté. Ainsi tu pourras récupérer tes valeurs de deux façons: $valeurs['0'] et $valeur['id']
Si l'id est en première position alors $valeur['0'] = $valeur['id'].

mysql_fetch_assoc est un tableau uniquement associatif donc tu ne peux récupérer tes valeurs qu'en faisant: $valeur['id']

Cette méthode a l'avantage ne prendre moins de ressource. (moitié moins de valeurs sont enregistrées)
0
audi68 Messages postés 626 Statut Membre 9
 
merci de ta reponse

ok je vois mieu maintenant donc ma solution est bonne non?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250" />
<meta name="generator" content="PSPad editor, www.pspad.com" />
<title> photo_simple html CSS
</title>
<link rel="stylesheet" type="text/css" href="photo_simple.css" />
</head>
<body>
<?php

require "connect.php";

// On récupere le contenu de $_GET dans l'adresse
$voit=$_GET['voiture'];

$reponse = mysql_query("SELECT * FROM photo2 WHERE idd ='$voit'")or die(mysql_error()); // Requete SQL
while ($data = mysql_fetch_assoc($reponse) )
{
?>
<div id="gallery">
<em id="thumbs"><a href="#nogo"> <img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a><a href="#nogo"> <img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a>
<a href="#nogo">
<img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a></em> </div>
<?php } ?>
</body>
</html>

voici le css

body {
background-color: #000000
}
#gallery {
position: fixed;
width: 750px;
}
#thumbs {
width: 180px;
float: left;
}
#thumbs a {
display: table-column;
float: right;
margin: 0 0 5px 5px;
width: 50px;
height: 50px;
}
#thumbs a img {
width: 50px;
height: 50px;
border: 0;
}
#thumbs a:hover {
border-color: #ddd;
}
#thumbs a:hover img {
position: absolute;
width: auto;
height: auto;
left: 185px;
top: 0;
border: 1px solid #333;
}

Merci pour ton aide
0
caccia Messages postés 96 Statut Membre 16
 
Ton problème vient de là, je pense:

while ($data = mysql_fetch_assoc($reponse) )
{
?>
<div id="gallery">
<em id="thumbs">
<a href="#nogo"> <img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a>
<a href="#nogo"> <img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a>
<a href="#nogo"><img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css"/></a>
</em> </div>
<?php } ?>

Tu as trois fois la même ligne de code. Pour le while comprend "tant que $data n'est pas vide, pour chaque ligne faire" => la commande. Ce qui veut dire qu'ici tu lui demandes pour une seule et même image de l'afficher 3 fois. Autre soucis, ta <div id="gallery"> devrait, à mon avis être en dehors du while. Enfin si tes images sont alignées c'est parce que tu ne demandes aucun retour ligne. Voilà quelque chose qui irait mieux:

<div id="gallery">
while ($data = mysql_fetch_assoc($reponse) )
{
?>

<em id="thumbs">
<a href="#nogo"> <img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a>

<br />// c'est très important pour ton problème de le mettre puisqu'il va faire le retour ligne

</em>
<?php
}
?>
</div>
0
audi68 Messages postés 626 Statut Membre 9
 
Merci de ta reponse
Je viens d afficher mais la page ne s afffiche pas correctement

Les images sont decaler et tous mais sur le script d origine il y a des photos sur 3 colonne comme j ai actulemment

Je vais essaier avec ma balise en dehors

Sinon ne vois tu rien d autre niveau css?

Merci pour ton aide
0
caccia Messages postés 96 Statut Membre 16
 
Est-ce qu'au moins tu récupères les bonnes photos et non plus les trois mêmes photos comme avant?
0
audi68 Messages postés 626 Statut Membre 9
 
oui je recupere les bonne photos et plus les 3 memes

Je recupere les photos une en dessous de l autre comme tu m as dit

Mais moi j aimerais les afficher comme cela
photos1/photos2/photos3
ligne suivante
photo4/photos/photos6
et ainsi de suite

Merci
0
caccia Messages postés 96 Statut Membre 16
 
hmm... Tu as deux solutions (voir 3):

- soit tu touches à ton css: tu fais des pages fixes et tu enlèves dans le code php le retour à la ligne. Dans ce cas, tout doit être calculé pour que la taille de tes trois photos réunies soit comprises dans une div qui les contiendrait (en gros <div id=container>ton code php</div> => la taille de ton div en largeur doit être pensée pour que tes images les unes à côté des autres soit à la bonne taille). C'est pas forcément très simple et j'avoue être un peu limité niveau CSS rapport au fait que j'ai toujours bossé avec des graphistes)

- soit tu le fais à la main dans ton code php: tu créés une variable $i=0 et dans ton while tu ajoutes quelque chose du genre if($i == 2 OR $i == 5 OR...) (de trois en trois) echo '<br />';
Cette seconde méthode demande à mon avis moins de boulot mais est franchement plus sale que la première. Ca fonctionnera aussi mais quitte à apprendre autant le faire bien...
0
audi68 Messages postés 626 Statut Membre 9
 
oui mais mon css est normalement bien fait car les 3 photos s affiche sur ma page

Je ne comprend pas prq il va pas a la ligne

Par contre t as 2eme solution est interressante mais je ne vois pas trop comment tu veux dire
Je veux afficher maximum 15 photos

La variable i correspond a quoi?
0
caccia Messages postés 96 Statut Membre 16
 
Il ne va pas à la ligne parce que ta page CSS n'a pas de taille fixe. Elle s'étire donc au gré des besoins.
La variable i n'est qu'une variable référence.
Quand on n'a pas encore fait de boucle elle vaut 0, à la fin de la première boucle elle vaut 1...

Autrement dit, quand aucune image n'a encore été affichée elle vaut 0, si une image a été affiché elle vaut 1 etc.
Si cette variable vaut 2 (ou 3 tout dépend à quel moment tu incrémentes) alors tu fais ton echo '<br />';
0