script / maj de table

Répondre
joejac
le 07/01/2011 à 18:31
joejac
Bonjour,

Je suis débutant et je cherche à réaliser une mis à jour sur une table sql. (en php)

L'idée est que j'ai un tarif dans ma table sql, et je souhaite écraser les anciens prix sans perdre les autres données. Eventuellement même pouvoir rajouter facilement des données.

Le fichier "mis à jour" est au format CSV. sous la forme "ref";"PV";"PA"

Merci d'avance
Jacques
moogli
le 08/01/2011 à 08:18
moogli
salut,

je suppose que la ref est unique, dans ce cas je pense que la requete REPLACE de mysql devrait aider.

tu peut aussi utiliser une requete préparée pour faire bonne mesure ;)

Par exemple si tu a php 5 et PDO

<?php
try
{
$dbh = new PDO('mysql:host:localhost:dbname=test','utilisateur mysql ','mot de passe');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
exit($e->getMessage());
}
$file = new SplFileObject('test.csv');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl(';');

$stmt = $dbh->prepare("REPLACE INTO latableproduit (PV,PA) VALUES (?, ?) where ref=?");

foreach($file as $row)
{
$stmt->execute(array($row[1],$row[2],$row[0]));
}
?>


a tester mais le principe est la
Pour plus d'info sujet de base

@+
Il en faut peu pour être heureux !!!!!
joejac
le 08/01/2011 à 16:47
joejac
J'ai fais mon bou de code avec plusieurs exemple trouvé sur le net. Voila ce que ça donne :

<?php

// connection à la base

mysql_connect("localhost", "root", "")or die(mysql_error());
mysql_select_db("lmb")or die(mysql_error());


// Lecture du fichier Test.csv "ref_article";"prix_public_ht";"prix_achat_ht"

$row = 1;
$fp = fopen ("test.csv","r");
while ($data = fgetcsv ($fp, 1000, ";"))
{
$num = count ($data);
// Update les valeurs du fichier dans la base SQL
mysql_query("UPDATE lmb SET prix_pulbic_ht=$data[1], where ref_article=$data[0]")or die(mysql_error());
$row++;
}
fclose ($fp);

mysql_close();

?>

Mon fichier CSV resemble à ça :

"A-000000-00012";"7,03";"4,1"
"A-000000-00013";"7,03";"4,1"
"A-000000-00014";"9,43";"5,5"
"A-000000-00015";"9,43";"5,5"

J'ai une erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '03, where ref_article=A-000000-00012' at line 1

Et je trouve pas le pb... help please !

@+
moogli
le 08/01/2011 à 20:31
moogli
oui tu a un problème de syntaxe SQL, je suppose que le prix_public est un champ texte et tu n'a pas mis de '' autour de $data[1]

@+
Il en faut peu pour être heureux !!!!!
joejac
le 10/01/2011 à 09:58
joejac
Bonjour,

ça y est j'ai corrigé l'erreur qui était une syntax différente voici le script qui fonctionne et ne me donne pus d'erreur :
<?php

// connection à la base

mysql_connect("localhost", "root", "")or die(mysql_error());
mysql_select_db("lmb")or die(mysql_error());


// Lecture du fichier Test.csv "ref_article";"prix_public_ht";"prix_achat_ht"

$row = 1;
$fp = fopen ("test.csv","r");
while ($data = fgetcsv ($fp, 1000, ";"))
{
$num = count ($data);
// Update les valeurs du fichier dans la base SQL

$sql = "UPDATE lmb
SET prix_pulbic_ht = REPLACE(prix_public_ht,$data[1])
where ref_article=$data[0]
"or die(mysql_error());

ECHO $data[0], " ", $data[1],"<br>";

$row++;
}
fclose ($fp);

mysql_close();

?>

Sauf ... qu'il marche pas

Il n'y a aucun changement dans ma table SQL.

Le fichier CSV ressemble à ça :
"A-000000-00012";"7,03";"4,1"
"A-000000-00013";"7,03";"4,1"
"A-000000-00014";"9,43";"5,5"
"A-000000-00015";"9,43";"5,5"

la bd s'appel "lmb (285)" et la table "articles" je pense que c'est à ce niveau là que j'ai un pb.

Autre question je travail en hors connection avec EasyPHP pour développer et Xamp pour LMB ils ont chacun leur répertoir MYSQL le problème pourrait venir d'ici non ???

merci de tes lumières !
@+
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours