Programme d'annonce - gestion d'img

Eléphanteau du PHP | 36 Messages

29 janv. 2006, 23:46

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

Mammouth du PHP | 19672 Messages

30 janv. 2006, 00:37

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 00:44

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>

Mammouth du PHP | 19672 Messages

30 janv. 2006, 00:50

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 00:55

Merci beaucoup, je vais essayé !

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 01:18

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

Mammouth du PHP | 19672 Messages

30 janv. 2006, 01:23

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 01:25

voici ce que cela me marque :

Code : Tout sélectionner

array(0) { }

Mammouth du PHP | 19672 Messages

30 janv. 2006, 01:26

Tu as envoyé un fichier ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 01:29

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 :

Code : Tout sélectionner

$photo = $_POST['photo'];

Mammouth du PHP | 19672 Messages

30 janv. 2006, 01:30

Tu as as du passer beaucoup de temps sur le tuto d'upload de fichier ... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 01:31

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 !

Mammouth du PHP | 19672 Messages

30 janv. 2006, 01:33

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 01:48

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']; ?>">

Eléphanteau du PHP | 36 Messages

30 janv. 2006, 13:51

Personne pour m'aider ?