Page 1 sur 2

dépot de petites annonces avec photo

Posté : 02 juin 2005, 09:00
par dentafas
Bonjour à toutes et à tous

voila j'ai crée une page où les utilisateurs peuvent déposer des petites annonces (tout fonctionne bien) mais pour améliorer ce site je souhaiterai qu'ils puissent y déposer des photo en plus.
Le probleme :oops: c'est que je ne sait pas comment faire alors si qqlq'un pouvait me mettre sur la voie je lui en serai trés reconnaissant. [-o<

merci d'avance

Posté : 02 juin 2005, 09:25
par Cyrano
Salut.
Shéma basique.
-1- Il faut que ton formulaire comporte un champ de type file affichant donc un bouton parcourir qui permettra à l'internaute de choisir une image sur sa machine;
-2- Il faut lors de la validation du formulaire traiter l'upload de l'image vers le répertoire prévu à cet effet sur le site. Pour ça, reporte toi au tuto sur l'upload de fichiers sur le site de PHPFrance
-3- Il faudrait éventuellement avoir un système qui récupère cette image et la ré-échantillone pour lui donner des dimensions maximum (hauteur et largeur) pour l'affichage final.

Quand tu en seras au codage, viens nous voir si tu bloques sur un détail particulier.

Posté : 02 juin 2005, 11:02
par dentafas
re

voici le code que j'ai mais je pense qu'il y a plusieurs erreurs si vous voyer quelque chose dites le moi



<html>

<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">

<title>Ajout de votre annonce</title>

</head>
<body>

<b>
<table border="0" cellpadding="4" cellspacing="0" width="800" height="100%" bgcolor="white">
<tr>
<td valign="top">
<center>
<br>
<?
include("conf.php3");
$table="annonces";
function clean_file_name($n)
{
$n = ereg_replace("( )|(/)|(:)|(')","",$n);
$n = strtolower($n);
$n = strtr($n,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ',
'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn');

return $n;
}

function uploadfile($file, $dir, $max_size)
{
$fname = $file['name'];
$fname = clean_file_name($fname);
$type = $file['type'];
if (($type = 'image/gif') and ($type != 'image/jpg') and ($type != 'image/jpeg') and ($type != 'image/png'))
{
$fname = '';
echo '<p><b>Ce fichier n\'est probablement pas un fichier image !</b><p></p>';
return;
}
$size = $file['size'];
if($size > $max_size * 1024)
{
$fname = '';
echo '<p><b>Fichier trop volumineux '.$max_size.' Ko maximun !</b></p>';
return;
}
$destfile = $dir.$fname;
// trouver un nouveau nom au fichier si il existe deja
$fname2 = '';
$i = 1;
while (file_exists($destfile)) {
$fname2 = $i.'_'.$fname;
$destfile = $dir.$fname2;
$i++;
}

si $fname2 a ete initialisŽ
if ($fname2) {
//$fname = $fname2;
}

// deplacer le fichier temp
$temp = $file['tmp_name'];
if (!move_uploaded_file($temp, $destfile)) {
echo '<p><b>Problème au moment du transfert !</b></p>';
$fname = '';
}
return $fname;
}



MYSQL_CONNECT($serveur,$login,$pass);


mysql_select_db("$base");

$time=time();
$query="insert into $table values ('0', '$nom', '$auteur', '$email', '$contenu', '$rubrique', '$telephone', '$time', '$userfile')";
$requete = mysql_db_query($base, $query);

$userfile = $HTTP_POST_FILES['userfile'];
echo $userfile;

if ($userfile)
{
// dossier d'upload, chemin relatif ne pas oublier le / à la fin
$upload_dir = '../image/';
// appel de la fonction upload
$docload = uploadfile($userfile, $upload_dir, 15);
if ($docload != ''){
echo '<p><b>Tansfert OK !<br>sous le nom '.$docload.'</b></p>';
}
}

echo "<font face='Arial'><b>Votre annonce a été ajoutée</b></font><br><br>
<br> <br> <center><font face='Arial' size='1'><a href='annonces.html'>Visualiser les annonces</a> - </font></center>";

/*mysql_free_result($result);*/
MYSQL_CLOSE();
?>
</center></table></b>
</body>
</html>


moi les principaux problemes que je rencontre sont au niveau de du format de l'image ainsi que pour le code $userfile = $HTTP_POST_FILES['userfile'];

nos pauvres yeux fatigués :(

Posté : 02 juin 2005, 11:05
par mere-teresa
Veuillez prendre la peine de créer un message clair et concis.
N'hésitez pas à utiliser les balises

Code : Tout sélectionner

et [php] afin de rendre l'affichage de votre code lisible et compréhensible par tous.[/color][/b] De plus, prenez le temps de bien rédiger votre message afin d'y inclure le plus de détails possibles. Les messages du style "ça marche pas" n'aident d'aucune façon la résolution du problème. Question précise, réponse précise! L'inverse est aussi valable : Question de mer**, réponse de mer**. [/quote] [url]http://www.phpfrance.com/forums/voir_sujet-46.php[/url]

Posté : 02 juin 2005, 11:39
par Cyrano
dentafas, est-ce que ce serait trop demander d'éditer ton message et d'encadrer le code avec les balises [ PHP ] ou [ Code ] ? Tu demandes un coup de main, pas de problème, mais penses-tu sérieusement qu'on a envie de lire du code sans indentation ni coloration syntaxique ?

Les boutons [ PHP ] ou [ Code ] sont juste au dessus de la fenêtre de saisie du message, ça prend deux clics de souris, un avant et un après le code, voire un seul clic si tu sélectionnes le code et que tu cliques sur le bouton. Et si la souris demande un effort trop violent, il y a même des raccourcis clavier, Alt + C pour [ Code ] ou Alt + X pour [ PHP ]

Merci.

Posté : 02 juin 2005, 11:45
par dentafas

Code : Tout sélectionner

<html> <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> <title>Ajout de votre annonce</title> </head> <body> <b> <table border="0" cellpadding="4" cellspacing="0" width="800" height="100%" bgcolor="white"> <tr> <td valign="top"> <center> <br> <? include("conf.php3"); $table="annonces"; function clean_file_name($n) { $n = ereg_replace("( )|(/)|(|(')","",$n); $n = strtolower($n); $n = strtr($n,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ', 'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn'); return $n; } function uploadfile($file, $dir, $max_size) { $fname = $file['name']; $fname = clean_file_name($fname); $type = $file['type']; if (($type = 'image/gif') and ($type != 'image/jpg') and ($type != 'image/jpeg') and ($type != 'image/png')) { $fname = ''; echo '<p><b>Ce fichier n\'est probablement pas un fichier image !</b><p></p>'; return; } $size = $file['size']; if($size > $max_size * 1024) { $fname = ''; echo '<p><b>Fichier trop volumineux '.$max_size.' Ko maximun !</b></p>'; return; } $destfile = $dir.$fname; // trouver un nouveau nom au fichier si il existe deja $fname2 = ''; $i = 1; while (file_exists($destfile)) { $fname2 = $i.'_'.$fname; $destfile = $dir.$fname2; $i++; } si $fname2 a ete initialisŽ if ($fname2) { //$fname = $fname2; } // deplacer le fichier temp $temp = $file['tmp_name']; if (!move_uploaded_file($temp, $destfile)) { echo '<p><b>Problème au moment du transfert !</b></p>'; $fname = ''; } return $fname; } MYSQL_CONNECT($serveur,$login,$pass); mysql_select_db("$base"); $time=time(); $query="insert into $table values ('0', '$nom', '$auteur', '$email', '$contenu', '$rubrique', '$telephone', '$time', '$userfile')"; $requete = mysql_db_query($base, $query); $userfile = $HTTP_POST_FILES['userfile']; echo $userfile; if ($userfile) { // dossier d'upload, chemin relatif ne pas oublier le / à la fin $upload_dir = '../image/'; // appel de la fonction upload $docload = uploadfile($userfile, $upload_dir, 15); if ($docload != ''){ echo '<p><b>Tansfert OK !<br>sous le nom '.$docload.'</b></p>'; } } echo "<font face='Arial'><b>Votre annonce a été ajoutée</b></font><br><br> <br> <br> <center><font face='Arial' size='1'><a href='annonces.html'>Visualiser les annonces</a> - </font></center>"; /*mysql_free_result($result);*/ MYSQL_CLOSE(); ?> </center></table></b> </body> </html> moi les principaux problemes que je rencontre sont au niveau de du format de l'image ainsi que pour le code $userfile = $HTTP_POST_FILES['userfile'];
voila

Posté : 02 juin 2005, 11:46
par dentafas
<html> 

<head> 
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> 

<title>Ajout de votre annonce</title> 

</head> 
<body> 

<b> 
<table border="0" cellpadding="4" cellspacing="0" width="800" height="100%" bgcolor="white"> 
<tr> 
<td valign="top"> 
<center> 
<br> 
<? 
include("conf.php3"); 
$table="annonces"; 
function clean_file_name($n) 
{ 
$n = ereg_replace("( )|(/)|(|(')","",$n); 
$n = strtolower($n); 
$n = strtr($n,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ', 
'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn'); 

return $n; 
} 

function uploadfile($file, $dir, $max_size) 
{ 
$fname = $file['name']; 
$fname = clean_file_name($fname); 
$type = $file['type']; 
if (($type = 'image/gif') and ($type != 'image/jpg') and ($type != 'image/jpeg') and ($type != 'image/png')) 
{ 
$fname = ''; 
echo '<p><b>Ce fichier n\'est probablement pas un fichier image !</b><p></p>'; 
return; 
} 
$size = $file['size']; 
if($size > $max_size * 1024) 
{ 
$fname = ''; 
echo '<p><b>Fichier trop volumineux '.$max_size.' Ko maximun !</b></p>'; 
return; 
} 
$destfile = $dir.$fname; 
// trouver un nouveau nom au fichier si il existe deja 
$fname2 = ''; 
$i = 1; 
while (file_exists($destfile)) { 
$fname2 = $i.'_'.$fname; 
$destfile = $dir.$fname2; 
$i++; 
} 

si $fname2 a ete initialisŽ 
if ($fname2) { 
//$fname = $fname2; 
} 

// deplacer le fichier temp 
$temp = $file['tmp_name']; 
if (!move_uploaded_file($temp, $destfile)) { 
echo '<p><b>Problème au moment du transfert !</b></p>'; 
$fname = ''; 
} 
return $fname; 
} 



MYSQL_CONNECT($serveur,$login,$pass); 


mysql_select_db("$base"); 

$time=time(); 
$query="insert into $table values ('0', '$nom', '$auteur', '$email', '$contenu', '$rubrique', '$telephone', '$time', '$userfile')"; 
$requete = mysql_db_query($base, $query); 

$userfile = $HTTP_POST_FILES['userfile']; 
echo $userfile; 

if ($userfile) 
{ 
// dossier d'upload, chemin relatif ne pas oublier le / à la fin 
$upload_dir = '../image/'; 
// appel de la fonction upload 
$docload = uploadfile($userfile, $upload_dir, 15); 
if ($docload != ''){ 
echo '<p><b>Tansfert OK !<br>sous le nom '.$docload.'</b></p>'; 
} 
} 

echo "<font face='Arial'><b>Votre annonce a été ajoutée</b></font><br><br> 
<br> <br> <center><font face='Arial' size='1'><a href='annonces.html'>Visualiser les annonces</a> - </font></center>"; 

/*mysql_free_result($result);*/ 
MYSQL_CLOSE(); 
?> 
</center></table></b> 
</body> 
</html> 


moi les principaux problemes que je rencontre sont au niveau de du format de l'image ainsi que pour le code $userfile = $HTTP_POST_FILES['userfile'];



désolé pour le coup d'avant

Posté : 02 juin 2005, 12:03
par Cyrano
Fais attention, dans ton code, tu utilises une variable $file alors que, si je suis bien ton code, ça devrait être $_FILES.

Relis le tuto sur l'upload de fichiers

Posté : 02 juin 2005, 14:16
par dentafas
j'ai remplacer par $_FILES mais ceci ne change rien j'ai toujours le meme message d'erreur:

Notice: Undefined index: userfile in c:\program files\easyphp1-8\www\ajout.php3 on line 83


la ligne 83 c'est:
$userfile = $HTTP_POST_FILES['userfile'];

Posté : 02 juin 2005, 14:19
par mere-teresa
Comment se nomme ton input ?
Erreurs PHP

Posté : 02 juin 2005, 14:36
par dentafas
désolé mere teresa mais je ne comprend pas ta question ques que tu entend par comment se nomme ton input ?

Posté : 02 juin 2005, 14:57
par Cyrano
<input type="text" name="?????">

Posté : 02 juin 2005, 15:06
par capou
Moi j'ai juste un pb avec la taille de la photo.
Si je mets par exemple 100000 en taille_max, mon code ne me sort pas le msg d'erreur "Votre fichier doit faire moins de 100Ko". Il réagit comme si la photo avait bien été uploadé.
Mais elle n'est quand meme pas dans mon répertoire.

Je vous donne mon code au cas ou:
<?php

if(isset($_FILES['photo']))
{
  // params
  unset($erreur);
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 100000;
  
  // 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 !';  
  }
  
  if( filesize($_FILES['photo']['tmp_name']) > $taille_max)
  {
    $erreur = 'Votre fichier doit faire moins de 100Ko !';
  }
  // copie du fichier
  if(!isset($erreur))
  {
    $dest_fichier = basename($_FILES['photo']['name']);
	$dest_dossier = ".foto/".$dest_fichier;
    // formatage nom fichier
    // enlever les accents
    $dest_fichier = strtr($dest_fichier, '¿¡¬?ƒ?«»… ÀÃÕŒœ“”‘’÷Ÿ/€‹›‡·‚„‰ÂÁËÈÍÎÏÌÓÔ?ÚÛÙ?ˆ<breve>??¸´´<caron>', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    // remplacer les caracteres autres que lettres, chiffres et point par _
    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
    // copie du fichier
    move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier);
  }
}

?>

Code : Tout sélectionner

<html> <body> <!-- Erreur ? --> <?php if(isset($erreur)){ echo '<p>', $erreur ,'</p>'; } ?> <!-- Formulaire --> <!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" --> <form method="POST" action="30.php" enctype="multipart/form-data"> <!-- Limiter la taille des fichiers ‡ 500Ko --> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <fieldset> <legend>Envoi de fichiers</legend> <!-- champs d'envoi de fichier, de type file --> <p><label for="photo">Photo :</label><input type="file" name="photo" /></p> <p><label for="photo_2"></label><!-- bouton d'envoi --> </p> <p> <input type="submit" name="envoi" value="Envoyer les fichiers" /> </p> </fieldset> </form> </body> </html>

Posté : 02 juin 2005, 15:10
par mere-teresa
Oui apparemment, il ne connaît pas de case de tableau (PHP) avec $_POST['userfile'], aurais-tu nommé ton <input> (HTML) autrement que 'userfile' ?

Par exemple dans le tuto, c'est :

Code : Tout sélectionner

<input type="file" name="photo" />

Posté : 02 juin 2005, 15:10
par Cyrano
normal: remplace
if( filesize($_FILES['photo']['tmp_name']) > $taille_max) 
Par
if($_FILES['photo']['size'] > $taille_max)