Isset d'une var contenu dans une autre var est définie [PHP]
Résolu
Nesil
-
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 -
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 :
J'ai console.log dataObj et voila ce que cela me donne :
J'appelle ensuite cette variable dans l'ajax :
Or dans le handler.php au niveau de la fonction sauvegarder, il y a ces lignes au tout début :
Les "response" m'ont permis de voir que je ne rentrais pas dans la fonction car la console affiche :
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.
Configuration: Configuration: Windows / Chrome 102.0.0.0
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-sourcesConfiguration: Configuration: Windows / Chrome 102.0.0.0
A voir également:
- Isset d'une var contenu dans une autre var est définie [PHP]
- Easy php - Télécharger - Divers Web & Internet
- Word a trouvé du contenu illisible - Guide
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (2) ✓ - Forum Linux / Unix
- Ce contenu n'est pas disponible facebook - Forum Réseaux sociaux
- Fusionner deux cellules excel en gardant le contenu - Guide
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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.
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.
Les fichiers seront , comme avec un formulaire "normale", contenus dans la variable $_FILES
Côté code PHP .. tu peux remplacer ton code actuel par
Reste à regarder dans la console ce que ça te retourne...
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...
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 …
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 …
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
@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
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.
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.
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
https://forums.commentcamarche.net/forum/affich-37598670-mise-en-forme-du-forum-et-des-fiches-pratiques-ccm#les-codes-sources