Envoyer des photos vers Base MySql

Fermé
galaxico Messages postés 4 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 7 juillet 2011 - 1 juil. 2011 à 17:51
galaxico Messages postés 4 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 7 juillet 2011 - 6 juil. 2011 à 18:18
Bonjour,

j'ai déjà un petit site d'agence immobilière, et je voudrais ajouter une page admin, pour ajouter les enregistrements avec les photos depuis un formulaire sur la base MysQl.

je voudrais que les photos soient stockées dans un répertoire dans la racine du site, et soient nommées avec l'ID des enregistrement + l'indice a, b, c ou d... s'il y a plusieurs photos de la même enregistrement par exemple :

Enregistrement 001 :
Photos : 001-a, 001-b, 001-c...

Enregistrement 002:
Photos : 002-a, 002-b...


j'ai déjà une base "Agence" avec 2 tables :

table1 : Bien -- plusieurs champs : id_bien, type, ville, nbr_chambre...
table2 : images -- Deux champs : id_img, url_img

les photos sont stockées dans un répertoire, et l'URL est stocké dans la base.

si quelqu'un peut m'aider ça sera sympa pour moi et pour beaucoup d'autres

Merci d'avance
A voir également:

3 réponses

salut,
voila une idée,

sur une nouvelle table du cree un champs compteur que tu va lire a chaque enregistrement, ensuite +1 et du revoie le nombre a la basse de donnée
tu obtiens le chiffre

Pour la lettre si ton formulaire limite le nombre image a uploadé tu peux faire un truc du genre
$image1= $_POST['image1'];
$lettre_image1=A;

$nom_image1= le nombre que tu recupérer a basse + $lettre_image1

ensuite de reste a renomer le fichier avant l'enregistrement
0
bon, j'ai déjà le script qui ajout les photo en bianire dans des champs BLOB mais, d'après ce qu'on m'a dit la base deviendera de plus en plus lourde, et c'est mieux d'enregistrer juste l'URL des photos dans la base et les photos dans un repertoire dans la racine du site...je sais comment manipuler les URL des photos mais juste en affichage, et je l'ai déjà fait...je met les photos manuellement dans le dossier IMAGES dans la racine du site, puis j'insère les URL dans la table img et j'affiche les photos avec <img src="'.$url.'" width="250" height="239"> ...
le prb c'est comment avec un formulaire HTML envoyer des photos dans le dossier qui se retrouvera dans la racine du site, et mettre l'URL dans la base de données...

voici je script complèt pour insérer les photos en BLOB dans la base :

- la page index.php

<html>
<head>
<title>Stock d'images</title>
</head>
<body>

<?php
include ("transfert.php");
// si le variable Fic "champ image" est plein, on execute la fonction transfert
if ( isset($_FILES['fic']) )
{
transfert();
}
?>


<h3>Envoi d'une image</h3>
<!-- enctype="multipart/form-data" c'est pour que le navigateur du client transfère les données binaires correctement. -->
<form enctype="multipart/form-data" action="#" method="post">
<!-- le champ caché name="MAX_FILE_SIZE" permet d'empêcher le transfert de fichier supérieur à 1.050.000 octets-->
<input type="hidden" name="MAX_FILE_SIZE" value="1050000" />
<input type="file" name="fic" size=50 value="" />
<input type="submit" value="Envoyer" />
</form>
<p><a href="index.php">Liste</a></p>
</body>
</html>

- le page transfert.php

<?php
function transfert ()
{
// création de variales
$ret = false;
$img_blob = '';
$img_taille = 0;
$img_type = '';
$img_nom = '';
$taille_max = 1050000; // vous pouver modifier la taille....
// on met le fichier dans le dossier temporaire
$ret = is_uploaded_file ($_FILES['fic']['tmp_name']);
if ( !$ret )
{ echo('<script> alert("Envoi non effectue"); </script>');
return false;
}
else
{
// on attribue la taille de l'image sélectionée au variable de taille
$img_taille = $_FILES['fic']['size'];
// on compare la taille de l'image avec la taille qu'on a préciser comme un maximum
if ( $img_taille > $taille_max )
{
echo "Trop gros !";
return false;
}
else{echo('<script> alert(" 1 image enregistree \n Envoi bien effectue "); </script>');}

// attribution des valeurs récupéré aux variables après la validation de l'image
$img_type = $_FILES['fic']['type'];
$img_nom = $_FILES['fic']['name'];
// l'appel de la page connexion.php pour se connecter à la base de données
include ("connexion.php");
// le fichier est stocké physiquement dans un répertoire temporaire du serveur.
// "file_get_contents" c'est pour récupérer le contenu binaire
$img_blob = file_get_contents ($_FILES['fic']['tmp_name']);

$req = "INSERT INTO
images (img_nom, img_taille, img_type, img_blob)
VALUES ('$img_nom' , '$img_taille' , '$img_type' , '".addslashes ($img_blob)."') ";
$ret = mysql_query ($req) or die (mysql_error ());
return true;
}
}
?>


- la page de connexion à la base : connexion.php

<?php
$hote = 'localhost';
$base = 'img';
$user = 'root';
$pass = '';
$cnx = mysql_connect ($hote, $user, $pass) or die (mysql_error ());
$ret = mysql_select_db ($base) or die (mysql_error ());
?>

- la base de données img :

créer la base img et éxecuter la requête suivante pour créer la table :

CREATE TABLE 'images' (
'img_id' INT NOT NULL AUTO_INCREMENT ,
'img_nom' VARCHAR( 50 ) NOT NULL ,
'img_taille' VARCHAR( 25 ) NOT NULL ,
'img_type' VARCHAR( 25 ) NOT NULL ,
'img_blob' LONGBLOB NOT NULL ,
PRIMARY KEY ( 'img_id' )
)


et voilà pour ceux qui cherche à ajouter des photos en binaire dans la BDD...
0
galaxico Messages postés 4 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 7 juillet 2011
6 juil. 2011 à 18:18
voilà j'ai trouvé comment ajouter l'URL de la photo dans la base de données et l'image dans un dossier du racine du site et c'est beaucoup plus pratique que le stockage en binaire...je partage
--------------------------------

la page index.html

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>

<form method="post" action="envoi_image.php" enctype="multipart/form-data">
<label FOR="icone"></label>

<input type="file" name="icone" id="icone" /><br />

<input type="submit" name="submit" value="Envoyer" />
</p>
</form>


</body>
</html>

----------------------------------

la page envoi_image.php

<?php
// création des variables
$dossier = 'Images/'; // dossier de destination qui va contenir les photos
$maxsize = '1048576'; // la taille max
$maxwidth = '2000'; // la largeur max
$maxheight = '2000'; // la hauteur max

IF ($_FILES['icone']['error'] > 0)
{
$erreur = 'Erreur lors du transfert';
}
else
{
IF ($_FILES['icone']['size'] > $maxsize)
{
$erreur = 'Le fichier est trop gros';
}
else
{
$extensions_valides = array('jpg','jpeg','gif','png');
$extension_upload = strtolower( substr( strrchr($_FILES['icone']['name'], '.'),1));

IF (in_array($extension_upload,$extensions_valides))
{
$image_sizes = getimagesize($_FILES['icone']['tmp_name']);

IF (!$image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
{
$erreur = 'Image trop grande';
}
else
{
$nom = "{$_FILES['icone']['name']}.{$extension_upload}";
$resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$dossier.$nom);
$images = $dossier.$nom;

IF ($resultat)
{
echo 'Transfert reussi';

include ("connexion.php");
$image = $images;


mysql_query("INSERT INTO img VALUES('', '" . $image . "')");
}
else
{
echo 'Echec du transfert';
}
}
}
else
{
echo 'Extension incorrect';
}
}
}
?>

-------------------------------------------------

la page connexion.php

<?php
$hote = 'localhost';
$base = 'image';
$user = 'root';
$pass = '';
$cnx = mysql_connect ($hote, $user, $pass) or die (mysql_error ());
$ret = mysql_select_db ($base) or die (mysql_error ());
?>
----------------------------------------------------

la base de données : image

table : img avec deux champs
champ 1 : id - smallint(3) - UNSIGNED ZEROFILL - Auto_increment
champ 2 : image - varchar(50)
0