Export champs BD MySql prix HT en TTC

Résolu/Fermé
arnaud - 9 oct. 2011 à 22:54
 arnaud - 16 oct. 2011 à 11:50
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

A voir également:

9 réponses

supernico Messages postés 513 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 20 novembre 2011 193
9 oct. 2011 à 23:55
tu as essayé :

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

?
0
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
0
supernico Messages postés 513 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 20 novembre 2011 193
10 oct. 2011 à 19:28
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
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
supernico Messages postés 513 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 20 novembre 2011 193
11 oct. 2011 à 00:16
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>";
}
0
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.
0
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.
0
supernico Messages postés 513 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 20 novembre 2011 193
15 oct. 2011 à 08:57
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();
?>
0
supernico Messages postés 513 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 20 novembre 2011 193
15 oct. 2011 à 09:04
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)
0
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
0
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.
0