Page 1 sur 5

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

Posté : 31 oct. 2023, 18:17
par floconflocon
Bonjour à tous,

Je développe actuellement une interface en Js/Php pour une boutique en ligne. Mon script Javascript exécute les étapes de l'enregistrement du panier et exécute une requête Ajax, pour ainsi transmettre cela coté client en PHP.

l Voici le script JS avec a fonction "save" qui exécute la requête ajax.

RAS a ce niveau là. La requête ajax renvoie le panier, response statut 200 dans l'inspecteur/Réseaux.

Code : Tout sélectionner

// ADD, DELETE & TOTAL PRODUCT const cart = { products: [], total: 0, // Ajouter addProduct: function(product) { this.products.push(product); this.calculateTotal(); }, // Suprimer deleteProduct: function(id) { var index = -1; for (var i = 0; i < this.products.length; i++) { if (this.products[i].id === id) { index = i; break; } } if (index !== -1) { this.products.splice(index, 1); this.calculateTotal(); displayCart(); } }, // Supp All deleteAll: function() { this.products = []; this.calculateTotal(); displayCart(); this.deleteBasketCookie(); // Appel à la fonction pour supprimer le cookie "basket" }, // Supprimer le cookie "basket" deleteBasketCookie: function() { document.cookie = "basket=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; }, // Save save: function() { // Convertissez le panier en chaîne JSON const cartJSON = JSON.stringify(this); $.ajax({ type: "POST", url: "./index.php", data: { cart: cartJSON }, }).done(function(response) { //console.log(response); // Affiche le contenu de cartJSON }); //console.log(cartJSON); displayCart(); }, // Total calculateTotal: function() { var total = 0; for (var i = 0; i < this.products.length; i++) { total += this.products[i].price; } this.total = Math.round(total * 100) / 100; } }; ... // Bouton Suivant document.addEventListener("DOMContentLoaded", function() { var nextOneButtons = document.getElementsByClassName("nextOne"); for (var i = 0; i < nextOneButtons.length; i++) { nextOneButtons[i].addEventListener("click", function() { cart.save(); }); } });
Voici maintenant le script php contenant la variable $etatdupanier qui nous indique si le panier est bien enregistrer ou non
<?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;

?>
Encore une fois je constate dans l'inspecteur/réseau que mon script envoi correctement le panier, et que le php coté serveur récupère bien le message $etatdupanier. La variable est bien mise à jour dans l'inspecteur, le serveur traite bien la demande envoyée par le JS coté client. Donc en théorie tout est censé être ok mais je ne comprend pas pourquoi cette variable quant à elle niveau affichage présente une message diférent "Requête invalide."

Mon souci est donc que je n'arrive pas à afficher dans mon html ma variable $etatdupanier mise à jour, mais coté java script et php tout semble bien communiquer.

ici mon html simplifié :

<fieldset>
									<div class="form-card">
										<div class="row">
											<div class="col-7">
												<h2 class="fs-title">Personal Information:</h2>
											</div>
											<div class="col-5">

										</div>
										</div>
										



										 <div id="ajax">

// Je souhaite tous simplement afficher dans ce H5 le résultat qui s'affiche dans l'inspecteur 

										 	<h5 class="modal-title"> <span class="text-left titre"> <?= h($etatdupanier); ?> </span></h5>
											</div>


									</div>
									<input type="button" name="next" class="next action-button" value="Next"/>
									<input type="button" name="previous" class="previous action-button-previous prevOne" value="Previous"/>
</fieldset>


Je suis bloqué depuis plus d'une semaine sur le sujet c'est le moment de demander de l'aide (GPT à ses limites).
Si vous avez la gentillesse de me débloquer sur ce sujet , vous aurez ma reconnaissance éternelle hihihi je m'arrache les cheveux.

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

Posté : 31 oct. 2023, 18:30
par or 1
la console indique que index.php est appelé en méthode post ?
qu'est-ce que
echo $_SERVER["REQUEST_METHOD"];
affiche, une fois ajouté au début de index.php ?

c'est bien lors de l'appel ajax que cela affiche "Requête invalide." et non lors d'un autre appel de index.php ?

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

Posté : 31 oct. 2023, 18:48
par floconflocon
oui voici les info de la console :

entête :
URL De Requête:
http://localhost:8888/Numerova/index.php
Méthode De Requête:
POST
Code D'état:
200 OK

charge util:

cart: {"products":[{"id":2,"title":"Compatibilité","price":49}],"total":49}

appercu :

Le panier a été enregistré avec succès.
Accueil
Logiciel
Amour
Qui sommes-nous ?
...

Réponse :

Le panier a été enregistré avec succès.

<!DOCTYPE html>
<html lang="fr">
...



Qu'est-ce que echo $_SERVER["REQUEST_METHOD"]; ? Ca je ne sais pas trop l'expliquer :
if ($_SERVER["REQUEST_METHOD"] === "POST") permet de verifier si il y a bien une requete ajax mais je m'arrete la niveau compréhenssion.


c'est bien lors de l'appel ajax que cela affiche "Requête invalide." et non lors d'un autre appel de index.php ? Non c'est des l'ouverture de l'index que ce message s'affiche, et non au declenchement d'ajax.

Dès l'ouverture de l'index le echo $etatdupanier; affiche "requete invalide". dans le html fournis idem, même au clique du bouton validé, lorsque à ce moment la console prend vie et affiche le bon message; Mon echo reste en "requete invalide'.

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

Posté : 31 oct. 2023, 19:08
par or 1
appeler en ajax un autre fichier que index.php pour sauver le panier serait beaucoup plus simple, plus propre, fichier qui ne fait que cette tâche.

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

Posté : 01 nov. 2023, 14:48
par two3d
Deux "=" suffisent :
if ($_SERVER["REQUEST_METHOD"] == "POST") {
https://www.php.net/manual/fr/language. ... arison.php

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

Posté : 01 nov. 2023, 17:08
par floconflocon
Malheureusement le problème persiste toujours. inspecteur = Le panier a été enregistré avec succès. et l'affichage html "Le panier est vide"

$etatdupanier = '';

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);
// Vous pouvez renvoyer une réponse au client si nécessaire
$etatdupanier= "Le panier a été enregistré avec succès.";
}
else {
// Gérez les erreurs ou les requêtes non autorisées
$etatdupanier = 'Le panier est vide';
}
echo $etatdupanier;

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

Posté : 01 nov. 2023, 17:10
par floconflocon
En fait ce fichier php à était unpeu partout, dans le html dans l'index, mais il a un shop.php ou il s'execute. Quand le code fonctionnera il ira dans une classe php sous la forme d'une fonction. Mais pour le moment j'aimerais que le html se mette à jour.

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

Posté : 01 nov. 2023, 17:11
par floconflocon
Et merci d'essayer les gars !

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

Posté : 01 nov. 2023, 17:19
par two3d
Dans ton fichier où ya $_SERVER["REQUEST_METHOD"], met seulement ceci pour voir le résultat qui est retourné :
<?php var_dump( $_SERVER["REQUEST_METHOD"]) ?>

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

Posté : 01 nov. 2023, 18:05
par floconflocon
string(3) "GET"
Bizarrement il me sort un GET. Je ne sais pas comment interpréter cela;

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

Posté : 01 nov. 2023, 18:17
par two3d
Modifie ta condition et rajoute "if == GET" avec "if == POST", tu acceptera les deux.

Je peux te conseiller de faire un var_dump de $_SERVER dans ton fichier et de choisir ce qui te convient le mieux pour accepter les appels jQuery.

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

Posté : 01 nov. 2023, 18:20
par or 1
je me répéte :
appeler en ajax un autre fichier que index.php pour sauver le panier serait beaucoup plus simple, plus propre, fichier qui ne fait que cette tâche.

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

Posté : 01 nov. 2023, 18:34
par two3d
Là n'est pas le problème or 1 :wink:

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

Posté : 01 nov. 2023, 18:44
par or 1
si je vais sur htps://forum.phpfrance.com/php-avance/topic283645.html ce sera en méthode get
en mettant dans le code donné :
url: "htps://forum.phpfrance.com/php-avance/topic283645.html",
l'appel ajax se sera en post. donc un coup, le fichier est appelé en méthod get, un coup en post, il ne faut pas mettre de else, et ne pas afficher de message ainsi :
<h5 class="modal-title"> <span class="text-left titre"> <?= h($etatdupanier); ?> </span></h5>
mais dans le retour de la fonction ajax, en jquery.

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

Posté : 01 nov. 2023, 19:21
par floconflocon
ici le var dump server :


var_dump( $_SERVER) ;
// array(41) { ["HTTP_HOST"]=> string(14) "localhost:8888" ["HTTP_CONNECTION"]=> string(10) "keep-alive" ["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" ["HTTP_SEC_CH_UA"]=> string(65) ""Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"" ["HTTP_SEC_CH_UA_MOBILE"]=> string(2) "?0" ["HTTP_SEC_CH_UA_PLATFORM"]=> string(7) ""macOS"" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" ["HTTP_USER_AGENT"]=> string(117) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" ["HTTP_ACCEPT"]=> string(135) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ["HTTP_SEC_FETCH_SITE"]=> string(11) "same-origin" ["HTTP_SEC_FETCH_MODE"]=> string(8) "navigate" ["HTTP_SEC_FETCH_USER"]=> string(2) "?1" ["HTTP_SEC_FETCH_DEST"]=> string(8) "document" ["HTTP_REFERER"]=> string(22) "http://localhost:8888/" ["HTTP_ACCEPT_ENCODING"]=> string(17) "gzip, deflate, br" ["HTTP_ACCEPT_LANGUAGE"]=> string(44) "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,la;q=0.6" ["PATH"]=> string(29) "/usr/bin:/bin:/usr/sbin:/sbin" ["SERVER_SIGNATURE"]=> string(0) "" ["SERVER_SOFTWARE"]=> string(142) "Apache/2.4.46 (Unix) OpenSSL/1.0.2u PHP/7.4.12 mod_wsgi/3.5 Python/2.7.13 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.11 Perl/v5.30.1" ["SERVER_NAME"]=> string(9) "localhost" ["SERVER_ADDR"]=> string(3) "::1" ["SERVER_PORT"]=> string(4) "8888" ["REMOTE_ADDR"]=> string(3) "::1" ["DOCUMENT_ROOT"]=> string(25) "/Applications/MAMP/htdocs" ["REQUEST_SCHEME"]=> string(4) "http" ["CONTEXT_PREFIX"]=> string(0) "" ["CONTEXT_DOCUMENT_ROOT"]=> string(25) "/Applications/MAMP/htdocs" ["SERVER_ADMIN"]=> string(15) "[email protected]" ["SCRIPT_FILENAME"]=> string(44) "/Applications/MAMP/htdocs/Numerova/index.php" ["REMOTE_PORT"]=> string(5) "61798" ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" ["REQUEST_METHOD"]=> string(3) "GET" ["QUERY_STRING"]=> string(0) "" ["REQUEST_URI"]=> string(10) "/Numerova/" ["SCRIPT_NAME"]=> string(19) "/Numerova/index.php" ["PHP_SELF"]=> string(19) "/Numerova/index.php" ["REQUEST_TIME_FLOAT"]=> float(1698859189.4315) ["REQUEST_TIME"]=> int(1698859189) ["argv"]=> array(0) { } ["argc"]=> int(0) }

Ici cela dépasse ma compréhension...