Aller au contenu

upload de fichier avec base de donnée sql


Sujets conseillés

Posté

Bonjour à tous!

Voici mon problème : je suis en train de créer un site et j'ai besoin d'y insérer un champ de fichier afin que les utilisateurs puisse envoyer un fichier, plus précisement une photo. Je travaille avec une base de donnée sql pour le moment connecté en local (wampserver).

J'ai besoin que le fichier envoyé par l'utilisateur soit mis automatiquement dans un dossier sur le serveur(par exemple le dossier image)et que dans ma base sql apparaisse le nom du fichier

J'ai essayer de comprendre les divers tutoriaux sur le web mais je n'arrive pas à trouver un exemple concret qui m'aiderai à vraiment comprendre la procédure.

Alors voici les données à appliquer à l'exemple :

base de donnée :client_db

table de la base : profil

champ de la table : nom (VARCHAR), prenom (VARCHAR), photo (VARCHAR)

nom du fichier où se trouve le formulaire : envoi.php

nom de la connexion : ConnexionInscription (pas de mot de passe)

formulaire : nom=champ de texte, prenom=champ de texte, photo=champ de fichier

nom du dossier sur le serveur où je veux stocker les photos : /images/

Voilà donc si quelqu'un peut me donner un exemple concret de ce que je dois faire afin de pouvoir uploader un fichier selon les données suivantes, ça serait très sympa!!! ;)

Merci d'avance.

Posté

Quelques trucs à savoir :

- lorsque tu demandes à uploader un fichier, ton formulaire doit avoir un attribut enctype="multipart/form-data"

- une fois uploadé, le fichier sera accessible par la variable $_FILES['nom_de_ton_champ']['tmp_name']

- avant toute chose, il est toujours utile de vérifier que le fichier uploadé est bien une image. Plutôt que de vérifier l'extension (modifiable par l'utilisateur), il faut vérifier son type mime avec la fonction getimagesize()

- si le fichier est bien une image, tu peux lui attribuer un nom. Tu peux choisir toi-même le nom, ou tu peux réutiliser le nom d'origine de l'image ($_FILES['nom_de_ton_champ']['name']. Gaffe aux doublons et aux caractères incompatibles, dans ce cas)

- Tu déplaces ensuite le fichier dans ton répertoire (avec move_uploaded_file)

- Pour finir, tu enregistres le nom du fichier dans ta base de données.

Posté

Merci à toi.

Le problème est que je connais les étapes pour le faire (ça fait 2 jours que je traîne sur les sites où je peux trouver des tutoriaux en rapport avec ça) mais je n'arrive pas à l'appliquer à mon cas. J'ai réussi à ce que le fichier soit enregistrer dans un dossier mais pas à enregistrer son nom dans ma base de donnée. Je pense que je dois louper quelque chose mais j'arrive pas à trouver quoi...

ps : j'utilise dreamweaver cs4 mais je travaille beaucoup en code.

Posté

Bonjour,

Pour rajouter à ce qu'a dit Captain, je donne un petit lien au passage. C'est une classe du doux nom de upload et qui facilite vachement le redimensionnement et upload d'une image... J'aime beaucoup !

Pour le souci que tu rencontres, on va avoir du mal à t'aider sans quelques informations supplémentaires :

- Erreur rencontrée ? Message ou pas ?

- Arrives-tu à rentrer d'autres informations dans ta base de données ?

- Code que tu as écrit...

Posté

Bonjour,

Pour rajouter à ce qu'a dit Captain, je donne un petit lien au passage. C'est une classe du doux nom de upload et qui facilite vachement le redimensionnement et upload d'une image... J'aime beaucoup !

Pour le souci que tu rencontres, on va avoir du mal à t'aider sans quelques informations supplémentaires :

- Erreur rencontrée ? Message ou pas ?

- Arrives-tu à rentrer d'autres informations dans ta base de données ?

- Code que tu as écrit...

Bonjour sarc,

Pour te raconter la petite histoire, j'ai d'abord créé un formulaire d'"inscription" il y a quelques temps, dont les données sont enregistrées dans ma base, tout fonctionnait très bien jusqu'à maintenant. Mais j'ai absolument besoin d'ajouter un champ de fichier... et là ça ne fonctionne plus.

Voici mes messages d'erreur quand je teste l'envoi du formulaire : Notice: Undefined index: photo in C:\...\inscription.php on line 55

Column 'photo' cannot be null

Et du coup aucune donnée ne s'enregistre dans la base ni dans le dossier de destination de la photo.

Voici le code php qui gère l'enregistrement sur la base et dans le dossier images :

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "titre")) {
$insertSQL = sprintf("INSERT INTO profil ( nom, prenom, photo, ) VALUES (%s, %s, %s, )",

GetSQLValueString($_POST['nom'], "text"),
GetSQLValueString($_POST['prenom'], "text"),
GetSQLValueString($_POST['photo'], "text"),

mysql_select_db($database_ConnexionInscription, $ConnexionInscription);
$Result1 = mysql_query($insertSQL, $ConnexionInscription) or die(mysql_error());

$insertGoTo = "/.../login.php";
if (isset($_SERVER['QUERY_STRING'])) {

$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}




if(isset($_FILES['photo']))

{

// params

unset($erreur);

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

$taille_max = 1000000;

$dest_dossier = '/.../images/';



// vérifications

if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )

{

$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';

}

elseif( file_exists($_FILES['photo']['tmp_name'])

and filesize($_FILES['photo']['tmp_name']) > $taille_max)

{

$erreur = 'Votre fichier doit faire moins de 1Mo !';

}

// copie du fichier

if(!isset($erreur))

{

$dest_fichier = basename($_FILES['photo']['name']);

// formatage nom fichier

// enlever les accents

$dest_fichier = strtr($dest_fichier,

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

'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');

// remplacer les caracteres autres que lettres, chiffres et point par _

$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);

//enregistrement dans la base
mysql_select_db($database_ConnexionInscription, $ConnexionInscription);
$insertProfil = "INSERT INTO profil (photo) VALUES ('$photo_name')";
mysql_query($insertProfil, $ConnexionInscription) or die(mysql_error());
// copie du fichier

move_uploaded_file($_FILES['photo']['tmp_name'] ,$dest_fichier.$_FILES['photo']['name' ]);

}

}


?>

Merci pour votre aide!

Posté

Pour être complet, il faudrait également que tu envoies le code HTML de ton formulaire d'envoi de photo.

Quelle est la ligne 55 dans ton fichier ?

Ta requête SQL est bizarre :

"INSERT INTO profil (photo) VALUES ('$photo_name')";

Ca veut dire que tu veux créer un nouveau profil, sans nom ni prénom, mais juste avec une photo ?

Posté

Pour être complet, il faudrait également que tu envoies le code HTML de ton formulaire d'envoi de photo.

Quelle est la ligne 55 dans ton fichier ?

Ta requête SQL est bizarre :

Ca veut dire que tu veux créer un nouveau profil, sans nom ni prénom, mais juste avec une photo ?

Voici le code html formulaire d'envoi :

<form action="<?php echo $editFormAction; ?>" method="POST" enctype="multipart/form-data" name="titre" id="titre">

la ligne 55 est celle ci : GetSQLValueString($_POST['photo'], "text"),

J'ai retesté ma page sur le serveur local, ça m'ajoute effectivement une ligne dans ma base de donnée mais sans rien dedans. De plus le fichier est bien enregistrer dans mon dossier.

Posté

Et le reste du formulaire ?

En gros, ce que l'erreur te dit, c'est que $_POST['photo'] n'existe pas. Tu voulais sûrement mettre $_FILES['photo']['name'] à la place, non ?

Pour tester ce qu'il y a dans tes variables $_POST, et $_FILES, tu peux mettre ça en début de ton script PHP :


echo '<pre>';
print_r($_FILES);
print_r($_POST);
echo '</pre>';

Tu sauras ainsi toutes les variables que tu peux utiliser dans ton programme, après validation du formulaire.

Posté

Merci beaucoup pour ton aide!!!

En fait, dans mon formulaire, il y a beaucoup plus de données que ce que j'ai indiqué ici, c'est pour ça que je n'ai pas tout mis. Tout fonctionnait très bien au départ, c'est depuis que j'ai voulu mettre ce champ de fichier pour les photos qu'il y a un probleme. Je pense que ça vient du fait que je n'arrive pas à inserer comme il faut mon code pour le traitement de la photo dans le code déjà présent du formulaire entier.

Je vais effectivement faire le test que tu m'as dit.

Je fais une pause ce soir mais te tiendrais au courant au cas où je trouve ma solution.

Merci encore!

Posté

Bon ba finalement je viens de retester en changeant ma ligne $_POST['photo'] en $_FILES['photo']['name'] et... miracle ça fonctionne!!!

Je savais bien que c'était une erreur toute bête comme ça mais je n'arrivais pas à trouver d'où ça venait, alors un grand merci à toi!!!!

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...