Gestion des erreurs dans un formulaire avec UPDATE et UPLOAD - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Gestion des erreurs dans un formulaire avec UPDATE et...

Par trajex -  7 reponses -  Le 17/06/2010 -  Flux RSS - 

Bonjour,

Ca fait un bon bout de temps que j'essaie d'incorporer un script a mon formulaire qui met a jour  des donnees personnelles et une photo avec les criteres suivants

le upload de la photo n'est pas obligatoire, je m'explique : le membre vient sur la page pour modifier disons son no de telephone mais désire garder la meme photo, alors le script ne doit pas mettre a jour sa photo pour ne pas écraser l'ancienne dans la BD.

alors , je gere la situatuion de la facon suivante

if ($erreur == false) {
$photo = '';
if (isset($fichier) && $erreur_img == false) {
$photo = "photo = '".mysql_real_escape_string($fichier)."', ";
}
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));

mais je dois d'abord gerer le UPLOAD FILES

pour ce qui est de gerer les erreurs généres par $_FILES, ca va bien sauf que les erreurs s'il y en a, ne s'affichent pas et le script continue jusqu'a la fin, je ne sais pas pourquoi

Aussi, je n'arrive pas a structurer parfaitement le code non plus car j'ai un parse error ici

if (isset(!in_array($extension, $extensions))) { //Si l'extension n'est pas dans le tableau
 
$erreur = true;
$msgErreur[] = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp...';
 
//echo 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp...';

et de plus , j'aimerais intéger dans les  vérifications $_POST

comme ceci

 

if (isset($_POST['nom']) && !empty($_POST['nom'])) {
$nom = $_POST['nom'];
}
else {
$erreur = true;
$msgErreur[] = 'Veuillez saisir votre nom';
}
 
if (isset($_POST['prenom']) && !empty($_POST['prenom'])) {
$nom = $_POST['prenom'];
}
else {
$erreur = true;
$msgErreur[] = 'Veuillez saisir votre prénom';
etc,,,,...

 

Alors , je serais bien content  de me faire aider un peu avec ce script plutot coriace si je peux dire

et j'ai pense vous mettre toute ma page ici afin d'avoir une meilleure idee

merci

update_voiturier.php
<?php
 
// On initialise l'action à réaliser
$action = (isset($_POST['action'])) && !empty($_POST['action']) ? $_POST['action'] : NULL;
 
switch ($action) {
case 'UPDATE_Voiturier' : // Mise à jour des données de l'utilisateur
$erreur = false;
$erreur_img = false;
 
if (isset($_FILES['photo']) && !empty($_FILES['photo'])) {
 
if ($_FILES['photo']['error'] > 0) {
switch ($_FILES['photo']['error']) {
case 1 : $msgErreur[] = 'Le fichier téléchargé excède la taille de 2 mo.';
break;
case 2 : $msgErreur[] = 'Le fichier téléchargé excède la taille MAXFILE SIZE de 200 ko';
break;
case 3 : $msgErreur[] = 'Le fichier a été que partiellement téléchargé.';
break;
case 4 : $msgErreur[] = 'Aucun fichier a été téléchargé';
break;
case 5 : $msgErreur[] = 'erreur';
break;
case 6 : $msgErreur[] = 'Un dossier temporaire est manquant';
break;
case 7 : $msgErreur[] = 'Échec de l\'ecriture du fichier sur le disque';
break;
case 8 : $msgErreur[] = 'Une extension PHP a arrété l\'envoi de fichier';
break;
 
}
if (isset(!in_array($extension, $extensions))) { //Si l'extension n'est pas dans le tableau
 
$erreur = true;
$msgErreur[] = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp...';
 
//echo 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp...';
 
}
$erreur_img = true;
 
}
else {
 
$msgErreur[] = 'Veuillez rechercher une photo';
}
 
if ($erreur_img == false) {
 
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 200000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('image/png', 'image/gif', 'image/jpg', 'image/jpeg', 'image/bmp');
//$extension = strrchr($_FILES['photo']['name'], '.');
$extension = $_FILES['photo']['type'];
$fichier = strtr($fichier, '
ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
$dossier = '../images/';
if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier) == false) {
$erreur_img = true;
}
 
}
}
else {
// Aucune image de recherchée
$erreur_img = true;
}
 
 
if ($erreur == false) {
$photo = '';
if (isset($fichier) && $erreur_img == false) {
$photo = "photo = '".mysql_real_escape_string($fichier)."', ";
}
$prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
$adresse = mysql_real_escape_string(htmlspecialchars($_POST['adresse']));
$ville = mysql_real_escape_string(htmlspecialchars($_POST['ville']));
$pays = mysql_real_escape_string(htmlspecialchars($_POST['pays']));
$province = mysql_real_escape_string(htmlspecialchars($_POST['province']));
$code_postal = mysql_real_escape_string(htmlspecialchars($_POST['code_postal']));
$telephone = mysql_real_escape_string(htmlspecialchars($_POST['telephone']));
$cellulaire = mysql_real_escape_string(htmlspecialchars($_POST['cellulaire']));
$occupation = mysql_real_escape_string(htmlspecialchars($_POST['occupation']));
$sexe = mysql_real_escape_string(htmlspecialchars($_POST['sexe']));
$annee = mysql_real_escape_string(htmlspecialchars($_POST['annee']));
$mois = mysql_real_escape_string(htmlspecialchars($_POST['mois']));
$jour = mysql_real_escape_string(htmlspecialchars($_POST['jour']));
$date_naissance = $annee . "-" . $mois . "-" . $jour;
//$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
//$password = mysql_real_escape_string(htmlspecialchars($_POST['password']))or die(mysql_error());
//$date_inscription = date('Y-m-d');
$permis_conduire = mysql_real_escape_string(htmlspecialchars($_POST['permis_conduire']));
$annee_experience = mysql_real_escape_string(htmlspecialchars($_POST['annee_experience']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']))or die(mysql_error());
 
$sql=" UPDATE gestion_voiturier
SET nom = '" . $nom . "',
prenom = '" . $prenom . "',
adresse = '" . $adresse . "',
ville = '" . $ville . "',
pays = '" . $pays . "' ,
province = ' " . $province . "',
code_postal = '" . $code_postal . "',
telephone = '" . $telephone . "',
cellulaire = '" . $cellulaire . "',
occupation = '" . $occupation . "',
sexe = '" . $sexe . "' ,
date_naissance = '" . $date_naissance . "' ,
message = '" . $message . "' ,
email = '" . $email . "',
annee_experience = '" . $annee_experience . "',
$photo
permis_conduire = '" . $permis_conduire . "'
 
WHERE membres_id = " . $_SESSION['membreID']or die(mysql_error());
 
echo $sql;
if (!mysql_query($sql))
{
die('Erreur - table gestion_voiturier: ' . mysql_error());
}
 
}
 
header( "Location: session_voiturier.php" );
break;
}
?>

 

 

 

 

 

 

Réponses apportées à cette discussion

Par Cyrano -  Le 18/06/2010 - 

Salut,

on va corriger quelques erreurs :

  1. if (isset(!in_array($extension, $extensions)))

Ça, ce n'est pas bon, à quoi te sert le isset ? Ici à rien, on le vire et on ne laisse que

  1. if (!in_array($extension, $extensions))

Ensuite ta requête SQL qui se termine par un « or die() » qui n'a strictement rien à faire là et ne peux que générer une erreur. Donc :

  1. $sql=" UPDATE gestion_voiturier SET
  2. nom = '" . $nom . "',
  3. prenom = '" . $prenom . "',
  4. adresse = '" . $adresse . "',
  5. ville = '" . $ville . "',
  6. pays = '" . $pays . "' ,
  7. province = ' " . $province . "',
  8. code_postal = '" . $code_postal . "',
  9. telephone = '" . $telephone . "',
  10. cellulaire = '" . $cellulaire . "',
  11. occupation = '" . $occupation . "',
  12. sexe = '" . $sexe . "' ,
  13. date_naissance = '" . $date_naissance . "' ,
  14. message = '" . $message . "' ,
  15. email = '" . $email . "',
  16. annee_experience = '" . $annee_experience . "',
  17. $photo
  18. permis_conduire = '" . $permis_conduire . "'
  19. WHERE membres_id = " . $_SESSION['membreID'];

Essaye déjà avec ça et reviens avec la suite s'il y a besoin ;)

 

 

 
Par trajex -  Le 18/06/2010 - 

merci beaucoup de ta réponse  Cyrano

j'ai modifier ce qui n'as pas d'affaires la comme le le isset et enlever le die MySQL error

 if (!in_array($extension, $extensions)) 

, il ne traite pas l'erreur , le script passe par dessus, j'en deduis que soit il n,est pas a la bonne place

 avez-vous une solution?

 

merci

 

  1. // On initialise l'action à réaliser
  2. $action = (isset($_POST['action'])) && !empty($_POST['action']) ? $_POST['action'] : NULL;
  3.  
  4. switch ($action) {
  5. case 'UPDATE_Voiturier' : // Mise à jour des données de l'utilisateur
  6. $erreur = false;
  7. $erreur_img = false;
  8.  
  9. if (isset($_FILES['photo']) && !empty($_FILES['photo'])) {
  10.  
  11. if ($_FILES['photo']['error'] > 0) {
  12. switch ($_FILES['photo']['error']) {
  13. case 1 : $msgErreur[] = 'Le fichier téléchargé excède la taille de 2 mo.';
  14. break;
  15. case 2 : $msgErreur[] = 'Le fichier téléchargé excède la taille MAXFILE SIZE de 200 ko';
  16. break;
  17. case 3 : $msgErreur[] = 'Le fichier a été que partiellement téléchargé.';
  18. break;
  19. case 4 : $msgErreur[] = 'Aucun fichier a été téléchargé';
  20. break;
  21. case 5 : $msgErreur[] = 'erreur';
  22. break;
  23. case 6 : $msgErreur[] = 'Un dossier temporaire est manquant';
  24. break;
  25. case 7 : $msgErreur[] = 'Échec de l\'ecriture du fichier sur le disque';
  26. break;
  27. case 8 : $msgErreur[] = 'Une extension PHP a arrété l\'envoi de fichier';
  28. break;
  29.  
  30. }
  31. if (!in_array($extension, $extensions)) { //Si l'extension n'est pas dans le tableau
  32.  
  33. $erreur_img = true;
  34. $msgErreur[] = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp...';
  35.  
  36. //echo 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp...';
  37.  
  38. }
  39. $erreur_img = true;
  40.  
  41. }
  42. else {
  43.  
  44. $msgErreur[] = 'Veuillez rechercher une photo';
  45. }
  46.  
  47. if ($erreur_img == false) {
  48.  
  49. $fichier = basename($_FILES['photo']['name']);
  50. $taille_maxi = 200000;
  51. $taille = filesize($_FILES['photo']['tmp_name']);
  52. $extensions = array('image/png', 'image/gif', 'image/jpg', 'image/jpeg', 'image/bmp');
  53. //$extension = strrchr($_FILES['photo']['name'], '.');
  54. $extension = $_FILES['photo']['type'];
  55. $fichier = strtr($fichier, '
  56. ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  57. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  58. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  59. $dossier = '../images/';
  60. if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier) == false) {
  61. $erreur_img = true;
  62. }
  63.  
  64. }
  65. }
  66. else {
  67. // Aucune image de recherchée
  68. $erreur_img = true;
  69. }

 

 
Par Cyrano -  Le 19/06/2010 - 

Il manque un bout dans ton code : où est donc définie la variable $extensions ? Tout comme la variable $extension (sans «s»)  d'ailleurs.

 

 
Par trajex -  Le 19/06/2010 - 

pourtant je les vois a la ligne 52 et 54 du code précedent juste en haut

 

 
Par Cyrano -  Le 19/06/2010 - 

Effectivement, mais donc après l'endroit où elles sont invoquées... sois logique et réfléchis à l'ordre dans lequel est exécutée chaque ligne du code ;-)

 
Par trajex -  Le 20/06/2010 - 

Merci Cyrano pour ton aide , j'ai resolu a moitie mon probleme, effectivement, les variables $extension et $esxtension etaient pas au bon endroit mais le pire c'est que la condition des extensions ne l'était pas non plus, (mal places dans les accolades)

Maintenant la condition fonctionne mais pas comme je voudrais pour la raison suivante:

etant donné que je suis dans un formulaire UPDATE, il n'est pas obligatoire de modifier sa photo donc si on modifie d'autres infos comme son telephone, etc, sans modifier sa photo, le script affiche une erreur 

 case 4 : $msgErreur[] = 'Aucun fichier a été téléchargé'; et

$msgErreur[] = ' ERREUR - Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp seulement!';

mais UPload dans la BDD quand meme les autres modifications

COMMENT ne pas compter une  $erreur_img quand il n'y a pas de photo?? voila la question....

 

moi j'ai fait ceci

mon script a jour

fonction du script upload
  1. if (!empty($_FILES['photo'])) {
  2. //if (isset($_FILES['photo']) && !empty($_FILES['photo'])) {
  3. //$extensions = array('image/png', 'image/gif', 'image/jpg', 'image/jpeg', 'image/bmp');
  4. //$extension = $_FILES['photo']['type'];
  5.  
  6.  
  7. // var_dump($extension);
  8. if ($_FILES['photo']['error'] > 0) { // de ici
  9.  
  10. switch ($_FILES['photo']['error']) {
  11. case 1 : $msgErreur[] = 'Le fichier téléchargé excède la taille de 2 mo.';
  12. break;
  13. case 2 : $msgErreur[] = 'Le fichier téléchargé excède la taille MAXFILE SIZE de 200 ko';
  14. break;
  15. case 3 : $msgErreur[] = 'Le fichier a été que partiellement téléchargé.';
  16. break;
  17. case 4 : $msgErreur[] = 'Aucun fichier a été téléchargé';
  18. break;
  19. // case 5 : $msgErreur[] = 'erreur';
  20. // break;
  21. case 6 : $msgErreur[] = 'Un dossier temporaire est manquant';
  22. break;
  23. case 7 : $msgErreur[] = 'Échec de l\'ecriture du fichier sur le disque';
  24. break;
  25. case 8 : $msgErreur[] = 'Une extension PHP a arrété l\'envoi de fichier';
  26.  
  27. $erreur_img = true;
  28. break;
  29. }
  30.  
  31. }
  32. $extensions = array('image/png', 'image/gif', 'image/jpg', 'image/jpeg', 'image/bmp');
  33. $extension = $_FILES['photo']['type'];
  34. if(!in_array($extension, $extensions)) { //Si l'extension n'est pas dans le tableau
  35.  
  36. $msgErreur[] = ' ERREUR - Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp seulement!';
  37. $erreur_img = true;
  38.  
  39. }
  40.  
  41. if ($erreur_img == false) {
  42.  
  43. $fichier = basename($_FILES['photo']['name']);
  44. $taille_maxi = 200000;
  45. $taille = filesize($_FILES['photo']['tmp_name']);
  46. //$extension = strrchr($_FILES['photo']['name'], '.');
  47. $fichier = strtr($fichier, '
  48. ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  49. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  50. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  51. $dossier = '../images/';
  52. if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier) == false) {
  53. $erreur_img = true;
  54. }
  55.  
  56. }
  57. }
  58. else {
  59. // Aucune image de recherchée
  60. $erreur_img = false;
  61. }

 

 

 

 

 
Par trajex -  Le 20/06/2010 - 

ah! ben mon cas est résolu

 merci encore Cyrano

Encore une question d'accolades!!!!!!!!!

 

Ajouter une réponse à la discussion

Seuls les membres loggués sont autorisés à poster dans les forums !