Uploder des photos
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>
Configuration: Vista
merci de votre aide
27 réponses
Chargement de plusieurs photos sur un serveur et leur enregistrement en base MySQL afin d’obtenir un tableau récapitulatif comprenant chaque photo (id, nom et URL). Plusieurs réponses proposent de modifier le modèle relationnel en créant une table images référencée par la voiture correspondante, avec des colonnes id_image, nom_image et id_ref_voiture. L’approche suggérée implique d’inscrire d’abord la voiture puis d’enregistrer chaque image avec l’identifiant renvoyé, facilitant les jointures et la récupération par véhicule. Ces conseils soulignent aussi que l’usage d’une seule colonne pour l’URL ou le nom peut devenir insuffisant et qu’une séparation claire des données améliore l’évolutivité et la maintenance.
-
oui effectivement c etais ca
mais toujours le meme affichage -
Le point virgule la ligne juste avant...
-
toujours la meme ligne d erreur
-
essaye les guillemets autour des '2' '8'...
-
<?php
require "connect.php";
// On récupere le contenu de $_GET dans l'adresse, soit ce qu'il y a apres page.php3?maison=
$voit=$_GET['voiture'];
$reponse = mysql_query("SELECT * FROM photo2 WHERE idd ='$voit'")or die(mysql_error()); // Requete SQL
$i = 0;
while ($data = mysql_fetch_assoc($reponse) )
{
echo $data['url']; //tu affiches tout ce dont tu as besoin
$i++
if($i == 2 OR $i == 5 OR $i == 8){ echo '<br />'; }
}
?>
<div id="gallery">
<em id="thumbs"><a href="#nogo"></a><a href="#nogo"></a>
<a href="#nogo">
<img src="admin/<?php echo $data['url']; ?>" alt="1" title="photo_simple.css" /></a></em> </div><?php } ?>
<a href="#nogo"></a><a href="#nogo"></a>
</body>
</html>
ca ne vas pas il me dit qu il y a une erreur a cette ligne if($i == 2 OR $i == 5 OR $i == 8){ echo '<br />'; }
Pour le css j ai une largueur a mon fixe -
Si la façon de récupérer tes images est la même.
$i = 0;
while($data = mysql_fecth_assoc()){
echo $data['url']; //tu affiches tout ce dont tu as besoin
$i++
if($i == 2 OR $i == 5 OR $i == 8){ echo '<br />'; }
}
Pour le css ce n'est pas la hauteur qu'il faut fixer mais bel et bien la largeur... -
j ai ajouter une taille fixe en hauteur mais ca ne cahge rien au contraire c es pire
Ok mais je ne vois vraiment pas comment utiliser ton code
Je recupere les photos sous quel forme?
plus comme ca ?
<?php echo $data['url']; ?? -
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 />'; -
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? -
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... -
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 -
Est-ce qu'au moins tu récupères les bonnes photos et non plus les trois mêmes photos comme avant?
-
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 -
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> -
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 -
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) -
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 -
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... -
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 -
$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...
- 1
- 2