8722 sujets

Développement web côté serveur, CMS

Bonjour,

j'ai crée un site permettant de vendre en ligne et de gérer en même temps la caisse d'un magasin. je viens de mettre en place un autre site internet de destockage et je voudrais que les sorties de stocks pour les articles communs au destockage et la caisse du magasin décrémentent le stocks du site de destockage.

j'ai donc 2 bases de données :
- artcreatif : table sortiecaisse (table temporaire pour mise à jour des stocks de la boutique réelle)
- artvarpeel : tables peel_produits (correspondance id/reference) et peel_stocks (id/stock)

dans mon script je dois d'abord vérifier l'existence de l'article sorti par la caisse, dans la table peel_produits et récupérer l'id dont il faudra recalculer le stock dans la table peel_stocks.

Tout fonctionne sauf la partie 2 ou j'obtiens cette erreur :

Array ( Smiley conf => Confirmer vente Smiley datesortie => 2013/07/12 Smiley id => 149 ) UPDATE peel_stocks SET stock = stock - (SELECT qtesortie FROM artcreatif.sortiecaisse) WHERE EXISTS (SELECT id FROM artvarpeel.peel_produits WHERE artvarpeel.peel_produits.reference = artcreatif.sortiecaisse.reference)Unknown column 'artcreatif.sortiecaisse.reference' in 'where clause'

pourriez-vous m'aider ?
par avance merci,
Larentia

<?php // 1- enregistrement des sorties de caisse de la boutique réelle ---------------------------------------------------------------
require_once('../Connections/artcreatif_local2.php');

print_r($_POST);
mysql_select_db($database_artcreatif_local2, $artcreatif_local2);
  
$dates=$_POST['datesortie'];
$id=$_POST['id'];


$sql ="INSERT INTO stocks 
(datetransaction,annee,clientid,fournisseur,reference,codebarre, designation,designation1,prixachat,sorties,emplacement,prixventettc,codetva)
SELECT datesortie,annee,clientid,fournisseur,reference,codebarre,designation,designation1,prixachat,qtesortie,emplacement,prixventettc,codetva FROM sortiecaisse"; 			
//WHERE manuel='Non'
$Result1 = mysql_query($sql, $artcreatif_local2) or die(mysql_error());


// 2-sorties stocks base destockage PEEL--------------------------------------------------------------------------------------
require_once('../Connections/destockage.php');
mysql_select_db($database_destockage, $destockage);


$sql4 ="UPDATE peel_stocks SET stock = stock - (SELECT qtesortie FROM artcreatif.sortiecaisse)
		WHERE EXISTS (SELECT id FROM artvarpeel.peel_produits WHERE artvarpeel.peel_produits.reference = artcreatif.sortiecaisse.reference)" ;

echo $sql4;

$Result4 = mysql_query($sql4, $destockage) or die(mysql_error());
  



// 3- vider la table temporaire sortiecaisse-------------------------------------------------------------------------------------
require_once('../Connections/artcreatif_local2.php');
$sql2 ="TRUNCATE TABLE sortiecaisse";

$Result12 = mysql_query($sql2, $artcreatif_local2) or die(mysql_error());

// 4- marquer les remises du jour pour un client----------------------------------------------------------------------------------

$sql3="UPDATE cartefid SET tagcaisse='Oui' WHERE dateachat='$dates' AND clientid=$id";

$Result3 = mysql_query($sql3, $artcreatif_local2) or die(mysql_error());

$_SESSION = array();

header("Location:paniercaisse.php");
exit; ?>
1) il serait temps de passer au mysqli_ au lieu du mysql_ (je te laisse aller voir ma signature et suivre le lien à l'intérieur pour savoir comment faire^^)


2) dans ton cas précis :
-> tu veux faire une requête sur 2 bases en même temps (et non 2 requêtes chacune sur une base)
-> mysqli_query est lié à $link et donc à la connexion (c'était déjà le cas, mais pas en explicite).
-> $link en version classique (ci-dessus) est lié à UNE base de données
-> Dans la version classique, c'est donc impossible.
-> En lisant un peu la doc de PHP, on découvre que, oh bonheur, 'nom_de_la_db' est optionnel dans mysqli_connect (autant que l'était mysql_select_db() en fait)
-> donc en théorie, en ne spécifiant pas de base de données lors de la connexion et en spécifiant bien le nom de la base dans la requête, ça devrait marcher tout seul.

Dans ce que j'ai trouvé, ça implique juste à ce que ton user ait les droits sur les deux bases, bien sûr ^^
Modifié par Lothindil (12 Jul 2013 - 14:32)
Bonjour et merci pour votre réponse,

j'ai fait les modifs proposées dans la partie 2 de mon script qui générait une erreur, je n'ai plus de code erreur mais la mise à jour de la bdd/table artvarpeel/peel_stocks à partir de artvarcreatif/sortiecaisse ne se fait pas !
j'ai peut être une erreur dans la construction de ma requête ?

// 2-sorties stocks base destockage PEEL--------------------------------------------------------------------------------------
//require_once('../Connections/destockage.php');
//mysql_select_db($database_destockage, $destockage);

$link = mysqli_connect('localhost', 'root', '');

$sql4 ="UPDATE peel_stocks SET stock = stock - (SELECT qtesortie FROM artcreatif.sortiecaisse)
		WHERE EXISTS (SELECT id FROM artvarpeel.peel_produits WHERE artvarpeel.peel_produits.reference = artcreatif.sortiecaisse.reference)" ;

//$Result4 = mysql_query($sql4, $destockage) or die(mysql_error());
$ressource=mysqli_query($sql4,$link);
mysqli_fetch_assoc($ressource);
Il faudrait que tu ajoutes une gestion des erreurs à ton code pour t'aider à trouver la source du problème.


if ( !mysqli_query($link, $sql) ) {
    printf("Erreur SQL : %s\n", mysqli_error($link));
}
je viens de le faire et je n'ai pas d'erreur !!! ahhhhh je ne comprends pas (bon ça fait 3ans que je n'ai pas pratiqué le php je dois être rouillée ...)

$link = mysqli_connect('localhost', 'root', '');

$sql4 ="UPDATE peel_stocks SET stock = stock - (SELECT qtesortie FROM artcreatif.sortiecaisse)
		WHERE EXISTS (SELECT id FROM artvarpeel.peel_produits WHERE artvarpeel.peel_produits.reference = artcreatif.sortiecaisse.reference)" ;


$ressource=mysqli_query($sql4,$link);

if ( !mysqli_query($link, $sql4) ) {
    printf("Erreur SQL : %s\n", mysqli_error($link));
}
mysqli_fetch_assoc($ressource);
Tu as testé ta requête indépendamment de ton code, dans phpMyAdmin par exemple, pour t'assurer qu'elle retourne bien ce que tu souhaites ?

Sinon je remarque que tu as inversé les paramètres dans la fonction mysqli_query(). C'est le lien de la connexion puis la requête et non l'inverse.