Bug dans la gestion des exceptions d'un formulaire
Barbotin
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Invité n'ayant pas de compte PHPfrance il y a 16 minutes
bonjour
voici mon problème
j'ai un formulaire html classique qui fonctionne MAIS !!
je voudrais créer des exceptions au cas où il n'y aurait pas beaucoup d'images à insérer
pour cela j'ai mis un if(isset($_FILES) autour du code
avec cela, le code est correctement inséré mais j'ai une erreur si le fichier reste vide : Erreur fatale : Erreur de valeur non détectée : Le chemin ne peut pas être vide dans /....
donc je remplace $_FILES par $_POST mais dans ce cas aucun fichier n'est mis à jour (présent ou non)
donc j'ai mis un var_dump($_POST) pour voir ce qui se passe et surprendre !! aucun $_POST['photo'] et aucun $_POST['alt'] n'apparaissent !!
question :
comment puis-je faire pour traiter une exception au cas où il n'y aurait qu'une seule photo à enregistrer sans obtenir d'erreur de copie ou d'erreur bdr ?
voici les codes :
voici le retour du var_dump($_POST)
vous ne pouvez voir aucune photo et alt apparaît
merci pour votre aide
bonjour
voici mon problème
j'ai un formulaire html classique qui fonctionne MAIS !!
je voudrais créer des exceptions au cas où il n'y aurait pas beaucoup d'images à insérer
pour cela j'ai mis un if(isset($_FILES) autour du code
avec cela, le code est correctement inséré mais j'ai une erreur si le fichier reste vide : Erreur fatale : Erreur de valeur non détectée : Le chemin ne peut pas être vide dans /....
donc je remplace $_FILES par $_POST mais dans ce cas aucun fichier n'est mis à jour (présent ou non)
donc j'ai mis un var_dump($_POST) pour voir ce qui se passe et surprendre !! aucun $_POST['photo'] et aucun $_POST['alt'] n'apparaissent !!
question :
comment puis-je faire pour traiter une exception au cas où il n'y aurait qu'une seule photo à enregistrer sans obtenir d'erreur de copie ou d'erreur bdr ?
voici les codes :
<?php require_once("init.inc.php"); //--- ENREGISTREMENT PRODUIT ---// if(!empty($_POST)) var_dump($_POST); { if ( isset($_FILES['photo1'])) { $photo_bdd = ""; $photo_dossier = ""; $v=1; $prepa_name1 = substr($_POST['titre'], 0, 45); $name1= $prepa_name1 . $v . ".jpg" ; $photo_bdd1 = RACINE_SITE . "photos/$_POST[categorie]/$name1"; $photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name1"; copy($_FILES['photo1']['tmp_name'],$photo_dossier); $_FILES['photo1'] =""; $v++ ; } $character= "'"; $replace = "\'" ; $description1 = $_POST['description1']; $description1 = str_replace ( $character , $replace , $description1, ) ; //$character= "jusqu'a"; //$replace = "jusqu\'a" ; //$description1 = $_POST['description1']; //$description1 = str_replace ( $character , $replace , $description1, ) ; echo $description1 ; if ( isset($_FILES['photo2'])) { $photo_bdd = ""; $photo_dossier = ""; $prepa_name2 = substr($_POST['titre'], 0, 45); $name2= $prepa_name2 . $v . ".jpg" ; $photo_bdd2 = RACINE_SITE . "photos/$_POST[categorie]/$name2"; $photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name2"; copy($_FILES['photo2']['tmp_name'],$photo_dossier); $v++ ; } $character= "'"; $replace = "\'" ; $description2 = $_POST['description2']; $description2 = str_ireplace ( $character , $replace , $description2 ) ; //echo $description2 ; if ( isset($_FILES['photo3'])) { $photo_bdd = ""; $photo_dossier = ""; $prepa_name3 = substr($_POST['titre'], 0, 45); $name3= $prepa_name3 . $v . ".jpg" ; $photo_bdd3 = RACINE_SITE . "photos/$_POST[categorie]/$name3"; $photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name3"; copy($_FILES['photo3']['tmp_name'],$photo_dossier); $v++ ; } $character= "'"; $replace = "\'" ; $description3 = $_POST['description3']; $description3 = str_ireplace ( $character , $replace , $description3, ) ; //echo $description3 ; if ( isset($_FILES['photo4'])) { $photo_bdd = ""; $photo_dossier = ""; $prepa_name4 = substr($_POST['titre'], 0, 45); $name4= $prepa_name4 . $v . ".jpg" ; $photo_bdd4 = RACINE_SITE . "photos/$_POST[categorie]/$name4"; $photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name4"; copy($_FILES['photo4']['tmp_name'],$photo_dossier); $v++ ; } $character= "'"; $replace = "\'" ; $description4 = $_POST['description4']; $description4 = str_ireplace ( $character , $replace , $description4, ) ; //echo $description4 ; if ( isset($_FILES['photo5'])) { $photo_bdd = ""; $photo_dossier = ""; $prepa_name5 = substr($_POST['titre'], 0, 45); $name5= $prepa_name5 . $v. ".jpg" ; $photo_bdd5 = RACINE_SITE . "photos/$_POST[categorie]/$name5"; $photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name5"; copy($_FILES['photo5']['tmp_name'],$photo_dossier); $v++ ; } $character= "'" ; $replace = "\'" ; $description5 = $_POST['description5']; $description5 = str_ireplace ( $character , $replace , $description5, ) ; //echo $description5 ; $character= "'" ; $replace = "\'" ; $description6 = $_POST['description6']; $description6 = str_replace ( $character , $replace , $description6, ) ; //echo $description6 ; $character= "'"; $replace = "\'" ; $detail1 = $_POST['detail1']; $detail1 = str_ireplace ( $character , $replace , $detail1, ) ; $character= "'"; $replace = "\'" ; $detail2 = $_POST['detail2']; $detail2 = str_ireplace ( $character , $replace , $detail2, ) ; $character= "'"; $replace = "\'" ; $detail3 = $_POST['detail3']; $detail3 = str_ireplace ( $character , $replace , $detail3, ) ; $character= "'"; $replace = "\'" ; $detail4 = $_POST['detail4']; $detail4 = str_ireplace ( $character , $replace , $detail4, ) ; $character= "'"; $replace = "\'" ; $detail5 = $_POST['detail5']; $detail5 = str_ireplace ( $character , $replace , $detail5, ) ; $character= "'"; $replace = "\'" ; $detail6 = $_POST['detail6']; $detail6 = str_ireplace ( $character , $replace , $detail6, ) ; $character= "'"; $replace = "\'" ; $detail7 = $_POST['detail7']; $detail7 = str_ireplace ( $character , $replace , $detail7, ) ; $character= "'"; $replace = "\'" ; $detail_livraison = $_POST['detail_livraison']; $detail_livraison = str_ireplace ( $character , $replace , $detail_livraison, ) ; $character= "'"; $replace = "\'" ; $detail_prix = $_POST['detail_prix']; $detail_prix = str_ireplace ( $character , $replace , $detail_prix, ) ; echo ' <br/>'; $exec =executeRequete("INSERT INTO produit ( groupe, categorie, titre, description1, evaluation1, evaluation2, detail_livraison, detail1, detail2, detail3, detail4, detail5, detail6, detail7, stock, prix, detail_prix, photo1, alt1, photo2, alt2, photo3, alt3, photo4, alt4, photo5, alt5, description2, description3, description4, description5, description6, lien, magasin, divers ) values ( '$_POST[groupe]', '$_POST[categorie]', '$_POST[titre]', '$description1', '$_POST[evaluation1]', '$_POST[evaluation2]', '$detail_livraison', '$detail1', '$detail2', '$detail3', '$detail4', '$detail5', '$detail6', '$detail7', '$_POST[stock]', '$_POST[prix]', '$detail_prix', '$photo_bdd1', '$prepa_name1', '$photo_bdd2', '$prepa_name2', '$photo_bdd3', '$prepa_name3', '$photo_bdd4', '$prepa_name4', '$photo_bdd5', '$prepa_name5', '$description2', '$description3', '$description4', '$description5', '$description6', '$_POST[lien]', '$_POST[magasin]', '$_POST[divers]' )"); $contenu .= '<div class="validation">Le produit a été ajouté</div>'; } ?>
<?php
if(isset($_GET['action']) && ($_GET['action'] == 'ajout'))
{
echo '
<h1> Formulaire Produits </h1>
<form method="post" enctype="multipart/form-data" action="">
<label for="groupe">groupe</label><br>
<input type="text" id="groupe" name="groupe" placeholder="Groupe"><br><br>
<label for="categorie">categorie</label><br>
<input type="text" id="categorie" name="categorie" placeholder="Categorie"><br><br>
<label for="titre">titre</label><br>
<input type="text" id="titre" name="titre" placeholder="Titre"><br><br>
<label for="description1">description1</label><br>
<input type="text" id="description1" name="description1" placeholder="Description1"><br><br>
<label for="evaluation1">evaluation1</label><br>
<input type="text" id="evaluation1" name="evaluation1" placeholder="Evaluation1"><br><br>
<label for="evaluation2">evaluation2</label><br>
<input type="text" id="evaluation2" name="evaluation2" placeholder="Evaluation2"><br><br>
<label for="detail_livraison">Detail_livraison</label><br>
<input type="text" id="detail_livraison" name="detail_livraison" placeholder="Detail_livraison"><br><br>
<label for="detail1">detail1</label><br>
<input type="text" id="detail1" name="detail1" placeholder="detail1"><br><br>
<label for="detail2">detail2</label><br>
<input type="text" id="detail2" name="detail2" placeholder="detail2"><br><br>
<label for="detail3">detail3</label><br>
<input type="text" id="detail3" name="detail3" placeholder="detail3"><br><br>
<label for="detail4">detail4</label><br>
<input type="text" id="detail4" name="detail4" placeholder="detail4"><br><br>
<label for="detail5">detail5</label><br>
<input type="text" id="detail5" name="detail5" placeholder="detail5"><br><br>
<label for="detail6">detail6</label><br>
<input type="text" id="detail6" name="detail6" placeholder="detail6"><br><br>
<label for="detail7">detail7</label><br>
<input type="text" id="detail7" name="detail7" placeholder="detail7"><br><br>
<label for="stock">stock</label><br>
<input type="text" id="stock" name="stock" placeholder="stock"><br><br>
<label for="prix">prix</label><br>
<input type="text" id="prix" name="prix" placeholder="prix"><br><br>
<label for="detail_prix">detail_prix</label><br>
<input type="text" id="detail_prix" name="detail_prix" placeholder="Detail_prix "><br><br>
<label for="photo1">photo1</label><br>
<input type="file" id="photo1" name="photo1"><br><br>
<label for="photo2">photo2</label><br>
<input type="file" id="photo2" name="photo2"><br><br>
<label for="photo3">photo3</label><br>
<input type="file" id="photo3" name="photo3"><br><br>
<label for="photo4">photo4</label><br>
<input type="file" id="photo4" name="photo4"><br><br>
<label for="photo5">photo5</label><br>
<input type="file" id="photo5" name="photo5"><br><br>
<label for="description2">description2</label><br>
<input type="text" id="description2" name="description2" placeholder="Description2"><br><br>
<label for="description3">description3</label><br>
<input type="text" id="description3" name="description3" placeholder="Description3"><br><br>
<label for="description4">description4</label><br>
<input type="text" id="description4" name="description4" placeholder="Description4"><br><br>
<label for="description5">description5</label><br>
<input type="text" id="description5" name="description5" placeholder="Description5"><br><br>
<label for="description6">description6</label><br>
<input type="text" id="description6" name="description6" placeholder="Description6"><br><br>
<label for="lien">lien</label><br>
<input type="text" id="lien" name="lien" placeholder="Lien du produit"><br><br>
<label for="magasin">magasin</label><br>
<input type="text" id="magasin" name="magasin" placeholder="Amazone"><br><br>
<label for="divers">divers</label><br>
<input type="text" id="divers" name="divers" placeholder="divers"><br><br>
<input type="submit" value="enregistrement du produit">
</form>';
}
?>
voici le retour du var_dump($_POST)
array(25) { ["groupe"]=> string(6) "mlkmlk" ["categorie"]=> string(4) "test" ["titre"]=> string(4) "test" ["description1 "]=> string(0) "" ["evaluation1"]=> string(0) "" ["evaluation2"]=> string(0) "" ["detail_livraison"]=> string(0) "" [ "detail1"]=> chaîne(0) "" ["detail2"]=> chaîne(0) "" ["detail3"]=> chaîne(0) "" ["detail4"]=> chaîne(0) " " ["detail5"]=> chaîne(0) "" ["detail6"]=> chaîne(0) "" ["detail7"]=> chaîne(0) "" ["stock"]=> chaîne(0) ) "" ["prix"]=> string(0) "" ["detail_prix"]=> string(0) "" ["description2"]=> string(0) "" ["description3"]=> string(0) "" ["description4"]=> string(0) "" ["description5"]=> string(0) "" ["description6"]=> string(0) "" ["lien"]=> string(0) "" ["magasin"]=> string(0) "" ["divers"]=> chaîne(0) "" }chaîne(0) "" ["divers"]=> chaîne(0) "" }chaîne(0) "" ["divers"]=> chaîne(0) "" }
vous ne pouvez voir aucune photo et alt apparaît
merci pour votre aide
A voir également:
- Bug dans la gestion des exceptions d'un formulaire
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Formulaire de reclamation instagram - Guide
- Logiciel gestion photo gratuit - Guide
5 réponses
Bonjour,
Avant tout, merci à l'avenir d'utiliser correctement les balises de code ( en précisant le LANGAGE dans les balises ( j'ai édité ton premier code pour que tu vois la différence )
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
A la place de la fonction COPY, Commence par utiliser les fonctions is_uploaded_file() et move_uploaded_file()
https://www.php.net/manual/fr/function.is-uploaded-file.php
https://www.php.net/manual/fr/function.move-uploaded-file.php
Tu devrais également, au lieu de répéter 5 fois le même code... créer une FONCTION .. ça rendrait ton code plus lisible et plus propre....
Il serait pas mal aussi de faire de l'indentation dans ton code ( là aussi, dans le but de le rendre lisible )
Et enfin .. ISSET() vérifie si la variable existe ....
Pour vérifier que la variable existe ET n'est pas vide, il faut utiliser !empty()
Avant tout, merci à l'avenir d'utiliser correctement les balises de code ( en précisant le LANGAGE dans les balises ( j'ai édité ton premier code pour que tu vois la différence )
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
A la place de la fonction COPY, Commence par utiliser les fonctions is_uploaded_file() et move_uploaded_file()
https://www.php.net/manual/fr/function.is-uploaded-file.php
https://www.php.net/manual/fr/function.move-uploaded-file.php
Tu devrais également, au lieu de répéter 5 fois le même code... créer une FONCTION .. ça rendrait ton code plus lisible et plus propre....
Il serait pas mal aussi de faire de l'indentation dans ton code ( là aussi, dans le but de le rendre lisible )
Et enfin .. ISSET() vérifie si la variable existe ....
Pour vérifier que la variable existe ET n'est pas vide, il faut utiliser !empty()
bonjour
j'ai essaye !empty mais j'ai toujours l'erreur Fatal error: Uncaught ValueError: Path cannot be empty in /... line 16
j'ai essaye !empty mais j'ai toujours l'erreur Fatal error: Uncaught ValueError: Path cannot be empty in /... line 16
les fonctions sont secondaires le principal pour moi est de regler ce probleme
voici le code
voici le code
if ( !empty($_FILES['photo2']))
{
$photo_bdd = "";
$photo_dossier = "";
$prepa_name2 = substr($_POST['titre'], 0, 45);
$name2= $prepa_name2 . $v . ".jpg" ;
$photo_bdd2 = RACINE_SITE . "photos/$_POST[categorie]/$name2";
$photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name2";
copy($_FILES['photo2']['tmp_name'],$photo_dossier);
$v++ ;
}
Pour moi certaines choses sont primordiales ... comme le fait que je t'ai demandé de poster correctement ton code ...
(je t'ai même donné un lien qui explique comment faire (en indiquant le langage )
Ensuite ... les fonctions is_uploaded_file() et move_uploaded_file() sont LES FONCTIONS à utiliser pour uploader des fichiers sur un serveur... et certainement pas la fonction copy !!
mais comme je sens que tu n'as pas envie de progresser et que tu préfères copier/coller des codes trouvés bêtement sur internet.. je te propose ceci :
<?php
Et pour l'utiliser
(je t'ai même donné un lien qui explique comment faire (en indiquant le langage )
Ensuite ... les fonctions is_uploaded_file() et move_uploaded_file() sont LES FONCTIONS à utiliser pour uploader des fichiers sur un serveur... et certainement pas la fonction copy !!
mais comme je sens que tu n'as pas envie de progresser et que tu préfères copier/coller des codes trouvés bêtement sur internet.. je te propose ceci :
<?php
function uploadFile($file, $newFileName, $directory2Upload=""){ if(empty($file)){ //aucun fichier à uploader return false; } // get details of the uploaded file $fileTmpPath = $file['tmp_name']; //$fileName = $file['name']; //$fileSize = $file['size']; //$fileType = $file['type']; //$fileNameCmps = explode(".", $fileName); //$fileExtension = strtolower(end($fileNameCmps)); $fileError = $file['error']; if($fileError){ echo "Erreur lors du chargement du fichier " . $fileError; return false; } if (!is_uploaded_file($fileTmpPath)) { echo " Erreur lors de l'upload du fichier " . $fileTmpPath; return false; } $finalPath = $directory2Upload . $newFileName; if(!move_uploaded_file($fileTmpPath, $finalPath)){ echo " Erreur lors de l'upload du fichier " . $fileTmpPath . " vers : " . $finalPath; return false; } return $finalPath; }
Et pour l'utiliser
$v=1; $prepa_name1 = substr($_POST['titre'], 0, 45); $name1= $prepa_name1 . $v . ".jpg" ; $photo_dossier = RACINE_SITE . "/photos/".$_POST['categorie']."/"; $file1 = !empty($_FILES['photo1']) ? $_FILES['photo1'] : null; uploadFile($file1, $name1, $photo_dossier);
bonjor
- svp pouvez vous m'expliquer la ligne
$file1 = !empty($_FILES['photo1']) ? $_FILES['photo1'] : null; et la difference avec la variable
$name1 car dans le dossier photo apres copie j'obtiens ce resultat :
nomdelaphoto.jpg.nomdelaphoto.jpg (ce qui correspond a la ligne
" uploadFile($file1,$name1, $photo_dossier); " )
- ca rentre quatres photos dans la bdd alors que le formulaire est cense etre vide (j'ai tente l'operation en ne rentrant qu'une seule photo )
- j'ai l'erreur "Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4 " qui s'affiche il doit donc y avoir une erreur sur la variable $fileError
( j'ai fait un copier coller de votre code )
- svp pouvez vous m'expliquer la ligne
$file1 = !empty($_FILES['photo1']) ? $_FILES['photo1'] : null; et la difference avec la variable
$name1 car dans le dossier photo apres copie j'obtiens ce resultat :
nomdelaphoto.jpg.nomdelaphoto.jpg (ce qui correspond a la ligne
" uploadFile($file1,$name1, $photo_dossier); " )
- ca rentre quatres photos dans la bdd alors que le formulaire est cense etre vide (j'ai tente l'operation en ne rentrant qu'une seule photo )
- j'ai l'erreur "Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4 " qui s'affiche il doit donc y avoir une erreur sur la variable $fileError
( j'ai fait un copier coller de votre code )
if ( !empty($_FILES['photo1'])) { $v=1; $prepa_name1 = substr($_POST['titre'], 0, 45); $name1= $prepa_name1 . $v . ".jpg" ; $file1 = !empty($_FILES['photo1']) ? $_FILES['photo1'] : null; $photo_dossier = $_SERVER['DOCUMENT_ROOT'] . RACINE_SITE . "/photos/$_POST[categorie]/$name1"; $photo_bdd1 = RACINE_SITE . "photos/$_POST[categorie]/$name1"; uploadFile($file1,$name1, $photo_dossier); }
Tu me parles de Bdd.... Alors que le code montrer ne touche aucunement à la base de données...
Le code que tu nous montres depuis le début et que je t'ai modifier, sert à donner le fichier sur le serveur...(dans un dossier de celui-ci)
À aucun moment cela ne fait un update ou un insert dans la base...
Ensuite, tu dis avoir fait un copier-coller de mon code sauf que en regardant, non, ce n'est pas du tout le même...
Le code que tu nous montres depuis le début et que je t'ai modifier, sert à donner le fichier sur le serveur...(dans un dossier de celui-ci)
À aucun moment cela ne fait un update ou un insert dans la base...
Ensuite, tu dis avoir fait un copier-coller de mon code sauf que en regardant, non, ce n'est pas du tout le même...
et pour la ligne
regarde ce qu'est l'écriture ternaire http://www.finalclap.com/faq/102-php-operateur-ternaire
$file1 = !empty($_FILES['photo1']) ? $_FILES['photo1'] : null;
regarde ce qu'est l'écriture ternaire http://www.finalclap.com/faq/102-php-operateur-ternaire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour
j'ai simplement supprimé $name1 dans la ligne
et ca marche
j'ai toujours une erreur sur la variable $ fileError et ce message qui s'affiche :
qui correspond aux 4 non uploads des photos 2 à 5 ( logiquement ca devrait donc marquer:
)
de plus la ligne
j'ai simplement supprimé $name1 dans la ligne
uploadFile($file1,$name1, $photo_dossier);
et ca marche
j'ai toujours une erreur sur la variable $ fileError et ce message qui s'affiche :
"Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 4 "
qui correspond aux 4 non uploads des photos 2 à 5 ( logiquement ca devrait donc marquer:
"Erreur lors du chargement du fichier 2Erreur lors du chargement du fichier 3Erreur lors du chargement du fichier 4Erreur lors du chargement du fichier 5 " )
)
de plus la ligne
if ( !empty($_FILES['photo1']))n'est pas respectee le code s'applique meme si il n'ya pas de POST
Le code erreur 4 corresspond à
C'est le code
qui te l'affiche..
Si tu ne veux pas voir le message .. il suffit de retirer le echo
UPLOAD_ERR_NO_FILE
Valeur : 4. Aucun fichier n'a été téléchargé.
C'est le code
$fileError = $file['error']; if($fileError){ echo "Erreur lors du chargement du fichier " . $fileError; return false; }
qui te l'affiche..
Si tu ne veux pas voir le message .. il suffit de retirer le echo