Modifier la valeur existante d'un champ par une fonction de cette valeur [Résolu]

habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 1 avril 2009 à 08:38 - Dernière réponse : habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention
- 8 avril 2009 à 16:05
Bonjour à tous ,


Voilà mon problème :


Je fais tourner un petit script en php afin que la valeur d'une donnée d'un de mes champs soit modifiée à une date précise :


<?php


$timestamp= mktime( 18,00,00,date("m"),date("d"),date("Y"))-time();


if ( $timestamp <= 0 ) {


echo $row_Recordset1['prix_ttc'] * 0.99 ;
}
else  {
echo $row_Recordset1['prix_ttc'];
}


?>


En l'occurence , le prix passe de x à x*0.99 à 18H .


Je souhaite alors que cette nouvelle valeur de prix ( x*0.99 ) remplace l'ancienne ( x ) dans le champ pvc_ttc de ma table shop_monnaies ( pour tous les id ) .


J'ai vu que pour remplacer une donnée il fallait utiliser :
UPDATE ; mais il faut alors préciser une valeur et là , je bloque ...


Quelqu'un peut-il m'aider ?


 
Afficher la suite 

Votre réponse

33 réponses

Meilleure réponse
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 2 avril 2009 à 13:44
3
Merci
L'erreur qu'il t'affiche te dit qu'a la ligne 67 tu a une variable non definiE.Donc en regardant la ligne 67 qui est : $queryString "UPDATE table_shop_monnaies SET prix_ttc ".$newprice;

On s'aperçois que effectivement il y a une erreur. C'est un probleme de Case.

Tu avais defini la variable au prealable comme cela :

if ( $timestamp <= 0 ) {
$newPrice = $row_Recordset1['prix_ttc'] * 0.99;
} else  {
$newPrice = $row_Recordset1['prix_ttc'];
}

Tu remarque que c'est pas la meme variable : $newprice / $newPrice

Donc dans ta ligne de l'Update il manque la majuscule du "P" a $newprice.

Ce qui devient donc :
$queryString "UPDATE table_shop_monnaies SET prix_ttc ".$newPrice;

Merci Orange73 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Orange73
Meilleure réponse
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 2 avril 2009 à 21:21
3
Merci
Bonsoir ,
 Tout d'abord , merci pour la remarque sur le P de newPrice car je pense que je serai passer devant trés longtemps sans voir la faute ...


Néanmoins , voilà le script ...il ne génère plus de message d'erreur , mais en revanche , il n'écrit pas non plus les données dans la base .

<?php


$timestamp= mktime( 18,00,00,date("m"),date("d"),date("Y"))-time();




if ( $timestamp <= 0 ) {
$newPrice = $row_Recordset1['prix_ttc'] * 0.99;


} else  {
$newPrice = $row_Recordset1['prix_ttc'];
}


echo $newPrice ;
?><?php$queryString "UPDATE table_shop_monnaies SET prix_ttc ".$newPrice;
mysql_query($queryString);
?>

J'ai essayé plusieurs choses par ailleurs ; que j'ai oublié entre temps ...mais en faisant quelque chose comme un UPDATE shop_monnaies SET prix_ttc = ' $newPrice'; j'arrivais à écrire de nouvelles données dans le champ pvc_ttc .
Malheureusement , tous les id prenaient la meme valeur , et une baisse de prix avant lieu à chaque fois que j'actualisais .
Au départ , je pensais que cette formule :

$timestamp= mktime( 18,00,00,date("m"),date("d"),date("Y"))-time();

allait me permettre de changer les PV tous les jours à la meme heure puisque ; si time() représente l'heure d'aujourd'hui , et mktime( 18,00,00,date("m"),date("d"),date("Y")) , l'heure d'aujourd'hui dès qu'il sera 18 heures ; le résultat de $timestamp = 0 devrait me suffire pour afficher un PV*0.99 mais apparemment ce n'est pas aussi simple ...
En effet , j'avais testé le cas $timestamp = 0 et il ne se passait rien ...

Je pense pourtant que la solution est à portée de clavier ...

Merci habroc 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de habroc
Meilleure réponse
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 2 avril 2009 à 21:53
3
Merci
Voilà , ça m'est revenu :

<?php


mysql_query("UPDATE shop_monnaies SET prix_ttc = $newPrice ");


?>

J'écris bien dans mon champ pvc_ttc de nouvelles données ( x*0.99) mais une nouvelle valeur ( x*0.99 de x*0.99 ) est mise à chaque fois que j'actualise ; et tous mes id ont la meme valeur ???

Merci habroc 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de habroc
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 1 avril 2009 à 16:53
0
Merci
en créant une variable pardi :-)

<?php

$timestamp= mktime( 18,00,00,date("m"),date("d"),date("Y"))-time();

if ( $timestamp <= 0 ) {
$newPrice = $row_Recordset1['prix_ttc'] * 0.99;
echo $newPrice ;
}
else  {
echo $row_Recordset1['prix_ttc'];
}

?>

et ensuite tu fais ton UPDATE :

<?php

UPDATE table_prices SET price = $newPrice;

?>
Commenter la réponse de Orange73
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 1 avril 2009 à 17:02
0
Merci
Correction :

<?php

$timestamp= mktime( 18,00,00,date("m"),date("d"),date("Y"))-time();

if ( $timestamp <= 0 ) {
$newPrice = $row_Recordset1['prix_ttc'] * 0.99;
echo $newPrice ;
}
else  {
$newPrice = $row_Recordset1['prix_ttc'];
echo $newPrice ;
}

?>
Commenter la réponse de Orange73
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 1 avril 2009 à 17:03
0
Merci
Optimisé :

<?php

$timestamp= mktime( 18,00,00,date("m"),date("d"),date("Y"))-time();

if ( $timestamp <= 0 ) {
$newPrice = $row_Recordset1['prix_ttc'] * 0.99;
} else  {
$newPrice = $row_Recordset1['prix_ttc'];
}

echo $newPrice ;

?>
Commenter la réponse de Orange73
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 1 avril 2009 à 20:41
0
Merci
Merci pour la rapidité de ta réponse orange 73 ; néamoins , je n'arrive pas à Updater ...

Voilà ce que j'ai fait :

Ma table s'appelle shop_monnaies , et le champ qui contient les prix de vente s'appelle prix_ttc

J'ai donc suivi tes instructions et j'ai fait :

<?php


UPDATE shop_monnaies SET prix_ttc = $newPrice;


?>

Mais là ,lorsque j'essaie de voir le résultat , j'ai un :

Parse error : parse error in C:\wamp\www...

J'ai raté quoi ?
Commenter la réponse de habroc
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 1 avril 2009 à 20:48
0
Merci
1/ Tu veux modifier le prix ttc de toutes les lignes de ta table ?

2/ quel est l'erreur entiere ?

3/ Ton code entier ?
Commenter la réponse de Orange73
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 1 avril 2009 à 21:09
0
Merci
En effet , je souhaite modifier à heure fixe , quotidiennement ,  tous les prix de ma table shop_monnaies .
Le script fonctionne bien . Avant l'heure ( 18 H ) le prix qui s'affiche est bien x et après , (x*0.99).
Mais c'est pour Updater que ça coince ...

Remarque : je ne sais pas si c'est important , mais mon champ pvc_ttc est de type float , unique et index dans Phpmyadmin . 

L'erreur qui s'affiche dans son entier est :

Parse error : parse error in C:\wamp\www\mabasededonnees\Untitled-1_2i0n7hfrkx.php on line 67

Autre remarque : la suite de nombre et de chiffres qui s'affiche après Untitled-1_ est différente à chaque fois que j'essaie d'afficher .
Si cela peut aider , je travaille avec dreamweaver CS3 ...
Commenter la réponse de habroc
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 1 avril 2009 à 21:48
0
Merci
Je viens de tenter ceci :

mysql_query("UPDATE table_shop_monnaies SET prix_ttc = '$newprice' ");

Mais là , j'ai l'erreur suivante qui s'affiche :

Erreur Live Data :

9900        ( c'est le prix qui est dans ma base pour l'id = 1 multiplié par 0.99 )
Notice : Undefined Variable :
newpricein
C:\wamp\www\bla bla
Commenter la réponse de habroc
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 2 avril 2009 à 07:25
0
Merci
Salut,

Comme le dit Orange il faudrait voir le code complet, parce que là ce n'est pas possible de t'aider.
Ta requête semble correcte. L'erreur signifie que la variable $newprice n'est pas définie.
L'erreur précédente (parse error) signifie que tu as un problème de syntaxe (manque parenthèse, ...) à la ligne 67.
Sans ton code on ne peut pas voir cette ligne 67 ....

Kohntark -
Commenter la réponse de kohntark
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 2 avril 2009 à 09:37
0
Merci
Excusez-moi ... Voir le code complet ...cela signifie quoi exactement ...Quelle procédure dois-je suivre ?
Commenter la réponse de habroc
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 2 avril 2009 à 09:59
0
Merci
Avant essaie cela:
$queryString "UPDATE table_shop_monnaies SET prix_ttc ".$newprice;
mysql_query($queryString);

Si cela ne marche pas, il faut nous communiquer la partie de ton code qui commence de la selection dans ta BDD puis affichage resultats puis UPDTATE.
Commenter la réponse de Orange73
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 2 avril 2009 à 13:18
0
Merci

J'ai testé le code mais cela engendre la meme erreur : Notice : Indefined variable :Newprice in C\...Je ne sais pas ce que vous entendez par code dans BDD.Désolé , je débute ...Apparemment BDD = base de données ; mais je ne sais où trouver le fameux code ...
Dans l'attente de vos explications , je vous transmet l'ensemble de ma page , en cours de création ; et en suivant , la structure des tables de ma base de données ( récupérée dans Phpmyadmin ) .
Document sans titre


shop_catégories



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






libelle
varchar(64)
Non









shop_client



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






mail
varchar(64)
Non






nom
varchar(64)
Non






prenom
varchar(64)
Non






telephone
varchar(10)
Oui

NULL





mdp
varchar(32)
Non






ad_ligne1
varchar(64)
Non






ad_ligne2
varchar(64)
Oui

NULL





ad_cp
varchar(5)
Non






ad_ville
varchar(64)
Non









shop_commande



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






client
varchar(64)
Non






date
date
Non






total_ht
float
Non






total_ttc
float
Non






expedition
char(1)
Non









shop_ligne_commande



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






commande
int(10)
Non






article
int(10)
Non






prix_ht
float
Non






prix_ttc
float
Non






quantite
int(11)
Non






total_ht
float
Non






total_ttc
float
Non









shop_monnaies



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






isbn
varchar(10)
Non






rubannu1
int(11)
Non






rubannu2
int(11)
Non






rubannu3
int(11)
Non






avers
text
Non






revers
text
Non






etat
text
Non






poids
text
Non






diametre
text
Non






commentaires
text
Non






prix_ht
float
Non






prix_ttc
float
Non






valeur
int(11)
Non









shop_panier



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






client
varchar(64)
Non






article
int(10)
Non






quantite
int(10)
Non









shop_s_categorie



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






libelle
varchar(64)
Non






grandpere
int(11)
Non









shop_ss_categorie



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






libelle
varchar(64)
Non






pere
int(11)
Non









shop_valeurs



Champ
Type
Null
Défaut
Commentaires



id

int(10)
Non






valeurs
varchar(64)
Non





Commenter la réponse de habroc
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 3 avril 2009 à 19:39
0
Merci
Voici le script amélioré : les id du champ prix_ttc sont mises à jour avec ce script ; mais il faut appeler l'id et actualiser ...
Par contre , si je mets $timestamp = 0 , le script ne fonctionne pas ? Pourquoi ? Je voulais le faire tourner à 23H59mn59s pour éviter les valeurs négatives ...

Quelqu'un a une idée ?


<?php

$timestamp= mktime( 19,30,00,date("m"),date("d"),date("Y"))-time();




if ( $timestamp <=0) {
$newPrice = $row_Recordset1['prix_ttc'] * 0.99;


} else  {
$newPrice = $row_Recordset1['prix_ttc'];
}


echo $newPrice ;


$id = $row_Recordset1['id'];


mysql_query("UPDATE shop_monnaies SET prix_ttc '$newPrice' WHERE id ' $id ' ");




?>
Commenter la réponse de habroc
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 3 avril 2009 à 19:57
0
Merci
Voilà ; j'ai presque réussi ...


Problème : La mise à jour ne s'effectue que sur l'id sélectionné et non sur l'ensemble des id .


Quelqu'un pour me sauver et terminer ce script ?


<?php


$timestamp= mktime( 23,59,59,date("m"),date("d"),date("Y"))-time();




if ( $timestamp > 0) {
$newPrice = $row_Recordset1['prix_ttc'];


} else  {
$newPrice = $row_Recordset1['prix_ttc']*0.99;
}


echo $newPrice ;


$id = $row_Recordset1['id'];


mysql_query("UPDATE shop_monnaies SET prix_ttc '$newPrice' WHERE id ' $id ' ");




?>
Commenter la réponse de habroc
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 4 avril 2009 à 08:51
0
Merci
<tt class= "constant">Salut,

Peux tu re situer un peu le contexte ?
Dis moi si je me trompes :
Tu souhaites que chaque jour à minuit le prix de l'ensemble des produits que tu vends soient multiplié par 0.99

Comment et par qui ce script est il appelé ?
Peut il l'être plusieurs fois par jour ?
Pour quelle raison passes tu $_GET['id'] au script alors que tu souhaites modifier l'ensemble des prix ?
</tt>

...

A mon avis ton script ne peut pas fonctionner en l'état.
J'ai du mal à comprendre comment ton else {...} peut être exécuter. $timestamp est toujours supérieur à 0, non ?

Pour la requête tu peux faire ça : mysql_query("UPDATE shop_monnaies SET prix_ttc '$newPrice' WHERE id ' $id ' ");
=>
mysql_query("UPDATE shop_monnaies SET prix_ttc = prix_ttc*0.99");

... que tu conditionne bien sur.

Cordialement,

Kohntark -
Commenter la réponse de kohntark
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 4 avril 2009 à 09:53
0
Merci
Lorque time() est égal à 23 h 59 mn 59 s le $timestamp = 0 ( et donc différent de > 0 ) ...

Ce que qui permet au script de s'effectuer tous les jours à minuit .

J'ai vérifié , et je te confirme que cela fonctionne .

Pourtant , si je ne spécifie pas de condition WHERE , tous les id prennent la valeur de l'id=1 ...

C'est pourquoi tu peux voir le script ci-dessus avec $id ...Mais dans ce cas là , seul l'id qui est appelé est modifié => si j'appelle l'id = 2 en faisant ?id=2 , je m'aperçois que lorsque j'arrive à minuit , le pvc de cet id passe bien de pvc à pvc*0.99 mais l'id = 1 est inchangé ( et vice versa si je prends l'id = 1 )Or ,  je souhaite que le prix de tous les id passe de pvc à pvc*0.99 à minuit ...et là , je bloque ...
Commenter la réponse de habroc
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 4 avril 2009 à 10:22
0
Merci
Re Habroc,

As tu lu mon commentaire en entier ??
Si je pose des questions ce n'est pas pour le plaisir d'écrire mais pour essayer de t'aider au mieux.
J'ai vérifié , et je te confirme que cela fonctionne
= > effectivement, sauf qu'il faut l'appeler à la bonne seconde, autant dire que c'est "impossible" via l'appel d'un browser.
D'où ma question :
<tt class="constant">Comment et par qui ce script est il appelé ?

</tt> C'est pourquoi tu peux voir le script ci-dessus avec $id ...
=> c'est un non sens !! Tu veux modifier l'intégralité des données et tu en précise une en particulier.

Et puis :
- tu fais un update de la table avec la même valeur de prix_ttc lorsque $timestamp > 0, à quoi bon ?
- "get_magic_quotes_gpc" ne devrait pas exister : il doit être desactivé, point barre.
- "sprintf" ne fait que surcharger le code

<tt class= "constant">
</tt> [...]je souhaite que le prix de tous les id passe de pvc à pvc*0.99 à minuit ...et là , je bloque ...
=>
Il me semble t'avoir donné une réponse, non ?

Kohntark -
Commenter la réponse de kohntark
habroc 31 Messages postés mercredi 25 mars 2009Date d'inscription 21 septembre 2009 Dernière intervention - 4 avril 2009 à 11:29
0
Merci
Kohntark ,

Dans tous les cas , merci pour ton aide car , si je puis simplement re-préciser : je ne suis ni programmeur ni informaticien . Alors , il est fort possible que je ne sois pas sur la bonne voie pour faire ce que je souhaite ...

Je vais essayer entre midi et deux , la ligne que tu m'as donnée :

mysql_query("UPDATE shop_monnaies SET prix_ttc = prix_ttc*0.99");

Que veux dire browser ?

Betement , je pensais génerer en PHP  une actualisation de page après ce script à minuit pile ...car si la condition n'est valable qu'une seconde , elle sera inchangée pendant 24 heures . Je fais fausse route ?...
Commenter la réponse de habroc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.