transfert d'images dans une bdd - PHP - Programmation
Marsh Posté le 25-03-2005 à 04:56:35
fait une gestion d erreur au niveau des upload file pour savoir ou ca coice
Marsh Posté le 26-03-2005 à 14:47:30
Merci de me répondre esox_ch, mais je ne sais pas comment faire ce que tu me demandes... Ce que je peux te dire c'est que tout marche, tout va dans la base de données mais le transfert des images ne fonctionne pas... Les images n'arrivent pas dans la bdd et donc ce sont les images par défaut (photo0.jpg) qui s'affichent.
Marsh Posté le 26-03-2005 à 20:56:55
a premiere vu tu utilises un formulaire d'upload de deux images
pour récupérer le contenu des images uploadées :
dans ton formulaire tu dois avoir quelque chose du style:
<form method="post" enctype="multipart/form-data" action="page_de_destination.php">
<input type="file" name="photosm">
<input type="file" name="photobg">
</form>
ensuite, tu recuperes les deux fichiers par :
$photosm = $_FILES['photosm'];
$photosg = $_FILES['photobg'];
t'auras directement accès au propriétés d'un fichier par $photosm['la_propriete'];
pour eviter toute erreur possible, mets
error_reporting(E_ALL), qui t'avertira de toute erreur eventuelle
pour tes chemins de fichiers lors de leur copie dans le repertoire de destination, regarde s'il n'y aurait pas de / oublié quelque part ca arrive
Marsh Posté le 26-03-2005 à 21:39:30
Merci Spike pour ta réponse, j'ai changé mon code. Voici le changement :
<?php
if ($ajoutArticle=="ok" )
{
//sélection de la base de données
mysql_select_db($database_ConnexionFit, $ConnexionFit);
//vérification si la reference existe déjà dans la base
$query_rsReference = "SELECT reference FROM articles WHERE reference = '$reference' ";
$rsReference = mysql_query($query_rsReference, $ConnexionFit) or die(mysql_error());
$totalRows_rsReference = mysql_num_rows($rsReference);
//si la reference n'existe pas encore alors :
if ($totalRows_rsReference==0)
{
//test si un fichier photo est sélectionné sinon photo0 par défaut
if ($_FILES['photosm']['size']!=0) $photosm_name=$_FILES['photosm']['name']; else $photosm_name="photo0.jpg";
if ($_FILES['photobg']['size']!=0) $photobg_name=$_FILES['photobg']['name']; else $photobg_name="photo0.jpg";
//enregistrement dans la base du nouvel article
mysql_select_db($database_ConnexionFit, $ConnexionFit);
$insertArticles = "INSERT INTO articles (reference, titre, description, prix, rubriqueID, ssrubriqueID, photosm, photobg) VALUES ('$reference', '$titre', '$description', '$prix', '$rubriqueID', '$ssrubriqueID', '$photosm_name', '$photobg_name')";
mysql_query($insertArticles, $ConnexionFit) or die(mysql_error());
//----Gestion de la photo de l'article si elle a était modifiée
if ($_FILES['photosm']['size']!=0)
{
$repertoiresm="../photosm/";
move_uploaded_file($_FILES['photosm']['tmp_name'],$repertoiresm.$_FILES['photosm']['name']);
}
elseif ($_FILES['photobg']['size']!=0)
{
$repertoirebg="../photobg/";
move_uploaded_file($_FILES['photobg']['tmp_name'],$repertoirebg.$_FILES['photobg']['name']);
}
//redirection vers la page articles.php
header("Location: articles.php" );
}//fin du if
//si la reference existe déjà > message d'erreur
else
{
$erreur_reference=1;
}
}
?>
Ce qui est dingue c'est qu'en local il n'y a que la photosm qui se copie et non la photogm. De plus, l'image photosm s'affiche correctement du côté administrateur et non du côté public ??? Incompréhensible... Je pense que pour les deux images je suis obligée de faire deux blocs distincts if et il faut que j'enlève le elseif. Quand je fais le test non en local, rien ne marche, aucune photos ne s'affichent, même celle que j'ai eu en local du côté administrateur... POURQUOI ??? Je tiens à préciser que je ne veux pas utiliser de FTP... Je me suis téléchargée 'MonExplorateurFTP' mais je vais t'avouer que je n'y comprends pas grand chose... Cela fait 2 mois que j'utilise Php que j'ai appris seule et d'avoir des coups mains est très réconfortant pour moi.
Si tu as une solution je te remercie d'avance.
Chry§
Marsh Posté le 27-03-2005 à 11:21:28
Donc,
La strucutre if elseif marche comme ca :
If(ceci marche) => Faire ca
Elseif(ceci marche ET celui d'avant non) => Faire ca
Donc dans ton cas c'est normal que si le IF marche, le elseif soit pas considéré, il faut en effet faire 2 if distinct
Sur ton hebergeur il se peut que se soit des problemes de permissions (controle que tu aies le droit d'ecrire un fichier dans ../photodb/ (il faut que tout les utilisateurs aient l'attribut w)), et pour le fait que ca s'affiche chez l'admin et pas chez le client,je crois que l'erreur esta rechercher dans le code client, il y a pas de raison autrement
Marsh Posté le 27-03-2005 à 18:25:57
Salut esox_ch,
Effectivement, afin de copier les 2 images dans leur dossier respectif, j'ai fait :
if ($_FILES['photosm']['size']!=0 AND $_FILES['photobg']['size']!=0)
{
$repertoiresm="../photosm/";
move_uploaded_file($_FILES['photosm']['tmp_name'],$repertoiresm.$_FILES['photosm']['name']);
$repertoirebg="../photobg/";
move_uploaded_file($_FILES['photobg']['tmp_name'],$repertoirebg.$_FILES['photobg']['name']);
}
//redirection vers la page articles.php
header("Location: articles.php" );
}//fin du if
Et là ça marche, en revanche, les images s'affichent bien du côté admi dans la page 'modif' tandis que du côté client je ne les vois pas. Pourtant en faisant un clic droit 'Propriétés', je vois les bons chemins pour ces photos... Et puis les autres articles que j'ai mis au départ dans la bdd s'affichent correctement...
Je sais que je suis ennuyante avec mon problème et je vous remercie de votre patience. Et puis ça servira sûrement à quelqu'un car en ce qui concerne les transferts de fichiers, ce n'est pas évident....
Merci...
Chry§
Marsh Posté le 28-03-2005 à 11:24:50
On peut avoir une page de test client pour voir ou est-ce que ca plante ?
Marsh Posté le 28-03-2005 à 14:16:02
Houra !!!! J'y ai passé du temps mais j'ai trouvé... c'est concernant le 'CHMOD'. J'ai eu du mal à trouver les infos nécessaires pour comprendre mais c'est enfin réussi. Merci pour ta patience... ça fait seulement 2 mois que je fais du Php et je dois t'avouer que d'entrée de jeu je ne me suis pas attaquée au plus facile... Mais c'est trop super !!!
Merci encore...
Marsh Posté le 28-03-2005 à 15:39:19
Chmod etant change mod, etant la commande pour changer les permissions d'un fichier/directory (voir mon post sur les permissions de l'hebergeur ). Parcontre ca fait plaisir de voir qqn avec ton esprit, c'est le genre de topic que j'aime bien lire et que j'aime bien aider . Continue comme ca,et si tu as un os, esite pas a me mailer ou revenir ici
Marsh Posté le 31-03-2005 à 01:26:16
Heuuuhhh et bien justement... j'ai fait une page qui permet de modifier les photos d'un l'article. Je me suis dit que maintenant que je sais les insérer, il me serait facile de les modifier... eh bien non... J'ai donc repris le script de la page 'ajoutArticle' et je l'ai modifié pour l'adapter à la page 'modifArticle', ce qui donne :
<?php
if ($modifPhoto=="ok" )
{
if ($_FILES['photosm']['size']!=0) $photosm_name=$_FILES['photosm']['name']; else $photosm_name="photo0.jpg";
if ($_FILES['photobg']['size']!=0) $photobg_name=$_FILES['photobg']['name']; else $photobg_name="photo0.jpg";
//enregistrement dans la base du nouvel article
mysql_select_db($database_ConnexionFit, $ConnexionFit);
$updateArticle="UPDATE articles SET (reference='$reference', photosm='$photosm_name', photobg='$photobg_name')";
$updateArticle.="WHERE reference='$reference'";
mysql_query($updateArticle, $ConnexionFit) or die(mysql_error());
//----Gestion de la photo de l'article si elle a était modifiée
if ($_FILES['photosm']['size']!=0 AND $_FILES['photobg']['size']!=0)
{
$repertoiresm="../photosm/";
move_uploaded_file($_FILES['photosm']['tmp_name'],$repertoiresm.$_FILES['photosm']['name']);
$repertoirebg="../photobg/";
move_uploaded_file($_FILES['photobg']['tmp_name'],$repertoirebg.$_FILES['photobg']['name']);
}
header("Location: articles.php" );
}
?>
Je récupère bien la référence et la photosm de l'article sélectionné, mais les photosm et photobg ne se changent pas, et donc ne se transfert pas au serveur. J'ai essayé plusieurs trucs et je ne vois pas où est mon erreur...
D'avance merci de ton aide.
Chry§
Marsh Posté le 07-04-2005 à 20:52:29
Les erreurs c'est quoi?
A part ça ta requete me semble bizard
Marsh Posté le 13-04-2005 à 23:40:25
En fait, en haut du message, la page concernait une insertion de nouvelles images du poste de l'administrateur au serveur. Maintenant que ça marche, j'essaie de faire une page qui me permettrait de modifier les images en les insérant avec leurs noms. J'ai essayé plusieurs trucs et je n'y arrive pas...sniff... Je n'arrive pas à trouvé mon erreur, les images ne se changent pas (les images sm et bg).
Je te remercie beaucoup pour ta patience... J'essaye encore de mon côté...
A bientôt et mercie...mercie...
Chry§
Marsh Posté le 25-03-2005 à 03:52:55
Bonjour à toutes et à tous,
j'ai construit un site qui contient un partie administrateur où la personne peut télécharger des images avec des informations. Tout se passe bien à l'exception des photos qui ne se transfert pas. Voici mon script :
PHP:
<?php
if ($ajoutArticle=="ok" )
{
//sélection de la base de données
mysql_select_db($database_ConnexionFit, $ConnexionFit);
//vérification si la reference existe déjà dans la base
$query_rsReference = "SELECT reference FROM articles WHERE reference = '$reference' ";
$rsReference = mysql_query($query_rsReference, $ConnexionFit) or die(mysql_error());
$totalRows_rsReference = mysql_num_rows($rsReference);
//si la reference n'existe pas encore alors :
if ($totalRows_rsReference==0)
{
//test si un fichier photo est sélectionné sinon photo0 par défaut
if ($photosm['photosm']['size']!=0) $photosm_name=$photosm['photosm']['name']; else $photosm_name="photo0.jpg";
if ($photobg['photobg']['size']!=0) $photobg_name=$photobg['photobg']['name']; else $photobg_name="photo0.jpg";
//enregistrement dans la base du nouvel article
mysql_select_db($database_ConnexionFit, $ConnexionFit);
$insertArticles = "INSERT INTO articles (reference, titre, description, prix, rubriqueID, ssrubriqueID, photosm, photobg) VALUES ('$reference', '$titre', '$description', '$prix', '$rubriqueID', '$ssrubriqueID', '$photosm_name', '$photobg_name')";
mysql_query($insertArticles, $ConnexionFit) or die(mysql_error());
//----Gestion de la photo de l'article si elle a était modifiée
if ($photosm['photosm']['size']!=0)
{
$repertoiresm="../photosm/";
move_uploaded_file($photosm['photosm']['tmp_name'],$repertoiresm.$photosm['photosm']['name']);
}
elseif ($photobg['photobg']['size']!=0)
{
$repertoirebg="../photobg/";
move_uploaded_file($photobg['photobg']['tmp_name'],$repertoirebg.$photobg['photobg']['name']);
}
//redirection vers la page articles.php
header("Location: articles.php" );
}//fin du if
//si la reference existe déjà > message d'erreur
else
{
$erreur_reference=1;
}
}
?>
Si quelqu'un pouvait m'aider je lui serais vraiment reconnaissante car cela fait un moment que j'essaie de comprendre mon erreur...
Merci beaucoup
Chry§