Page 1 sur 2
Programme d'annonce - gestion d'img
Posté : 29 janv. 2006, 23:46
par Johan
Bonjour à tous,
je viens à l'instant de me lancer dans le php/mysql ... grace aux tutoriaux proposés par le site.
En fait j'aimerai créé un programme de petites annonces ... donc j'ai créé un table avec différents champs :
_ id
_ nom
_ email
_ dateheure
_ telephone
_ description
_ prix
_ photo
_ titre
Donc sans aucun pb j'arrive à récupérer les données ... mais c'est au niveau des photos que je cale ... j'aimerai que lorsqu'une personne soumet une annonce, elle entre tous les champs, puis ensuite puisse ajouter la photo de concernant son objet en vente ...
J'ai essayé d'utilisé le tutorial envoyer des img avec php qui marche nickel, mais ça serait bien que je puisse mettre lors de la soumission de l'annonce tous les champs avec en plus celui d'ajouter une img ... et lorsque la personne cliquera sur "envoyer" toutes les données seront entrés y compris la photo ... je ne sais pas si je suis très clair ...
Merci d'avance
Johan
Posté : 30 janv. 2006, 00:37
par Cyrano
Non, pas très clair : quelle partie ne fonctionne pas. D'autre part, à travers ta question transparait l'idée d'enregistrer l'image elle-même dans la base ce qui n'est pas la solution la plus facile loin s'en faut. Il y a un tuto sur l'upload de fichier sur le site, regarde là.
Sommairement, tu récupères les données du formulaire et tu fais ton traitement de fichier avant d'enregistrer le fichier lui-même dans un répertoire et les informations sur ce fichier dans la base de données.
Posté : 30 janv. 2006, 00:44
par Johan
Voici mon formulaire ...
Code : Tout sélectionner
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="action" value="inserer" />
<p>Votre nom : <input type="text" name="nom" /></p>
<p>Votre email : <input type="text" name="email" /></p>
<p>Titre de la vente : <input type="text" name="titre" /></p>
<p>Votre prix : <input type="text" name="prix" /></p>
<p>Votre telephone : <input type="text" name="telephone" /></p>
<p>Description : <textarea name="description" cols="25" rows="10"></textarea></p>
<p>Votre photo : <input type="text" name="photo" /></p>
<p><input type="submit" name="Submit" value="Ok" /></p>
</form>
En fait, je voudrai pouvoir associer ce formulaire avec le tutorial d'upload de fichier (présent ici :
http://www.phpfrance.com/tutoriaux/inde ... e-fichiers)
Donc par conséquent que l'utilisateur entre toutes ces informations et qu'il finis par ajouter son img ... où le nom de l'img s'enregistre dans le champ "photo" de ma BDD puisque pour afficher les images ds les annonces j'utilise ce code suivant
Code : Tout sélectionner
<img width=100 src="photo/<?php print ($val["photo"]);?>"><br><a href="photo/<?php print ($val["photo"]);?>" target="_blank">Taille réelle</a>
Posté : 30 janv. 2006, 00:50
par Cyrano
Ton champ pour enregistrer une fichier doit être un <inptup< type="file" et non type="text" : ça va créer un champ avec un bouton [Parcourir] permettant à l'internaute de chercher le fichier image qu'il veut envoyer.
Il faudra en outre ajouter dans la balise <form> l'attribut enctype avec la valeur multipart/form-data sinon le fichier ne sera pas transféré.
Coté PHP, tu récupèreras les données du fichiers dans la super-globale $_FILES qui est un tableau associatif contenant des informations dont tu auras besoin pour effectuer les traitements.
Le reste est dans le tuto.
Posté : 30 janv. 2006, 00:55
par Johan
Merci beaucoup, je vais essayé !
Posté : 30 janv. 2006, 01:18
par Johan
J'ai avancé un peu ... voici mon code pour stocker dans la BDD :
Code : Tout sélectionner
// stockage dans la bdd
$nom = $_POST['nom'];
$email = $_POST['email'];
$titre = $_POST['titre'];
$telephone = $_POST['telephone'];
$prix = $_POST['prix'];
$photo = $_FILES['photo'];
$description = $_POST['description'];
if(!get_magic_quotes_gpc())
Je viens de mettre "FILES" après $photo=
mais je ne sais pas si c'est juste puisque désormais dans le champ photo de ma BDD il est indiqué que mon dernier ajout serait "Array" et là je suis un peu perdu.
Revoici donc mon formulaire ...
Code : Tout sélectionner
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="action" value="inserer" />
<p>Votre nom : <input type="text" name="nom" /></p>
<p>Votre email : <input type="text" name="email" /></p>
<p>Titre de la vente : <input type="text" name="titre" /></p>
<p>Votre prix : <input type="text" name="prix" /></p>
<p>Votre telephone : <input type="text" name="telephone" /></p>
<p>Description : <textarea name="description" cols="25" rows="10"></textarea></p>
<p>Votre photo : <input type="file" name="photo" /></p>
<p><input type="submit" name="Submit" value="Ok" /></p>
</form>
Par ailleurs, la photo ne senvoie pas ...
Pouvez vous de nouveau me renseigner ? merci d'avance
Johan
Posté : 30 janv. 2006, 01:23
par Cyrano
Je te l'ai pourtant mentionné : $_FILES est un tableau associatif : essaye ce bout de code, tu vas voir:
<pre>
<?php
var_dump($_FILES);
?>
</pre>
Mets ça juste à la récupération des données et regarde ce que ça va t'afficher.
Posté : 30 janv. 2006, 01:25
par Johan
voici ce que cela me marque :
Posté : 30 janv. 2006, 01:26
par Cyrano
Tu as envoyé un fichier ?
Posté : 30 janv. 2006, 01:29
par Johan
Oui mais sans succès .... ds mon champ photo de ma table il est rien écrit ... et lorsque j'envois mon formulaire remplie, voici ce qu'il m'arrive : Notice: Undefined variable: _ in g:\easyphp1-7\www\annonce web\inserer_annonce.php on line 29
Ligne 29 :
Posté : 30 janv. 2006, 01:30
par Cyrano
Tu as as du passer beaucoup de temps sur le tuto d'upload de fichier ...

Posté : 30 janv. 2006, 01:31
par Johan
Excusez moi mais bon je suis novice et oui j'ai passé du temps sur l'upload de fichier ... mais bon pas facile de tout comprendre !
J'arrive à utiliser l'upload seul ... mais intégré à mon formulaire non !
Posté : 30 janv. 2006, 01:33
par Cyrano
Pose toi les bonnes question: la programmation, c'est de la logique: que se passe-t-il à tel endroit du fichier: qu'est-ce qu'il devrait y avoir là ET POURQUOI, ce dernier point étant primordial.
Posté : 30 janv. 2006, 01:48
par Johan
Il me reste plus qu'à régler le pb du fichier non uploader ... pcq sinon désormais le nom du fichier puis son extension s'inscrivent bien dans le champ "photo" ... voici mes modif :
// stockage dans la bdd
$nom = $_POST['nom'];
$email = $_POST['email'];
$titre = $_POST['titre'];
$telephone = $_POST['telephone'];
$prix = $_POST['prix'];
$photo = $_FILES['photo']['name'];
$description = $_POST['description'];
<p>Votre photo : <?php
if(isset($_FILES['photo']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
$taille_max = 200000000;
$dest_dossier = 'photo/';
// 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 500Ko !';
}
// 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-1]+)/i', '_', $dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
}
}
?>
<input type="file" name="photo" /></p>
Donc désormais pour l'upload ... il me semble qu'il me manque une "action" dans le début de mon form ... non ? dans le tuto :
Code : Tout sélectionner
<form method="POST" action="notre_script.php" enctype="multipart/form-data"> et moi :
Code : Tout sélectionner
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Posté : 30 janv. 2006, 13:51
par Johan
Personne pour m'aider ?