'En stock!' alors que stock épuisé - Ajax PHP

Résolu/Fermé
ICAN - Modifié par ICAN le 29/12/2014 à 12:19
 ICAN - 29 déc. 2014 à 18:34
Bonjour,

Ma demo de site ecommerce créée l'année dernière qui fonctionnait très bien, à présent déraille sans que je n'ai touché à rien.... C'est vrai !
Je sélectionne un article, puis son coloris, la longueur désirée ainsi que la quantité, et en fonction de ces critères, renseignés par l'utilisateur, le prix s'affiche ainsi que la disponibilité.

Le problème, c'est qu'aujourd'hui tout est 'En stock!' même si dans ma db ça ne l'est pas.
Merci d'avance pour vos agréables renseignements.


<?php

if ( isset($_POST['coloris']) && isset($_POST['longueur_fil']) && isset($_POST['quantite_fil']) ){
include '../mysql_connect.php';
$color = mysql_real_escape_string($_POST['coloris']);
$long = mysql_real_escape_string($_POST['longueur_fil']);
$quant = $_POST['quantite_fil'];

$query="SELECT prods_ref, prods_prix, prods_stock, prods_coloris, prods_longueur FROM pivoine_prods WHERE prods_souscat='fil_a_coudre' AND prods_coloris='$color' AND prods_longueur='$long' ";
$result = mysql_query($query) or die('Erreur sql'.mysql_error());
$dat=mysql_fetch_assoc($result);
$ref= $dat['prods_ref'];
$color= $dat['prods_coloris'];
$long= $dat['prods_longueur'];
$prix= $dat['prods_prix'];
$prix = number_format($prix, 2);
$stock = $dat['prods_stock'];

// Check disponibilité du Stock
$r = array();

if($stock < 1){
$r['statut'] = 'stock_epuise';
$r['message'] = 'Stock épuisé.';

}
else if ($stock < $quant){
$r['statut'] = 'stock_insuffisant';
$r['message'] = ' Attention, seulement "'.$stock.'" pièces sont disponibles dans l\'immédiat.';

}
else if ($stock < 11){
$r['statut'] = 'derniere_piece';
$r['message'] = 'Attention, dernières pièces en stock !';

}
else {
$r['statut'] = 'stock_ok';
$r['message'] = 'En Stock !';
}

// Prix
$r['prix'] = $prix;

}
else {
$r['statut'] = 'notok';
}
include('array2json.php');
echo array2json($r);


----------------


// JavaScript Document


var getStatutStock = function(){

var color = $("input[name='coloris']:checked").val();
var long = $("#longueur_fil").val();
var quant = $("input[name='quantite_fil']").val();


var inputIsOk = true;
if(color=='') inputIsOk = false;
if(long=='') inputIsOk = false;
if(quant=='') inputIsOk = false;

if(inputIsOk){
$.ajax({
type : 'POST',
url : "ajx/process_stockprix_fil.php",
data : {coloris:color,longueur_fil:long,quantite_fil:quant},
success : function(data) {

var affiche_stock = $("span.affiche_stock");
affiche_stock.html(''); // on vide le message d'erreur

var affiche_prix = $("span.affiche_prix");
affiche_prix.html('');


switch(data.statut){
case 'stock_ok': // Stock OK
affiche_stock.append(data.message);
affiche_prix.html(data.prix.toFixed(2)+" Eur");
showAdd2Cart();
break;
case 'derniere_piece': // Attention, dernière pièce en stock
affiche_stock.append(data.message);
affiche_prix.html(data.prix.toFixed(2)+" Eur");
showAdd2Cart();
break;
case 'stock_insuffisant': // Stock Insuffisant
affiche_stock.append(data.message);
affiche_prix.html(data.prix.toFixed(2)+" Eur");
showAdd2Cart();
break;

case 'stock_epuise': // Stock Epuisé
affiche_stock.append(data.message);
affiche_prix.html(data.prix.toFixed(2)+" Eur");
hideAdd2Cart();
break;
default:
break;
}
}, // fin success :function(data) {
error : function(e){},
dataType : 'json'
}); // fin $.ajax

} // fin if(inputIsOk)
};

var hideAdd2Cart = function() {
$("input[name='submit_fils']").hide();
};

var showAdd2Cart = function() {
$("input[name='submit_fils']").show();
};




jQuery(function($){
// Jquery est bien chargé
$('input[name="coloris"]').change(function(){
getStatutStock();
});

$('select[name="longueur_fil"]').change(function(){
getStatutStock();
});

$('input[name="quantite_fil"]').change(function(){
getStatutStock();
});


});
A voir également:

3 réponses

Bonjour

Tu es sûr de ta fonction array2json ? Essaye avec un message sans apostrophe à la place de ' Attention, seulement "'.$stock.'" pièces sont disponibles dans l\'immédiat.'. Car si tu échappes cette apostrophe correctement en PHP, pour la transmission en json, j'en suis moins sûr.

Edit : sans apostrophes et aussi sans doubles quotes, il y a une erreur possible en json avec ces caractères.
1
Bonjour le Père,

Je t'attendais avec impatience ;) ! Comme je m'en doutais, tu as trouvé instantanément la source du problème, je te décerne donc un AWARD pour tes compétences et ton aide.
La solution était :
" Attention, seulement $stock pièces sont disponibles.";
Je ne vois pas comment inclure une apostrophe pour "dans l'immédiat" mais on va faire sans..., OK, je prends bien note de ce cas de figure version json, et de sa syntaxe pour à l'avenir.

Merci beaucoup, Belle fin d'année
0
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 16
Modifié par Mirzo le 29/12/2014 à 12:58
Bonjour ICAN,

Est-ce que tu as vérifié le contenu de ta variable
$stock
avant qu'elle passe dans tes conditions "if" ?

Cela permettra dans un premier temps de savoir si la donnée prods_stock est bien récupérée avant de l'utilisée.

--
0
Bonjour Mirzo,

Quand je remplace ma série de if juste par:

$r['statut'] = 'stock_epuise';
$r['message'] =$stock;

j'ai bien la quantité en stock pour chaque ref qui s'affiche.

En revanche, dès que je demande une quantité supérieure à celle en stock, tout se bloque : le prix unitaire -si je change de ref- ne s'update pas, ni la disponibilité.... huuummm

Merci pour tes bonnes idées :D
0
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 16
29 déc. 2014 à 14:20
A mon avis cela pourrais venir de ton ajax, est tu sûr de ton url du fichier php appelé "ajx/" ?
url : "ajx/process_stockprix_fil.php",
0
ICAN > Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015
29 déc. 2014 à 14:29
Oui, je confirme l'url, pas de problème de ce côté là...
C'est au niveau de mes conditions que problème : il passe directement à Stock OK.
0
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 16 > ICAN
29 déc. 2014 à 16:45
Tu peux essayer de tester le résultat de tes conditions PHP avec un
var_dump($stock < 1);
par exemple dans ton php. Cela te permettra de voir quelle condition poserais éventuellement problème
0
Merci Mirzo pour ton aide, mais le Père a mis le doigt sur le problème. Je m'en vais de ce pas lui décerner l'award qu'il mérite. Merci encore :)
0
Mirzo Messages postés 75 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 14 octobre 2015 16 > ICAN
Modifié par Mirzo le 29/12/2014 à 18:03
De rien, j'aurais essayé ;) !
0