dépot de petites annonces avec photo

Eléphanteau du PHP | 10 Messages

02 juin 2005, 09:00

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

Mammouth du PHP | 19672 Messages

02 juin 2005, 09:25

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

Eléphanteau du PHP | 10 Messages

02 juin 2005, 11:02

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'];
que la forcccceeee oui la forcccceee soit avec ......... moi

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 juin 2005, 11:05

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]

Mammouth du PHP | 19672 Messages

02 juin 2005, 11:39

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

Eléphanteau du PHP | 10 Messages

02 juin 2005, 11:45

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
que la forcccceeee oui la forcccceee soit avec ......... moi

Eléphanteau du PHP | 10 Messages

02 juin 2005, 11:46

<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
que la forcccceeee oui la forcccceee soit avec ......... moi

Mammouth du PHP | 19672 Messages

02 juin 2005, 12:03

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

Eléphanteau du PHP | 10 Messages

02 juin 2005, 14:16

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'];
que la forcccceeee oui la forcccceee soit avec ......... moi

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 juin 2005, 14:19

Comment se nomme ton input ?
Erreurs PHP
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 10 Messages

02 juin 2005, 14:36

désolé mere teresa mais je ne comprend pas ta question ques que tu entend par comment se nomme ton input ?
que la forcccceeee oui la forcccceee soit avec ......... moi

Mammouth du PHP | 19672 Messages

02 juin 2005, 14:57

<input type="text" name="?????">
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 27 Messages

02 juin 2005, 15:06

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>

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 juin 2005, 15:10

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" />

Mammouth du PHP | 19672 Messages

02 juin 2005, 15:10

normal: remplace
if( filesize($_FILES['photo']['tmp_name']) > $taille_max) 
Par
if($_FILES['photo']['size'] > $taille_max) 
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: