Isset d'une var contenu dans une autre var est définie [PHP]

Résolu/Fermé
Nesil - Modifié le 20 juin 2022 à 20:46
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 - 21 juin 2022 à 19:32
Bonjour,
je dois ajouter une fonction d'enregistrement d'une pièce jointe dans ma bdd sql.
Actuellement, seulement un texte (obligatoire) était sauvegarder. J'ai donc commencé par modifier la bdd. L'ajout d'une pièce jointe étant facultatif, j'ai décidé dans le .js de faire une fonction qui remplirait une variable 'dataObj' en fonction de si il y avait une pièce jointe ou non.
voila le code de la fonction dans le .js :
if (document.getElementById('photoAideDetail').files.length > 0) {
                jQuery.each(jQuery('#photoAideDetail')[0].files, function (i, file) {
                    dataObj =({
                        id_prio: id_prio,
                        texte : texte,
                        position : position,
                        id_onglet : id_onglet,
                        dateid : dateid,
                        photoAideDetail : file
                      })
                    
                });
                console.log(67,dataObj);
            }else{
                jQuery.each(jQuery('#photoAideDetail')[0].files, function (i, file) {
                    dataObj =({
                        id_prio: id_prio,
                        texte : texte,
                        position : position,
                        id_onglet : id_onglet,
                        dateid : dateid,
                        photoAideDetail : NULL
                    })
                });
            }

J'ai console.log dataObj et voila ce que cela me donne :

dateid: "2022-S25-D0"
id_onglet: 165
id_prio: 0
photoAideDetail: File {name: 'Bureau Rouge.jpg', lastModified: 1647854865972, lastModifiedDate: Mon Mar 21 2022 10:27:45 GMT+0100 (heure normale d’Europe centrale), webkitRelativePath: '', size: 140425, …}
position: 1
texte: "ert"
[[Prototype]]: Object

J'appelle ensuite cette variable dans l'ajax :
$.ajax({
                cache:false,
                url: "data/sauvegarderPrioOngletFenetre",
                type: "POST",
                async: false,
                data: dataObj,
                processData: false,
                contentType: false,
                success:function(response, status){
                    console.log(106, response);
                    console.log(107, dataObj);
                    response = JSON.parse(response);  
                    if(response[0] == "erreur1" && response[1] == "erreur2"){
                        erreur('Une erreur est survenu lors de la sauvegarde!');
                    }else{
                        if(response[0] == "erreur1"){
                            erreur(response[1]);
                        }else{
                            reussite(response[0]);
                        }
                    }
                },
                error: function(response, status){
                }
            });

Or dans le handler.php au niveau de la fonction sauvegarder, il y a ces lignes au tout début :
$response[0] = "erreur1";
$response[1] = "erreur2";
if (isset($_POST['id_prio']) && isset($_POST['texte'])) {
              $response[0] = "erreur1";
              $response[1] = "erreur2";

               //... suite du code pour sauvegarder avec les requetes sql...

Les "response" m'ont permis de voir que je ne rentrais pas dans la fonction car la console affiche :

106 '["erreur1","erreur2"]'

J'imagine que c'est au niveau du isset que je dois faire des modifications mais je ne sais pas comment vérifier qu'une variable contenu dans une autre variable ne soit pas vide.

EDIT : Ajout des BALISES DE CODE.

Explications disponibles ici : https://forums.commentcamarche.net/forum/affich-37598670-mise-en-forme-du-forum-et-des-fiches-pratiques-ccm#les-codes-sources




Configuration: Configuration: Windows / Chrome 102.0.0.0
A voir également:

4 réponses

yg_be Messages postés 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024 Ambassadeur 1 539
20 juin 2022 à 18:21
bonjour,
si tu veux comprendre ce qui se passe, le point de départ, c'est, en php, d'afficher et d'examiner le contenu de $_POST.
1
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
20 juin 2022 à 21:01
Bonjour,

Je ne vois pas sur quoi tu te bases pour dire que tu ne rentres pas dans le IF ... vu que tu as les mêmes variables AVANT et DANS le if ...

Je ne vois pas non plus l'intéret de ton IF/ELSE dans ton JS ...
Surtout que tu boucles sur tes fichiers.. et donc.. écrase ta variable à chaque itération..

A noter également que pour uploader un fichier en ajax, il faut passer par un formData.
var formData = new FormData();

formData.append('id_prio', 'id_prio');
formData.append('texte ', 'texte ');
formData.append('position ', 'position ');
formData.append('id_onglet ', 'id_onglet ');
formData.append('dateid ', 'dateid ');
// Attach files
 jQuery.each(jQuery('#photoAideDetail')[0].files, function (i, file) {
  formData.append('file', file);
} 

Les fichiers seront , comme avec un formulaire "normale", contenus dans la variable $_FILES

Côté code PHP .. tu peux remplacer ton code actuel par
$response = []; // initialisation de la variable reponse
$response['DEBUG']['POST'] = $_POST;
$response['DEBUG']['FILE'] = $_FILES;
if (isset($_POST['id_prio']) && isset($_POST['texte'])) {


               //... suite du code pour sauvegarder avec les requetes sql...


Reste à regarder dans la console ce que ça te retourne...


1
En console au niveau du « console.log(106, response); » de mon .js, cela met toutes les lignes de codes et de css voila un extrait : « <br/>\n<font size =1><table classe ….. » et cela pendant une vingtaines de ligne.

Le console.log(107,formData) de mon .js me donne en console : FormData {}

Et puis apres j’ai un Uncaught syntaxError : Unexpected token < in JSON …
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > Nesil
21 juin 2022 à 13:06
Il faudrait regarder dans la console, de préférence avec Firefox, le retour de ton appel Ajax.
Et nous en faire une capture écran avec le message complet qui s'affiche dans l'onglet réponse.
Je suppose que ça te donne une erreur au niveau de ton code PHP
1
Rebonjour et merci pour vos réponses.

@jordane45 : pardon en voulant nettoyer mon code pour le coller ici j’ai mal recopié les reponses dans la boucle if. Ce qui nous donne ça en terme de code :

$response[0] = "erreur1";
$response[1] = "erreur2";
if (isset($_POST['id_prio']) && isset($_POST['texte'])) {
$response[0] = "erreur3";
$response[1] = "erreur4";

//... suite du code pour sauvegarder avec les requetes sql...

Avec le même résultat que dans ma question.

ma boucle if/else me permet d’ajouter et d’enregistrer en bdd la pièce jointe dans les variables uniquement si l’utilisateur en sélectionne une sur l’application. Sinon cette variable est null mais quand même contenu dans la variable dataObj.

De plus j’ai déjà tenté de faire un formData puis un stringify que j’ai appelé dans l’ajax. Mais en php pareille je n’arrivais pas à récupérer la photo
0
Bonjour.

Merci beaucoup, vos messages m'ont aidé à modifier mon code pour que ma photo s'enregistre en bdd comme je le voulais.
Voici ce que j'ai fait dans mon .js :

var l = new FormData();
l.append('id_prio',id_prio);
l.append('texte',texte);
l.append('position',position);
l.append('id_onglet',id_onglet);
l.append('dateid',dateid);
console.log(51,l);

if (document.getElementById('photoAideDetail').files.length > 0) {
jQuery.each(jQuery('#photoAideDetail')[0].files, function (i, file) {
l.append('photoAideDetail', file);
});
console.log(57,l);
}

$.ajax({
cache:false,
url: "data/sauvegarderPrioOngletFenetre",
type: "POST",
async: false,
data: l,
processData: false,
contentType: false,
success:function(response, status){
console.log(107, l);
// response = JSON.parse(response);
if(response[0] == "erreur1" && response[1] == "erreur2"){
erreur('Une erreur est survenu lors de la sauvegarde!');
}else{
if(response[0] == "erreur1"){
erreur(response[1]);
}else{
reussite(response[0]);
}
}
},
error: function(response, status){
}
});

et voila mon .php :

$response[0] = "erreur1";
$response[1] = "erreur2";

if (isset($_POST['id_prio']) && isset($_POST['texte'])) {

$response[0] = "erreur3";
$response[1] = "erreur4";

$id_prio = $_POST['id_prio'];
$id_onglet = $_POST['id_onglet'];
$texte = $_POST['texte'];
$position = $_POST['position'];
$dateid = $_POST['dateid'];

Mon problème était que c'etait la variable $_FILE qui contenait ma photo hors je n'appelais pas la bonne variable au moment de ma requete SQL.

J'ai un autre problème mais cela n'a rien à voir avec ce topic. Je vais donc en créer un autre. Merci beaucoup.
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
21 juin 2022 à 19:32
Dans tes prochains messages, merci d'utiliser les balises de code pour poster du code sur le forum
https://forums.commentcamarche.net/forum/affich-37598670-mise-en-forme-du-forum-et-des-fiches-pratiques-ccm#les-codes-sources
0