PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#26 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

bon bah désolé pour tout ca en fait, c'était une mauvaise logique de ma part... je teste si le champ est vide... et apres dans la fonction meme si il est vide je l'envoie via un move_uploaded_file etc... donc forcément. Merci en tout cas pour vos réponses ! smile

#27 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

merci de ton conseil...  pourrais tu etre plus precis ? j'ai essayé ca et ca ne marche toujours pas... je nage
[code = php]
if (isset($_FILES['image'],$_FILES['image']['name'])) {
if (empty($_FILES['image'])) { $lienimagemodif = $_SESSION['lienimage']; }
else {
$taille_max = 20000000; // taille limitée à 20 Mo - A voir avec le param max_file_size du serveur
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/'; // realpath du dossier de l'image a parametrer
$typeimage = array("image/png", "image/x-png", "image/jpeg", "image/jpg", "image/pjpg", "image/pjpeg"); // types d'images autorisées
if ($_FILES['image']['size'] > $taille_max)
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !<br /><em>The file must be a jpg or png image less than 20 Mo size/weight !</em></span>"; }
elseif (!in_array($_FILES['image']['type'], $typeimage))
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpg (ou jpeg) ou png !<br /><em>The file type must be jpg (or jpeg) or png !</em></span>"; }
}
}
[/code]

#28 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

Parlé trop vite . Marche pas non plus avec empty(). Peut etre est-ce mal écrit ? Toujours la meme erreur, a l'envoi du formulaire, une valeur vide est envoyée via le champ file "image"... et donc erreur de type d'image autorisés.


if (empty($_FILES['image'])) { $lienimagemodif = $_SESSION['lienimage']; }
else { // ici j'ai aussi essayé avec elseif (!empty($_FILES['image']))
$taille_max = 20000000;
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/';
$typeimage = array("image/png", "image/x-png", "image/jpeg", "image/jpg", "image/pjpg", "image/pjpeg");
if ($_FILES['image']['size'] > $taille_max)
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !<br /><em>The file must be a jpg or png image less than 20 Mo size/weight !</em></span>"; }
elseif (!in_array($_FILES['image']['type'], $typeimage))
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpg (ou jpeg) ou png !<br /><em>The file type must be jpg (or jpeg) or png !</em></span>"; }
}
 

#29 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

Merci ! donc c'etait un probleme d'ignorance de ma part des fonctions php:rolleyes:. Je me coucherai moins bete ce soir. Merci encore wink

#30 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

euh non c'est pas ca le probleme... ce qui ne marche pas c'est que si le champ file "image" est vide il est quand meme envoyé, malgré le contrôle :
[code php]
if (isset($_FILES['image'])) {
$taille_max = 20000000; // taille limitée à 20 Mo
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/';
$typeimage = array("image/png", "image/x-png", "image/jpeg", "image/jpg", "image/pjpg", "image/pjpeg", ); // types d'images autorisées
if ($_FILES['image']['size'] > $taille_max)
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !<br /><em>The file must be a jpg or png image less than 20 Mo size/weight !</em></span>"; }
elseif (!in_array($_FILES['image']['type'], $typeimage))
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpg (ou jpeg) ou png !<br /><em>The file type must be jpg (or jpeg) or png !</em></span>"; }
}
else { $lienimagemodif = $_SESSION['lienimage']; }
[/code]

#32 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

Salut,
je n'ouvre pas un nouveau topic pour mon nouveau probleme, mais je te remercie, grace a toi le probleme ci-dessus est réglé.
Maintenant je suis de nouveau bloqué... Je m'explique :
Je propose un formulaire de modification d'une actualité. Le formulaire est affiché dynamiquement, il va chercher les données dans une table. Una ctualité est composée de 1 image + 4 champs texte.
Probleme : si le champ file pour remplacer l'image n'est pas renseigné, le formulaire envoie quand meme la donnée vide et du coup, comme evidemment le "fichier" (vide) n'est pas une image, le message d'erreur disant que ce n'est pas un format autorisé apparait.
J'ai fait un var_dump pour voir ce que le $_FILE contenanit et donc il envoie bien un $_FILE vide.
voila le code :
[code:php]
function modifyactus()
{
$id = $_GET['id'];
$date = date('d/m/Y');
$datecreation = "$date";
$statut = $_POST['statut'];
if ($_POST['texteFR']=="") { $erreurtextFR = "<span class='warning'>Le champ doit etre rempli !</span>"; }
else { $texteFR = str_replace("\r\n","<br />",$_POST['texteFR']); $_SESSION['texteFR'] = $_POST['texteFR']; }
if ($_POST['texteEN']=="") { $erreurtextEN = "<span class='warning'>Le champ doit etre rempli !<br /><em>The field must be completed !</em></span>"; }
else { $texteEN = str_replace("\r\n","<br />",$_POST['texteEN']); $_SESSION['texteEN'] = $_POST['texteEN'];}
if ($_POST['altimageFR']=="") { $erreuraltFR = "<span class='warning'>Le champ doit etre rempli !</span>"; }
else { $altimageFR = $_POST['altimageFR']; $_SESSION['altimageFR'] = $_POST['altimageFR']; }
if ($_POST['altimageEN']=="") { $erreuraltEN = "<span class='warning'>Le champ doit etre rempli !<br /><em>The field must be completed !</em></span>"; }
else { $altimageEN = $_POST['altimageEN']; $_SESSION['altimageEN'] = $_POST['altimageEN']; }

/* Ci-dessous ca ne marche pas. J'ai essayé avec if ($_FILES['images']!=""), essayé en inversant la condition : if (!isset($_FILES['image'])) if ($_FILES['image']==""), ... ca marche pas.
Le formulaire poste le contenu du champ file meme si celui-ci est vide. Et donc forcement ca génere une erreur de type d'image. */

if (isset($_FILES['image'])) {
$taille_max = 20000000; // taille limitée à 20 Mo
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/';
$typeimage = array("image/png", "image/x-png", "image/jpeg", "image/jpg", "image/pjpg", "image/pjpeg", ); // types d'images autorisées
if ($_FILES['image']['size'] > $taille_max)
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !<br /><em>The file must be a jpg or png image less than 20 Mo size/weight !</em></span>"; }
elseif (!in_array($_FILES['image']['type'], $typeimage))
{ $erreurimg = "<span class='warning'>L&apos;image doit etre un fichier jpg (ou jpeg) ou png !<br /><em>The file type must be jpg (or jpeg) or png !</em></span>"; }
}
else { $lienimagemodif = $_SESSION['lienimage']; }

// Ci-dessous le reste de la fonction qui marche bien.

if ((!isset($erreurimg))&&(!isset($erreuraltFR))&&(!isset($erreuraltEN))&&(!isset($erreurtextFR))&&(!isset($erreurtextEN)))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimagemodif = "images/actualites/$dest_fichier";
// Resize
$imgaredim="/homez.325/meretmed/www/webdev/standis/images/actualites/".$dest_fichier; // realpath du dossier de l'image a parametrer

$img_size = getimagesize($imgaredim);
$W_Src = $img_size[0];
$H_Src = $img_size[1];

$W_max = 150;

$W = $W_max;
$H = $W * ($H_Src / $W_Src);         

$size = getimagesize($imgaredim);

if (($size['mime']=='image/jpeg') || ($size['mime']=='image/jpg') || ($size['mime']=='image/pjpg') || ($size['mime']=='image/pjpeg')) {
$img_big = imagecreatefromjpeg($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagejpeg($img_mini,$imgaredim);
}

elseif (($size['mime']=='image/png') || ($size['mime']=='image/x-png')) {
$img_big = imagecreatefrompng($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H)
or   $img_mini = imagecreate($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagepng($img_mini,$imgaredim);
}
//if (isset($lienimagemodif)) { $clause=",lienimage='$lienimagemodif'"; } else { $clause=""; }

require "cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
   
$query = "UPDATE actualites SET texteFR='$texteFR',texteEN='$texteEN',lienimage='$lienimagemodif',altimageFR='$altimageFR',altimageEN='$altimageEN',datecreation='$datecreation',statut='$statut' WHERE rang='$id'";
mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());

echo "<span class='success'>Les modifications ont été enregistrées avec succès.</span>";

mysql_close($db);
return (0);
}
else  {

echo var_dump ($_FILES); // avec ca je vois que le contenu $_FILES['image'] est envoyé meme si le champ file "image" est vide
if (isset($erreurimg)) echo $erreurimg; // et donc là il m'affiche l'erreur $erreurimg qui correspond au mauvais type d'image
elseif (isset($erreuraltFR)) echo $erreuraltFR;
elseif (isset($erreuraltEN)) echo $erreuraltEN;
elseif (isset($erreurtextEN)) echo $erreurtextEN;
elseif (isset($erreurtextFR)) echo $erreurtextFR;
else echo "ya une couille dans le potage;";
}
}[/code]

#33 Re : Forum Général PHP » controle type mime » 11-10-2010 16:14:55

Merci millie fois. Avec ta solution, ca marche.
Donc je repose la fonction qui marche au cas ou ca puisse servir a d'autres ...

<?php
function addactus()
{
$date = date('d/m/Y');
$datecreation = "$date";
if (isset($_POST['texteFR'])) { $texteFR = str_replace("\r\n","<br />",$_POST['texteFR']); }
if (isset($_POST['texteEN'])) { $texteEN = str_replace("\r\n","<br />",$_POST['texteEN']); }
if (isset($_POST['altimageFR'])) { $altimageFR = $_POST['altimageFR']; }
if (isset($_POST['altimageEN'])) { $altimageEN = $_POST['altimageEN']; }

if (isset($_FILES['image']))
{
$taille_max = 20000000; // taille limitée à 20 Mo - A voir avec le param max_file_size du serveur
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/'; // realpath du dossier de l'image a parametrer
$typeimage = array("image/png", "image/x-png", "image/jpeg", "image/jpg", "image/pjpg", "image/pjpeg", );

if ($_FILES['image']['size'] > $taille_max)
{ $erreur = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !</span>"; }
elseif (!in_array($_FILES['image']['type'], $typeimage))
{ $erreur = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png !</span>"; }

if (!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
// Resize
$imgaredim="/homez.325/meretmed/www/webdev/standis/images/actualites/".$dest_fichier; // realpath du dossier de l'image a parametrer

$img_size = getimagesize($imgaredim);
$W_Src = $img_size[0];
$H_Src = $img_size[1];

$W_max = 150;

$W = $W_max;
$H = $W * ($H_Src / $W_Src);        

$size = getimagesize($imgaredim);

if (($size['mime']=='image/jpeg') || ($size['mime']=='image/jpg') || ($size['mime']=='image/pjpg') || ($size['mime']=='image/pjpeg')) {
$img_big = imagecreatefromjpeg($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagejpeg($img_mini,$imgaredim);
}

elseif (($size['mime']=='image/png') || ($size['mime']=='image/x-png')) {
$img_big = imagecreatefrompng($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H)
or $img_mini = imagecreate($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagepng($img_mini,$imgaredim);
}
require "cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
   
$query = "INSERT INTO actualites (texteFR,texteEN,lienimage,altimageFR,altimageEN,datecreation,statut) VALUES('$texteFR','$texteEN','$lienimage','$altimageFR','$altimageEN','$datecreation','1')";
mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());

echo "<span class='success'>Votre actualité a été publiée avec succès.</span>";

mysql_close($db);
return (0);
}
else  {
echo $erreur;
$lienimage = "";
}
}
}
?>

#34 Re : Forum Général PHP » controle type mime » 11-10-2010 16:14:55

euh... la deuxieme fonction n'est pas a prendre en compte... petite erreur de copier-coller
C'est réparé et colorisé

MK

#35 Re : Forum Général PHP » controle type mime » 11-10-2010 16:14:55

Oui je vais tester ca !
Bon, j'ai fait du debug et j'avance... un peu. Mais cette verification de type mime me pose encore des problemes. Voila le code de ma fonction complete. J'ai veriufié et la gestion d'erreur de taille fonctionne. Par contre avec ce code, j'ai toujours l'erreur de type mime, c'est a dire qu'aucun fichier ne passe. J'ai mis des !== mais je suis pas sur...

function addactus()
{
$date = date('d/m/Y');
$datecreation = "$date";
if (isset($_POST['texteFR'])) { $texteFR = str_replace("\r\n","<br />",$_POST['texteFR']); }
if (isset($_POST['texteEN'])) { $texteEN = str_replace("\r\n","<br />",$_POST['texteEN']); }
if (isset($_POST['altimageFR'])) { $altimageFR = $_POST['altimageFR']; }
if (isset($_POST['altimageEN'])) { $altimageEN = $_POST['altimageEN']; }

if (isset($_FILES['image']))
{
$taille_max = 20000000; // taille limitée à 20 Mo - A voir avec le param max_file_size du serveur
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/'; // realpath du dossier de l'image a parametrer

if ($_FILES['image']['size'] > $taille_max)
{ $erreur = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !</span>"; }
elseif (($_FILES['image']['type'] !== "image/png") || ($_FILES['image']['type'] !== "image/x-png") || ($_FILES['image']['type'] !== "image/jpeg") || ($_FILES['image']['type'] !== "image/jpg") || ($_FILES['image']['type'] !== "image/pjpg") || ($_FILES['image']['type'] !== "image/pjpeg"))
{ $erreur = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png !</span>"; }

if (!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
// Resize
$imgaredim="/homez.325/meretmed/www/webdev/standis/images/actualites/".$dest_fichier; // realpath du dossier de l'image a parametrer

$img_size = getimagesize($imgaredim);
$W_Src = $img_size[0];
$H_Src = $img_size[1];

$W_max = 150;

$W = $W_max;
$H = $W * ($H_Src / $W_Src);        

$size = getimagesize($imgaredim);

if (($size['mime']=='image/jpeg') || ($size['mime']=='image/jpg') || ($size['mime']=='image/pjpg') || ($size['mime']=='image/pjpeg')) {
$img_big = imagecreatefromjpeg($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagejpeg($img_mini,$imgaredim);
}

elseif (($size['mime']=='image/png') || ($size['mime']=='image/x-png')) {
$img_big = imagecreatefrompng($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H)
or $img_mini = imagecreate($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagepng($img_mini,$imgaredim);
}
}
}
else  {
$lienimage = "";
}

if (!isset($erreur)) {

require "cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
   
$query = "INSERT INTO actualites (texteFR,texteEN,lienimage,altimageFR,altimageEN,datecreation,statut) VALUES('$texteFR','$texteEN','$lienimage','$altimageFR','$altimageEN','$datecreation','1')";
mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());

echo "<span class='success'>Votre actualité a été publiée avec succès.</span>";

mysql_close($db);
return (0);
}
else echo $erreur;
}

}

#36 Re : Forum Général PHP » controle type mime » 11-10-2010 16:14:55

Merci de ta réponse mais...

tu veux dire si j'ecris ca :

<?php
if (($_FILES['image']['size'] > $taille_max) && ($_FILES['image']['type'] != "image/png") && ($_FILES['image']['type'] != "image/x-png") && ($_FILES['image']['type'] != "image/jpeg") && ($_FILES['image']['type'] != "image/jpg") && ($_FILES['image']['type'] != "image/pjpg") && ($_FILES['image']['type'] != "image/pjpeg"))
?>

Ca veut dire : si "la taille est sup à 20 Mo" ET QUE "le type mime n'est pas jpeg" ET QUE ""...
Donc si j'ai un fichier jpeg ou png qui fait une taille superieure a 20 Mo l'erreur ne sera pas gérée. Alors qu'avec des || je gère chaque cas. Non ? J'ai faux ?

Et puis ca ne me dit pas pourquoi les controles marchent pas. Je viens encore de tester et ca ne marche effectivement pas. Si je les enleve, tout le script s'execute bien. Sinon, non seulement n'importe quel type de fichier est uploadé, mais en plus, le lien dans la table ne s'écrit pas... heeelp !

#37 Forum Général PHP » controle type mime » 11-10-2010 16:14:55

fanch75
Réponses : 6

Bonjour,
j'ai qques problemes avec un script d'upload d'image.
Mes controles pour verifier que c'est bien une image qui est uploadée via mon formulaire ne fonctionnent pas. Du coup, n'importe quel fichier peut etre uploadé, ce qui est évidemment hors de question...

Voici le code, pourtant vraiment simple :

<?php
if (isset($_FILES['image']))
{
$taille_max = 20000000; // taille limitée à 20 Mo
$dest_dossier = '/images/actualites/'; // realpath du dossier de l'image

// gestion des erreurs, c'est ca qui ne marche pas
if (($_FILES['image']['size'] > $taille_max) || ($_FILES['image']['type'] != "image/png") || ($_FILES['image']['type'] != "image/x-png") || ($_FILES['image']['type'] != "image/jpeg") || ($_FILES['image']['type'] != "image/jpg") || ($_FILES['image']['type'] != "image/pjpg") || ($_FILES['image']['type'] != "image/pjpeg"))
{
$erreur = "<span class='warning'>L&apos;image doit etre un fichier jpeg ou png d&apos;un poids inférieur à 20 Mo !</span>";
}
//

if (!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
}
}
else lienimage = "";

?>

Quelle est l'erreur ? et sinon, avez-vous une autre solution que de controler les type mime pour m'assurer que c'est bien une image jpg ou png de moins de 20 Mo qui est uploadée ? Merci

#38 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

J'ai suivi ton conseil et fait un var_dump pour voir ce que le $_FILE contenait et voila ce qu'il m'a retourné avec une image test.jpg

array(1) { ["image"]=>  array(5) { ["name"]=>  string(8) "test.jpg" ["type"]=>  string(10) "image/jpeg" ["tmp_name"]=>  string(22) "/var/log/tmp/phpNuSKYw" ["error"]=>  int(0) ["size"]=>  int(50732) } }

je ne sais pas comment interprété ca ? Apparemment il voit bien le fichier ? non ?

#39 Re : Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

Salut,
OK pour les S_POST...
OK pour le unset ($erreur)
pour le !@getimagesize, c'est un controle de plus... vu que le controle sur les types mime controlent... les mime type. En fait logiquement je c=devrais mettre ce controle en premier.
Pour le realpath, oui dans mon code j'ai mon "vrai" realpath

Et non, je n'ai pas de message d'erreur, sauf un qui me dit attention division par zero à la ligne 57 (ligne 57 dans le code posté ci-dessus), ce qui est normal, vu que d'image il n'y a point...

Donc merci de ton message, ca va me permettre de corriger les petites maladresses de mon code, mais sur l'essentiel, je ne comprends toujours pas. Une autre idée ;-) ?

#40 Forum Général PHP » Pb upload d'une image » 13-10-2010 13:14:09

fanch75
Réponses : 14

Bonjour,
mon code pour uploader une image ne fonctionne pas. Je n'arrive pas a comprendre mon erreur. Le principe : j'uploade une image via un formulaire, le fichier est déplacé dans un répertoire, j'insère le lien correspondant dans une table.
Quand je teste, rien ne se passe : l'image n'est pas uploadée, le lien n'est pas inséré.

La fonction (dans un fichier fonctions.php appelé par la page) :

<?php
function addactus()
{

$date = date('d/m/Y');
$datecreation = "$date";
$texteFR = str_replace("\r\n","<br />",$_POST['texteFR']);
$texteEN = str_replace("\r\n","<br />",$_POST['texteEN']);
$altimageFR = $_POST['altimageFR'];
$altimageEN = $_POST['altimageEN'];

if (isset($_FILES['image']))
{
unset($erreur);

$taille_max = 20000000; // taille limitée à 20 Mo
$dest_dossier = '/images/actualites/'; // realpath du dossier de l'image

if (($_FILES['image']['type'] != 'image/png') || ($_FILES['image']['type'] != 'image/x-png') || ($_FILES['image']['type'] != 'image/jpeg') || ($_FILES['image']['type'] != 'image/jpg') || ($_FILES['image']['type'] != 'image/pjpg') || ($_FILES['image']['type'] != 'image/pjpeg'))
{
$erreur = "<span class='warning'>Veuillez sélectionner un fichier de type jpeg ou png !</span>";
}
elseif ($_FILES['image']['type'] == 'image/bmp')
{
$erreur = "<span class='warning'>Le format bitmap (.bmp) n&apos;est pas accepté. Convertissez votre image en jpg ou en png avant de l&apos;envoyer, merci.</span>";
}
elseif ($_FILES['image']['size'] > $taille_max)
{
$erreur = "<span class='warning'>L&apos;image doit avoir un poids inférieur à 20 Mo !</span>";
}
elseif(!@getimagesize($_FILES['image']['tmp_name']))
{
$erreur = "<span class='warning'>Vous avez tenté d&apos;envoyer un fichier qui n&apos;est pas une image !</span>";
}

if(!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
}

// Resize
$imgaredim="/images/actualites/".$dest_fichier; // realpath du dossier de l'image

$img_size = getimagesize($imgaredim);
$W_Src = $img_size[0];
$H_Src = $img_size[1];

$W_max = 150;

$W = $W_max;
$H = $W * ($H_Src / $W_Src);        

$size = getimagesize($imgaredim);

if (($size['mime']=='image/jpeg') || ($size['mime']=='image/jpg') || ($size['mime']=='image/pjpg') || ($size['mime']=='image/pjpeg')) {
$img_big = imagecreatefromjpeg($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagejpeg($img_mini,$imgaredim);
}

elseif (($size['mime']=='image/png') || ($size['mime']=='image/x-png')) {
$img_big = imagecreatefrompng($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H)
or   $img_mini = imagecreate($W, $H);

imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagepng($img_mini,$imgaredim);
}

}
else  { $lienimage = ""; }

require "cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
   
$query = "INSERT INTO actualites (texteFR,texteEN,lienimage,altimageFR,altimageEN,datecreation,statut) VALUES('$texteFR','$texteEN','$lienimage','$altimageFR','$altimageEN','$datecreation','1')";
mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());

echo "<span class='success'>Votre actualité a été publiée avec succès.</span>";

mysql_close($db);
return (0);
}
?>

et le formulaire :

<html>
<form action="manage-news.php?phpsessid=<?php session_id(); ?>" method="post" enctype="multipart/form-data" name="addactu" id="addactu">
    <input type="hidden" value="1" name="ojsaddactu" />
      <br />
      <label for="image">     Image (format .jpg ou .png)</label>
      <input type="file" name="image" id="image" size="66" />
      <br />
      <?php echo $erreur; ?>
      <br />
      <img src="../images/flagFR.png" alt="FR" border="0" style="float:left;" /><label for="altimageFR">Description de l'image FR</label>
      <input type="text" name="altimageFR" id="altimageFR" size="50" />
      <br />
      <br />
      <img src="../images/flagEN.png" alt="EN" border="0" style="float:left;" /><label for="altimageEN">Description de l'image EN</label>
      <input type="text" name="altimageEN" id="altimageEN" size="50" />
      <br />
      <br />
      <br />
      <img src="../images/flagFR.png" alt="FR" border="0" style="float:left;" /><label for="texteFR">Texte FR</label>
      <textarea name="texteFR" id="texteFR" cols="60" rows="5"></textarea>
      <br />
      <br />
      <img src="../images/flagEN.png" alt="EN" border="0" style="float:left;" /><label for="texteEN">Texte EN</label>
      <textarea name="texteEN" id="texteEN" cols="60" rows="5"></textarea>
      <br />
      <br />
      <input name="submit" type="submit" value="Ajouter cette actualité" />
    </form>
</html>

Merci de vos lumières !

#41 Re : Forum Général PHP » requetage / affichage » 20-04-2010 11:01:23

Merci de ta réponse. Je vais essayer ce que tu suggères. Je te tiens au courant.

#42 Forum Général PHP » requetage / affichage » 20-04-2010 11:01:23

fanch75
Réponses : 2

Bonjour,

Mon problème du jour n'est pas exactement un problème de code, mais plutot un problème de "méthode". Je veux faire un système basique de "galerie photo". Ce sont les contributeurs du site qui pourront uploader les photos et créer le nom des galeries en dessous desquelles les photos devront s'afficher dans le site.
Donc voila le principe :
Formulaire 1 : nouvelle galerie [champ texte]
-> je conserve le nom en variable de session
Formulaire 2 -> Inserer une photo [champ fichier]->OK->inserer une autre photo-> etc.
J'uploade la photo dans un dossier, j'insere dans une table le lien de la photo, et le nom de la galerie associée.

Jusqu'ici tout va bien.
Mon problème c'est l'affichage des galeries dans le site : comment faire pour afficher dans la meme page le nom de la galerie et les photos associées en dessous, et ca pour chaque galerie ? Si je fais une requete avec un while{mysql_fetch_array(requete)}, comment faire pour n'afficher qu'une seule fois le nom de la galerie ?

J'avais pensé à 2 tables liées : 1 table avec les noms de galeries, 1 autre avec les photos. Mais la encore si je fais 1 requete dans chaque table, comment faire pour afficher dans la meme page nom de la galerie + photos associées en dessous, et ca autant de fois qu'il y a de galeries ?

Merci de vos lumières.

#44 Forum Général PHP » verification de code SVP ! » 02-02-2010 14:30:50

fanch75
Réponses : 3

Bonjour à tous,

voila, j'ai un code tres tres simple et pourtant ca ne fonctionne pas. J'ai essayé de débugger ligne par ligne, et je ne vois toujours pas ce qui cloche. Ca doit etre énorme devant mes yeux pourtant ! Merci de votre aide !

C'est une fonction d'inscription à un jeu via un formulaire HTML. Seules les personnes possédant un code client dans la table mySQL sont autorisés à jouer.


function participation()
{
$_POST['codeclient']=$codeclient;
$_POST['nom']=$nom;
$_POST['prenom']=$prenom;
$_POST['email']=$email;
$dateinscription = date("d-m-Y H:i");

require "../common/cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
$query = "SELECT codeclient FROM jeu_ambassadeur WHERE codeclient='$codeclient'";
$req = mysql_query($query, $db) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
if (mysql_num_rows($req)!=1)
{
echo "Code client invalide ou inexistant";
}
else
{
$query2 = "SELECT nom FROM jeu_ambassadeur WHERE codeclient='$codeclient'";
$req2 = mysql_query($query2, $db) or die('Erreur SQL !<br>'.$query2.'<br>'.mysql_error());
if (mysql_num_rows($req2)==0)
{
$query3 = "UPDATE jeu_ambassadeur SET nom='$nom', prenom='$prenom', email='$email', dateinscription='$dateinscription' WHERE codeclient='$codeclient'";
$req3 = mysql_query($query3, $db) or die('Erreur SQL !<br>'.$query3.'<br>'.mysql_error());
echo "<span class='texte'>Votre participation est validée.</span>";
}
else { echo "Votre code client est deja utilise."; }
}
}
?>
 

Et le formulaire HTML

<form id="inscription" action="index.php" method="post" name="inscription">
                                                    <input type="hidden" name="ojsinscription" value="1" />
                                                    <span class="texte">Code client</span> <input type="text" name="codeclient" value="<? echo $_POST[codeclient]; ?>" size="10" /><br />
                                                    <br />
                                                    <table border="0" cellspacing="0" cellpadding="2">
                                                        <tr>
                                                            <td align="right" valign="middle"><span class="texte">Nom</span></td>
                                                            <td align="left" valign="middle"><input type="text" name="nom" value="<? echo $_POST[nom]; ?>" size="22" /></td>
                                                        </tr>
                                                        <tr>
                                                            <td align="right" valign="middle"><span class="texte">Prénom</span></td>
                                                            <td align="left" valign="middle"><input type="text" name="prenom" value="<? echo $_POST[prenom]; ?>" size="22" /></td>
                                                        </tr>
                                                        <tr>
                                                            <td align="right" valign="middle"><span class="texte">Email</span></td>
                                                            <td align="left" valign="middle"><input type="text" name="email" value="<? echo $_POST[email]; ?>" size="22" /></td>
                                                        </tr>
                                                    </table>
                                                     <br />
                                                    <input type="submit" name="submitButtonName" value="Envoyer" />
                                                </form>

#45 Re : Forum Général PHP » probleme avec foreach (encore !) » 14-05-2009 12:48:27

merci de ta réponse... tu as raison evidemment. Je vais essayer autre chose.

#46 Forum Général PHP » probleme avec foreach (encore !) » 14-05-2009 12:48:27

fanch75
Réponses : 2

Bonjour a tou(te)s,

voila mon probleme :
J'ai un formulaire de commande de produits. Les clients peuvent commander plusieurs produits. Chaque produit a plusieurs quantites, mais une seule quantite par produit peut etre choisie.

j'ai ensuite un formulaire "récapitulatif d'une commande" qui est généré dynamiquement, et qui va chercher des données dans une table "produits".
Ces données sont stockées dans le formulaire dans des champs cachés.
Pour simplifier j'ai 4 données importantes :
- le stock disponible pour chaque produit (données récupérées dans la table "produits")
- la quantité commandée pour chaque produit (données entrée par le client)
- la référence des produit (données récupérées dans la table "produits")
- j'opère la soustraction $donnee['stock']-$quantitecommandee pour chaque produit.

<?php
$soustraction=$donnee['stock']-$_POST[quantite_commandee_par_le_client_dans le formulaire_de_commande_a_letape_precedente];
<form>
<input type ="hidden" name="stock_disponible[]" value="$donnee[stock]">
<input type ="hidden" name="quantite_commandee[]" value="$_POST[quantite_commandee_par_le_client_dans le formulaire_de_commande_a_letape_precedente]">
<input type ="hidden" name="reference_produit[]" value="$donnee[reference_produit]">
<input type ="hidden" name="soustraction[]" value="$soustraction"></form>
?>

Lors de la validation de la commande (post du formulaire), je récupère les informations et je fais 2 opérations : 1. j'insere la commande dans une table "commandes" (pas de probleme)... et 2. je souhaite soustraire les quantités commandées du champ "stock" de la table "produits". C'est la que ca bloque. J'ai fait ca :

<?php
foreach ($_POST['soustraction'] as $row=>$value)
{
// connexion a la base et requete
$query = "UPDATE produits SET stock='$value' WHERE reference='$_POST[reference_produit]'";
$requete = mysql_query($query, $db) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
}
?>

Cela fait des heures que je m'arrache les cheveux, si vous pouvez m'aider je vous en serai tres reconnaissant ! Merci !

Pied de page des forums

Propulsé par FluxBB