Export champs BD MySql prix HT en TTC

Résolu/Fermé
Signaler
-
 arnaud -
Bonjour,

Je souhaite exporter certains champs de ma $db, dont 1 qui est un prix HT (Champs "price" dans table "product" de Prestashop. Je voudrais appliquer a ce champs l'ajout de la TVA(*1.196) pour obtenir un prix TTC.

voici le scrpit que j'ai fait. Pourriez vous m'expliquer quelle fonction utiliser s'il vous plait.

?php
$db = mysql_connect('localhost', '$user', '$pass');
mysql_select_db('prestashop',$db);
$sql = 'SELECT id_product,supplier_reference,price FROM ps_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_array($req))
{
echo ''.$data['id_product'].' '.$data['supplier_reference'].' '.$data['price'].'<br>';
}
mysql_close();
?>

Par la suite, je voudrais déduire de ce prix TTC un Montant de reduction TTC qui se trouve sur une autre table "ps_specific_price" champ "reduction", mais avant tout c'a il faut que je comprenne les fonctions SUM() mais je nage.

Merci par avance

9 réponses

Messages postés
513
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
20 novembre 2011
187
tu as essayé :

$sql = 'SELECT id_product,supplier_reference,price*1.196 FROM ps_product';

?
Merci, cette première etape fonctionne.
J'ai desormais uneautre difficulté. le price*1.196 affichée est avec 10 chiffres après la virgule, et je souhaite que ce soit un nombre entier. J'ai pas bien compris comment utiliser le fonction round (, 0). Pourrait tu m'aider a la placer s'il te plait ?
Voici l'etat de mon script:

<?php
$db = mysql_connect('localhost', '$user', '$pass');
mysql_select_db('prestashop',$db);
$sql = 'SELECT id_product,supplier_reference,price*1.196 FROM ps_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo ''.$data['id_product'].' '.$data['supplier_reference'].' '.$data['price*1.196'].'<br>';
}
mysql_close();
?>

Merci d'avance
Messages postés
513
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
20 novembre 2011
187
tu peux essayer avec cette requête :

$sql = 'SELECT id_product,supplier_reference,ROUND(price*1.196) FROM ps_product';

ou

$sql = 'SELECT id_product,supplier_reference,ROUND(price*1.196, 2) FROM ps_product';

si tu veux arrondir à 2 chiffres après la virgule
merci supernico.
Alors j'attaque la 3e étape:
Je voudrait maintenant affichier le resultat de :
'SELECT ROUND(price*1.196) FROM ps_product'-'SELECT reduction FROM ps_specific_price'
Je ne trouve pas comment faire cette opération dans $sql, et surtout je me pose la question, comment faire pour que les champs correspondent bien entre eux avec les id-product qui sont en commun sur les 2 tables.
Voici mon sript a ce jour :

<?php
$db = mysql_connect('localhost', '$user', '$pass');
mysql_select_db('prestashop',$db);
$sql = 'SELECT id_product,supplier_reference,ROUND(price*1.196) FROM ps_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo ''.$data['id_product'].' ';
echo ''.$data['supplier_reference'].' ';
echo ''.$data['ROUND(price*1.196)'].' ';
echo "<br>";
}
mysql_close();
?>

Merci d'avance pour votre aide.
Après je suis en train d'étudier comment faire pour ecrire ces resultats dans un fichier text avec les commandes fopen("text.txt","w+"); mais ce n'est pas encore claire, et comme vous devez le constater, le php est un immense ocean inconu, mais je souhaite comprendre ces methodes.

Très cordialement
Messages postés
513
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
20 novembre 2011
187
alors tu peux essayer ce code :

$sql = 'SELECT t1.id_product,t1.supplier_reference,ROUND(t1.price*1.196)-t2.reduction FROM ps_product AS t1 LEFT JOIN ps_specific_price AS t2 ON t1.id_product=t2.id_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo $data[0].' ';
echo $data[1].' ';
echo $data[2].' ';
echo "<br>";
}
Merci encore super nico,
Voici mon scrip operationel avec la fonction echo pour visualiser le resultat.
Pour ceux qui liront ce fil de discution :

<?php
$db = mysql_connect('localhost', '$user', '$pass');
mysql_select_db('prestashop',$db);
$sql = 'SELECT t1.id_product,t1.supplier_reference,ROUND(t1.price*1.196)-t2.reduction FROM ps_product AS t1 LEFT JOIN ps_specific_price AS t2 ON t1.id_product=t2.id_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo ''.$data['id_product'].' ';
echo ''.$data['supplier_reference'].' ';
echo ROUND (''.$data['ROUND(t1.price*1.196)-t2.reduction'].' ');
echo "<br>";
}
mysql_close();
?>

Maintenant je vais m'ateller a sauvegarder ces resultat dans un fichier text.

Encore merci.
Je ne mets pas resolu au cas ou je n'arrive pas a finaliser de sauvegarder sur un fichier text.
Bonjour supernico,

J'ai a nouveau besoin d'aide.
J'arrive à obtenir toutes mes info via les requetes à la base de données et a les afficher a l'écran via la fonction echo ''. Je souhaite maintenant sauvegarder ces info dans un fichier texte. J'utilise donc la fonction fopen avec l'option "w", et la fonction write($fichier_txt,"") pour inscrire les données avec du texte et des tabulations entre les champs. Mon problème est que le fichier text est bien créé, mais il n'y a que le texte qui s'inscrit ainsi que les tabulations, mais les retours de requete .$data n'apparaissent pas, et c'a ne genere qu'une seule ligne alors que j'ai plusieurs enregistrements. Je n'arrive pas à savoir d'où pourrait venir le problème. Pourriez vous m'aider.

Voici mon scrip à ce jour, et le resultat du fichier texte :

<?php

$db = mysql_connect('localhost', '$user', '$pass');
mysql_select_db('prestashop',$db);
$sql = 'SELECT t1.id_product,t1.supplier_reference,ROUND(t1.price*1.196)-t2.reduction FROM ps_product AS t1 LEFT JOIN ps_specific_price AS t2 ON t1.id_product=t2.id_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
$fichier_txt = fopen("texte.txt", "w");

fwrite($fichier_txt, $data['supplier_reference']);
fwrite($fichier_txt, "\t");
fwrite($fichier_txt,"http://magasin.com/minipageproduct.php?id_product=");
fwrite($fichier_txt, $data['id_product']);
fwrite($fichier_txt, "\t");
fwrite($fichier_txt, $data['ROUND(t1.price*1.196)-t2.reduction']);
fwrite($fichier_txt, "\n");

fclose ($fichier_txt);
mysql_close();
?>

http://magasin.com/minipageproduct.php?id_product=

Merci par avance de votre aide.
Messages postés
513
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
20 novembre 2011
187
Peut-être comme ça :

<?php
// connexion à la BDD
$db = mysql_connect('localhost', '$user', '$pass');
mysql_select_db('prestashop',$db);
// exécution de la requête
$sql = 'SELECT t1.id_product,t1.supplier_reference,ROUND(t1.price*1.196)-t2.reduction FROM ps_product AS t1 LEFT JOIN ps_specific_price AS t2 ON t1.id_product=t2.id_product';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// remplissage d'une variable avec le contenu du fichier
$contenu_fichier = "";
while($data = mysql_fetch_assoc($req))
{
$contenu_fichier .= $data['supplier_reference']."\t";
$contenu_fichier .= "http://www6.magasin.com/?tdfs=1&kw=Store+Directory&term=Online%20eCommerce%20Shopping%20Platform&term=Business%20Directory%20Listing%20Service&term=Help%20Desk%20Ticket%20System&backfill=0";
$contenu_fichier .= $data['id_product']."\t";
$contenu_fichier .= $data['ROUND(t1.price*1.196)-t2.reduction']."\n";
}
// écriture du fichier
$fichier_txt = fopen("texte.txt", "w");
fwrite($fichier_txt, $contenu_fichier);
fclose ($fichier_txt);

mysql_close();
?>
Messages postés
513
Date d'inscription
dimanche 30 décembre 2007
Statut
Membre
Dernière intervention
20 novembre 2011
187
En fait ton while bouclait uniquement sur fopen ;)

De plus je te propose de stocker tout le contenu de ton fichier dans une variable pour l'écrire en une seule fois, il est préférable d'accéder une seule fois au disque dur, pour des raisons de performance et d'usure (mais ça se voit surtout au niveau des perf)

Voilà j'espère que ça va marcher (je viens de me lever, pas encore très bien réveillé lol)
Salut supernico,

C'a marche ! Juste une petite chose que je n'arrive pas a affiner au niveau affichage. La requette $data['ROUND(t1.price*1.196)-t2.reduction']. affiche un chiffre avec 6 décimale du genre 19.00000 et j'aimerai que ce soit un entier. J'assaie de rajouter un round () mais la syntax n'échappe et je bloque.
Pourriez vous me debloquer c'a.

Mon scrip donne :

<?php
//connection a la base de donnée
$db = mysql_connect('localhost', '$user', '$pass');
//séléction de la base Prestashop
mysql_select_db('prestashop',$db);
//Séléction des champs des tables correspondantes avec calcul pour Prix reduit
$sql = 'SELECT t1.id_product,t1.supplier_reference,ROUND(t1.price*1.196)-t2.reduction FROM ps_product AS t1 LEFT JOIN ps_specific_price AS t2 ON t1.id_product=t2.id_product';
//Execution de la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//Définition de la variable avec le contenu du fichier
$contenu_fichier="";
//Boucle pour afficher tous les produits
while($data = mysql_fetch_assoc($req))
{
$contenu_fichier.=$data['supplier_reference']."\t";
$contenu_fichier.="http://magasin.com/minipageproduct.php?id_product=";
$contenu_fichier.=$data['id_product']."\t";
$contenu_fichier.=$data['ROUND(t1.price*1.196)-t2.reduction']."\n";
}
//Ecriture du fichier
$fichier_txt = fopen("texte.txt", "w");

fwrite($fichier_txt, $contenu_fichier);
fclose ($fichier_txt);
//Deconnection de la base de donnée
mysql_close();
?>

Merci d'avance
Ok, c'est vu, je ne mettais pas la fermeture de la parenthèse au bon endroit. Donc pour le resultat de cette requete en nombre entier :

$contenu_fichier.=ROUND ($data['ROUND(t1.price*1.196)-t2.reduction'])."\n";

Je mets ce post en resolu, mais au vu de tout ce qui a été expliqué, j'aimerai, si c'est possible que le modérateur puisse modifier le titre en :
Export dans fichier text champs de plusieurs tables avec formule de Calcul et mise en forme sur resultat de requete mysql.

Merci a vous, supernico, pour le temps que vous m'avez consacré, et espérant que ce post puisse servir à d'autres.