Affichage d'une requête Ajax dans un script PHP

Eléphanteau du PHP | 36 Messages

03 nov. 2023, 14:04

En faite c'est moi qui vous ai dit index , mais ce fichier est bien executé dans un shop.php.
Le rendu reste identique dans l'index.php dans le shop.php ou meme directement dans le hmtl rien ne change.

Oui en effet je suis avec chat gpt depuis une semaine aussi hihihi, le truc le plus pertinent qu'il m'a dit c'est : ordre d'execution entre le html et le js ... Mais bon je bloque malgrès tout. Je comfirme donc que cette condition php est bien dans un fichier propre mais que le probleme perssiste.


Ici je ne comprend pas :
index.php quand
<h5 class="modal-title"><span class="text-left titre">$_POST doit s'afficher ici : <?= $_POST['cart']; ?></span></h5>
est exécuté, est appelé en méthode get, donc cela ne peut pas fonctionner ?

Ou dois-je modifier se post et get : Dans le HTML sa change rien en tout cas <?= $_GET['cart']; ?>

Avatar du membre
Mammouth du PHP | 1564 Messages

03 nov. 2023, 14:20

Tu réitérer ton problème STP ?

Concernant le "$.ajax()" que utilise, si tu met method : "POST", c'est bien avec $_POST que tu récupèrera tes infos. Or 1 dit que si tu affiche la page dans un navigateur, la méthode du navigateur est GET.

Eléphanteau du PHP | 36 Messages

03 nov. 2023, 14:54

apres se shop.php je l'execute via l'index.php en haut de page de cette maniere

// ICI LE HAUT DE PAGE DE MON INDEX
require 'shop.php';
ici shop.php


$cart = 'votre panier est vide';

if ($_SERVER["REQUEST_METHOD"] == "POST" || $_SERVER["REQUEST_METHOD"] == "GET") {
    $cartJSON = $_POST["cart"];
    $cartData = json_decode($cartJSON, true);
    $cart = $cartData; // Vous pouvez stocker ces données dans $cart pour une utilisation ultérieure.

    var_dump($cart);
}

je repete que ce qui est frustrant ici c'est qu'aucune erreur ne surviens dans la l'inspecteur le code fait ce que je souhaite; C'est là que mes compétence s'arrete, entre le rendu de la page et le rendu de l'inspecteur. Le var dump de $cart s'affiche dans l'inspecteur mais pas à l'affichage


J'ai pensais à une alternative : mon script affiche correctement le panier dans un H5. Put etre l'emboiter dans un form, chaque input seront ID, produit et Prix , et essayer de recupérer le formulaire en php. Je testerais cette methode ce weekend mais je sais pas se que vous en pensez .

Code : Tout sélectionner

$.ajax({ method: "POST", url: "./index.php", data: { cart: cartJSON }, cache: false, // Désactive la mise en cache }).done(function(response) { // Mettez à jour le contenu de l'élément avec l'ID "ajax" document.getElementById('ajax').innerHTML = '<h5 class="modal-title">' + cartJSON + '</h5>'; }); displayCart(); },

Cette ligne fonctionne bien :

Code : Tout sélectionner

document.getElementById('ajax').innerHTML = '<h5 class="modal-title">' + cartJSON + '</h5>';

Rendu html de la requete :
{"PRODUCTS":[{"ID":3,"TITLE":"PRÉVISIONS","PRICE":29}],"TOTAL":29}

Dans cette ligne je transforme le h5 en form avec des input et je le recupère en php ... Qu'en pensez vous ? Est ce convenitionnelle comme methode ?

J'essaye de trouver une alternative car vraiment c'est inexplicable que ce code ne s'exectue pas de la meme facon entre l'inspecteur et le rendu ...

Avatar du membre
Mammouth du PHP | 1564 Messages

03 nov. 2023, 16:08

Te faut revoir comment fonctionne $.ajax, tu n'utilise pas ton "response" :
.done(function(response) {
// Mettez à jour le contenu de l'élément avec l'ID "ajax"
document.getElementById('ajax').innerHTML = '<h5 class="modal-title">' + cartJSON + '</h5>';
alert(response);//affichera ce que la page appelée te répondra, bien sûr, à toi d'utiliser response comme tu le souhaite !
});

Eléphanteau du PHP | 36 Messages

04 nov. 2023, 10:32

Ok donc mon problème se situe ici dans l'utilisation d'ajax c'est deja une bonne avancée. Je me suis concentré la dessus mais je patauge encore pas mal. Je continue a creuser de se coté puis si je bloque encore lundi, je vais repartir 0 en faisant un panier 100% php. J'ai trouver un tuto de grafikart qui semble pas mal : https://www.youtube.com/watch?v=OX3FxGhRffc

En plus, l'utilisation de jquery est dépréciée donc c'est pas la solution idéal pour faire un panier finalement. Si vous avez un conseil pour attaquer un tuto, si vous pouvez me préconiser une liens github que je puisse télécharger un truc fonctionnel direct hihiii avec plaisir, sinon mon problème n'est donc pas lié à PHP mais à JS donc il n'a rien à faire sur PHP France. Je mettrais ensuite le sujet en résolu. Je vous remercie pour vos efforts c'est vraiment appréciable je me suis sentis soutenu hihihi. Bon weekend à tous !

Mammouth du PHP | 2703 Messages

04 nov. 2023, 10:48

en remplaçant
url: "./index.php",
par
url: "./ajax-save-cart.php",

il faut bien que le php fasse son travail donc cela a sa place sur ce forum.

en mettant dans ce fichier le code initial à compléter car il ne sauve rien du tout
<?php 

$etatdupanier = 'le panier est vide';

if ($_SERVER["REQUEST_METHOD"] === "POST") {
  // Récupérez les données du panier depuis la requête POST
  $cartData = $_POST["cart"];

  // Vous pouvez décoder les données JSON en un tableau PHP
  $cart = json_decode($cartData, true);

  // réponse au client 
  $etatdupanier= "Le panier a été enregistré avec succès.";
} else {
  // Gérez les erreurs ou les requêtes non autorisées
  $etatdupanier = "Requête invalide.";
}
// ici ces cette variable que je souhaite utiliser dans mon html 
echo $etatdupanier;

?>

Avatar du membre
Mammouth du PHP | 1564 Messages

04 nov. 2023, 10:49

OK, mais sache que l'utilisation de jQuery n'est pas dépréciée. https://jquery.com/

Sur PHPFrance, on traite aussi d'autres langages comme JS : javascript-ajax/

Sur GitHub, une recherche comme "PHP cart shop" te donnera quelques résultats, à mon avis.

Eléphanteau du PHP | 36 Messages

04 nov. 2023, 12:02

ok je lache pas l'affaire alors parce qu'il est si parfait mon script hahaha , je suis à un poil de clôturer le truc :D . Je veux pas abuser mais si j'ai votre feu vert, je continue sur la résolution coté js (C'est ma 1ere interaction sur un forum, encore merci de continuer avec moi ), et je vous crois sur parole quant à la non dépréciation de JQuery.

Je fais un rappel détaillé de mon code, de ma problématique, bien structuré :

Etape 1 => dans mon index.php j'execute 'ajax-save-cart.php'.
require 'ajax-save-cart.php';
Etape 2 => dans shop.price.js j'execute Ajax au clique vers 'ajax-save-cart.php' comme proposé par Or1 :)

Code : Tout sélectionner

save: function() { const cartJSON = JSON.stringify(this); $.ajax({ type: "POST", url: "./ajax-save-cart.php", data: { cart: cartJSON }, cache: false, }).done(function(response) { // Ici nous retrouverons dan le html le contenu du panier dans un H5 mais c'est inutil à terme. C'est pour le test 1 document.getElementById('ajax').innerHTML = '<h5 class="modal-title">' + cartJSON + '</h5'; // Ici l'alerte retourne dans un l'état du panier ainsi que tout le code html de la page dans le test 2 alert(response); // VOICI DONC MA PROBLEMATIQUE : // Ici le code à jouter pour obtenir ces données JS (en traitant correctement la response), dans le fichier ajax-save-cart.php ... }); displayCart(); }, ...
Etape 3 => dans 'ajax-save-cart.php' :
$etatdupanier = 'le panier est vide';

if ($_SERVER["REQUEST_METHOD"] === "POST") {
  // Récupérez les données du panier depuis la requête POST
  $cartData = $_POST["cart"];

  // Vous pouvez décoder les données JSON en un tableau PHP
  $cart = json_decode($cartData, true);

  // réponse au client 
  $etatdupanier= "Le panier a été enregistré avec succès.";
} else {
  // Gérez les erreurs ou les requêtes non autorisées
  $etatdupanier = "Requête invalide.";
}
// ici ces cette variable que je souhaite afficher dans mon html : Test 3
echo $etatdupanier;
Etape 4 => Affichage dynamique en html.
<div id="ajax"></div>
<h5 class="modal-title"><span class="text-left titre"> <?= $etatdupanier ?></span></h5>
Maintenant que la base est posée voici un compte rendu des différents tests énumérés dans les commentaires :


TEST 1 : Le H5 généré pas je js dans la div id='ajax' donne ceci au clique :

Code : Tout sélectionner

{"PRODUCTS":[{"ID":2,"TITLE":"COMPATIBILITÉ","PRICE":49}],"TOTAL":49}

TEST 2 : Le alert dans le js donne ceci au clique :

Code : Tout sélectionner

Le panier a été enregistré avec succès. <!DOCTYPE html> <html lang="fr"> ... </html>

TEST 3 : Le H5 $etatdupanier du panier dans le html ou en haut de page en echo donne ceci au clique :

Code : Tout sélectionner

REQUÊTE INVALIDE.

J'en suis toujours toujours rendu à mon problème initiale car je ne traite pas la reponse mais la cartJSON. J'ai essayé d'appliquer au mieux vos consigne et de vous les exposer ici de manière complete. Si vous avez une idée de comment avancer pour que $etatdupanier soit chopé par le biais de la reponse et non de $cartJSON. Nous avons au moins bien identifié la source du probleme cependant.

Avatar du membre
Mammouth du PHP | 1564 Messages

04 nov. 2023, 12:21

Si vous avez une idée de comment avancer pour que $etatdupanier soit chopé par le biais de la reponse et non de $cartJSON.
Oui, récupère ce que ajax-save-cart.php te renvoi via response (c'est la variable que utilise dans function(ici la variable) lors de ton appel AJAX).

Tu aurait très bien pu mettre function(ma_variable_nommee_differemment)

Puis pour afficher ce que ajax-save-cart.php te renvoi, serait de l'utiliser comme ceci :
$.ajax({
type: "POST",
url: "./ajax-save-cart.php",
data: { cart: cartJSON },
cache: false,
}).done(function(ma_variable_nommee_differemment) {
console.log("ici les données de ajax-save-cart.php : " + ma_variable_nommee_differemment);
});

Eléphanteau du PHP | 36 Messages

04 nov. 2023, 13:09

ici j'ai appliqué la methode sur ma variable $etatdupanier, en effet le test fonctionne car le console log, au clique retourne la bonne reponse; Panier enregistré .


TEST 4 : recuperation de $etatdupanier

Code : Tout sélectionner

$.ajax({ type: "POST", url: "./ajax-save-cart.php", data: { cart: cartJSON }, cache: false, }).done(function($etatdupanier) { console.log("ici les données de ajax-save-cart.php : " + $etatdupanier); });
ENcore une fois, dans ce test le console.log retourne la bonne reponse tandit que mon echo $etat du panier lui reste en invalide.

Eléphanteau du PHP | 36 Messages

04 nov. 2023, 13:12

L'idée etant de recupérer les données du panier, donc la variable cart JSON que je souhaite biensur utiliser est enregistrer dans mon php

Cette variable doit etre interactive :

Code : Tout sélectionner

$etatdupanier
à l'ouverture de la page : votre panier est vide.
Au clique : votre panier est enregistrer.

par la suite quand cela sera ok je devrait traiter dans une nouvelle variable php $cartJSON qui me retourne un tableau JS au bon format.

Avatar du membre
Mammouth du PHP | 1564 Messages

04 nov. 2023, 13:50

Non, $etatdupanier ne peut pas être retranscrit comme ça mais avec la variable de "function" comme je te l'ai expliqué dans mon dernier post.

Eléphanteau du PHP | 36 Messages

04 nov. 2023, 15:16

Peut tu me montrer comment dans le code php retranscrire la fonction . Car je ne vois pas comment faire

Avatar du membre
Mammouth du PHP | 1564 Messages

04 nov. 2023, 15:53

dans ta page ajax-save-cart.php :
echo "Bonjour tout le monde !";
Dans ta fonction JS :
$.ajax({
type: "POST",
url: "./ajax-save-cart.php",
data: { cart: cartJSON },
cache: false,
}).done(function(ma_variable_nommee_differemment) {
console.log("ici les données de ajax-save-cart.php : " + ma_variable_nommee_differemment); // ici s'affichera ce que echo le fichier PHP, soit "ici les données de ajax-save-cart.php : Bonjour tout le monde !"
});
La documentation jQuery : AJAX, utilise Google Traduction pour traduire si besoin.

Mammouth du PHP | 2703 Messages

04 nov. 2023, 16:47

Etape 1 => dans mon index.php j'execute 'ajax-save-cart.php'.
require 'ajax-save-cart.php';
non, cette ligne ne sert à rien.
ajax-save-cart.php est exécuté car c'est la cible de l'appel ajax.