Upload image et SQL

Eléphant du PHP | 184 Messages

19 oct. 2011, 12:41

Bonjour à vous,

Je suis à recherche un petit tuto ou d'un exemple pour pouvoir uploader/redimensionner une image avec une base de donnée.

Si vous avez quelque chose pour moi je suis preneur :)

Merci à vous

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 oct. 2011, 16:44

La base de donnees ne fera que stocker le chemin vers l'image uploadee, ou l'image elle-meme dans un blob. L'upload et redimensionnement se feront par PHP. Tu as un tuto sur l'upload dans la FAQ: faq-tutoriels/upload-fichiers-par-http-t545.html

Tu as cherche sur internet ? Ca doit pas etre bien dur a trouve , je suis sur qu'il y a tout un tas de resultats pour la recherche "redimensionner image PHP"

Eléphant du PHP | 184 Messages

19 oct. 2011, 16:56

Merci pour la réponse :)

Oui effectivement j'ai bien trouvé un script sur internet, j'ai réussis à le faire fonctionner.

En gros pour expliquer un peu l'exercice que je fais, j'aimerai stocker dans une bdd un titre, un petit texte et uploader une image pour ensuite les ré-afficher.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 oct. 2011, 17:20

D'ou vient cet exercice ? C'est effectivement un truc classique pour commencer, plutot que de reutiliser un script tout pret tu ferais mieux de le faire toi-meme, tu as toutes les etapes sur http://phpdebutant.org/

Eléphant du PHP | 184 Messages

19 oct. 2011, 17:26

C'est purement pour moi en fait :)

Oui quand je parlais de script, je parlais plus d'exemple, j'ai un peu tout refais par moi-même, je pense que j'ai pas trop mal compris.

Mais en gros maintenant, j'aimerai faire un truc du genre ci-dessus.

J'ai fais quelques tp sur bdd récemment, j'aimerai combiner les deux avec une image qui possède un titre et un petit texte explicatif.

Eléphant du PHP | 190 Messages

20 oct. 2011, 10:43

Voila un script bien commenté pour l'upload d'images.

Si tu le comprend bien, tu n'a plus qu'a ajouter des champs texte à ton formulaire et gérer l'insertion en bdd. Un tuto ici pour récupérer les valeurs d'un form.

Et comment insérer des données dans la base.

Eléphant du PHP | 184 Messages

20 oct. 2011, 13:42

Merci beaucoup pour la réponse, je ne connaissais pas ces liens :)

Du coup, si je comprend bien, c'est la même chose que d'enregistrer une url ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 oct. 2011, 15:10

heu ben oui, l'upload et le redimensionnement c'est avec php

Après tu met soit l'url soit le contenu du fichier dans la base, mais ce n'est pas l'idéal de mettre le contenu de dans la table car c'est généralement plus limité en taille que ton espace disque :)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 190 Messages

21 oct. 2011, 00:24

Tu n'es meme pas obligé de stocker l'url. Pour ma part je stocke juste le nom et je génère le lien par le script.

Par exemple, Dans ton formulaire, tu met un champ nom, un champ description et et un champ 'input type file' pour l'upload.

Ensuite, lorsque tu envoies le formulaire, tu insères le nom et la description dans la base. L'image, tu la renomme selon le nom récupéré dans le formulaire et tu l'upload dans un dossier 'images'.

De cette facon, tu gagnes un champ dans ta base, et tu retrouve facilement ton image grâce à son nom dans la bdd. (/images/nom.jpg)

Imagine aussi que tu veuille creer des catégories d'images. il te suffirai de creer un dossier pour la categorie et d'uploader ton image dedans. (images/categorie/nom.jpg)

il y'a d'autres méthodes, dont celle de stocker l'url de l'image, d'autres utilisent l'id de l'image en bdd etc...

J'espère t'avoir aidé un peu ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 oct. 2011, 11:48

hum
Pour ma part je stocke juste le nom et je génère le lien par le script.
pourquoi pas ceci dit si le nom c'est truc'machani# j'suis pas certain que système apprécie :)

tu me diras on peux normaliser mais la faut stocker le nom ;)

le coup d'utiliser l'id est pas trop mal, t'est sur de l'unicité du nom, par contre ce système n'est bon que si tu n'autorise qu'une seule image (par exemple une petite annonce avec une seule image c'est pas attractif ;))

donc sujet à réfléchir en fonction des attentes et de l'évolutivité de la chose, avec une table pour les images une pour les 'donnée' et une qui fait la jointure tons ystème est évolutif sans trop te prendre le choux ;)


@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 oct. 2011, 13:37

une bonne idée ? arrêter des répondre ce type de phrase sur tout les sujet que tu croise, cela n'est en rien constructif et assez irritant à la lecture.

@+
Il en faut peu pour être heureux ......

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 oct. 2011, 17:31

une bonne idée ? arrêter des répondre ce type de phrase sur tout les sujet que tu croise, cela n'est en rien constructif et assez irritant à la lecture.

@+
:?:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 oct. 2011, 16:06

ben y a eu un message de supprimer du coup mon intervention est totalement décalée :mrgreen:

le mec disait "une bonne idée de je sais plus quoi".

j'avoue au bout du 3 ou 4 messages identique j'ai craqué :boire4:


@+
Modifié en dernier par moogli le 27 oct. 2011, 17:50, modifié 1 fois.
Il en faut peu pour être heureux ......

Eléphant du PHP | 184 Messages

27 oct. 2011, 17:35

Bonjour à vous, je reviens vers vous concernant l'upload, j'ai finalement opté pour enregistrer le nom de l'image au lieu de l'url.

Mon soucis, c'est que l'enregistrement du titre, texte et nom de l'image se fait bien dans la bdd, mais je n'arrive pas à faire marcher mon upload.
Il me dit à chaque fois que l’extension de mon fichier est incorrecte.

Je dois avoir une erreur quelque part :(


<?php

require("connexion/conf.php");

$conn = mysql_connect($sql_serveur, $sql_user, $sql_passwd) or trigger_error(mysql_error(),E_USER_ERROR);

mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error()); 
 
mysql_select_db($sql_bdd, $conn); 

if(isset($_POST['action'])){
 
 // Récupération des variables nécessaires	
$titre_image = mysql_real_escape_string($_POST['titre_image']);
$texte_image = mysql_real_escape_string($_POST['texte_image']);
$url_image = mysql_real_escape_string($_POST['fichier']);

$sq="insert into images values('',\"$titre_image\",\"$texte_image\",\"$url_image\")"; 
$quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());


define('TARGET', 'images/');
define('MAX_SIZE', 200000); 
define('WIDTH_MAX', 800);
define('HEIGHT_MAX', 800);

$tabExt = array('jpg','gif','png','jpeg'); 
$infosImg = array();

$extension = '';
$message = '';
$nomImage = '';

if( !is_dir(TARGET) ) {
if( !mkdir(TARGET, 0755) ) { 
exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !'); 
}
}
if(!empty($_POST))
{ 
// On verifie si le champ est rempli 
if( !empty($_FILES['fichier']['name']) ) 
{
// Recuperation de l'extension du fichier 
$extension = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION); 
// On verifie l'extension du fichier 
if(in_array(strtolower($extension),$tabExt)) 
{ 
// On recupere les dimensions du fichier 
$infosImg = getimagesize($_FILES['fichier']['tmp_name']); 
// On verifie le type de l'image 
if($infosImg[2] >= 1 && $infosImg[2] <= 14) 
{ 


// On verifie les dimensions et taille de l'image 
if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE)) 

//on redimentionne limage
$x = 300; 

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

if ($infosImg)

echo 'Image redimensionnée ... 
'; 

if ($infosImg['mime']=='image/jpeg' ) { 
$img_big = imagecreatefromjpeg($_FILES['fichier']['tmp_name']); # 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,$infosImg[0],$infosImg[1]); 

imagejpeg($img_mini,$_FILES['fichier']['tmp_name'] ); 
}
elseif ($infosImg['mime']=='image/png' ) { 
$img_big = imagecreatefrompng($_FILES['fichier']['tmp_name']); # 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,$infosImg[0],$infosImg[1]); 

imagepng($img_mini,$_FILES['fichier']['tmp_name'] ); 
}
elseif ($infosImg['mime']=='image/gif' ) { 
$img_big = imagecreatefromgif($_FILES['fichier']['tmp_name']); # 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,$infosImg[0],$infosImg[1]); 

imagegif($img_mini,$_FILES['fichier']['tmp_name'] ); 
}
{ 
// Parcours du tableau d'erreurs 
if(isset($_FILES['fichier']['error']) 
&& UPLOAD_ERR_OK === $_FILES['fichier']['error']) 
{ 
// On renomme le fichier 
$nomImage = md5(uniqid()) .'.'. $extension; 
// Si c'est OK, on teste l'upload 
if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage)) 
{ 
$message = 'Upload réussi !'; 
} 
else 
{ 
// Sinon on affiche une erreur systeme 
$message = 'Problème lors de l\'upload !'; 
} 
} 
else 
{ 
$message = 'Une erreur interne a empêché l\'uplaod de l\'image'; 
} 
}
} 
else 
{ 
// Sinon erreur sur les dimensions et taille de l'image 
$message = 'Erreur dans les dimensions de l\'image !'; 
} 
} 
else 
{ 
// Sinon erreur sur le type de l'image 
$message = 'Le fichier à uploader n\'est pas une image !'; 
} 
} 
else 
{ 
// Sinon on affiche une erreur pour l'extension 
$message = 'L\'extension du fichier est incorrecte !'; 
} 
} 
else 
{ 
// Sinon on affiche une erreur pour le champ vide 
$message = 'Veuillez remplir le formulaire svp !'; 
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Ajouter un Client</title>

</head>

<body>

<center>

<?php if( !empty($message) ) { 

echo '<p>',"\n"; echo "\t\t<strong>", htmlspecialchars($message) ,"</strong>\n"; 
echo "\t</p>\n\n"; } ?> 

<?php

echo '<p style="color:#ff0000;font-weight:bold;">Entrée correctement ajouté à la base de données</p>'."<br><br><a href=\"addcategorie.php\">Ajouter un nouveau client</a>"."<br><br><a href=\"admin.php\">Revenir à l'accueil</a>";

}

else{
	
?>

<center>

<h1>Ajouter une catégorie:</h1>
<br />
	<form action="addimage.php" method="post">
	<input type="hidden" name="action" value="add">
	Ajouter le titre:<br><input type="text" name="titre_image"><br /><br />
    Ajouter le texte:<br><textarea name="texte_image"></textarea><br /><br />
    
    <fieldset><label for="fichier_a_uploader" title="Recherchez le   fichier à uploader !">Ajouter l'image:</label> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" /> <input name="fichier" type="file" id="fichier_a_uploader" /></fieldset>
    <br>
    <br>
	<input type="submit" name="submit" value="Envoyer">
	</form>
	<br>
	<font face="Verdana" size="2"><a href="admin.php">Revenir à l'accueil</a></font>
    
</center>
    
<?php

}

?>
</center>
</body>

</html>



Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 oct. 2011, 17:53

salut,

je t'invite plutôt à poser ta question sur les forums php, cela n'a plus rien a voir avec le SQL :)

pour te donner des pistes :

- Affiche l'extension du fichier tel que tu la détermine (peut être une histoire de .ext ou ext ;) )
- affiche le tableau des extentions pour comparaison.

@+
Il en faut peu pour être heureux ......