Encore une parse error...

Résolu/Fermé
Bonta Messages postés 36 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 7 février 2013 - 7 févr. 2013 à 11:44
Bonta Messages postés 36 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 7 février 2013 - 7 févr. 2013 à 16:21
Bonjour,

Cela fait maintenant deux jours que je bloque sur une simple parse error quelqu'un serait il en mesure de m'aider?

voici mon code:

<?php
//variable de la page precedente
$id_commande = $_POST['valid_commande'];

//on récupère les données de la dernière commande
$donnees_commande = mysql_query ("SELECT * FROM commande WHERE id_fact=$id_commande ");

if($donnees_commande)
while ($resultat_donnees_commande= mysql_fetch_object($donnees_commande))
{
$ref01 = $resultat_donnees_commande->ref01;
$des01 = $resultat_donnees_commande->des01;
$coul01 = $resultat_donnees_commande->coul01;
$qte01 = $resultat_donnees_commande->qte01;


//ces variables sont OK (verifiées par print_r() )

}
else
{
echo "erreur de récupération des données de commande. ";
}

//requete de mise a jour
$req_maj = mysql_query " UPDATE "catalogue" SET "$des01"=("$des01")-("$qte01") WHERE ref="$ref01" AND couleur="$coul01" ";

if($req_maj)
{
echo "mise a jour effectuee avec succes"
header("refresh:3; url=http://xxxxx.fr/xxxxx.php");
}
else
{
echo "Erreur de la requete mise a jour"
}
?>

L'erreur pointée se situe au niveau de:

$req_maj = mysql_query " UPDATE "catalogue" SET "$des01"="$des01"-"$qte01" WHERE ref="$ref01" AND couleur="$coul01" ";


Merci d'avance je désespère.

2 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
7 févr. 2013 à 11:54
$req_maj = mysql_query("UPDATE catalogue SET '$des01'='$des01'-'$qte01' WHERE ref='$ref01' AND couleur='$coul01' "); 


ça sera mieux déjà.

plusieurs choses :
- quand tu as un doute sur la façon d'écrire une fonction, pas la peine de regarder le code dans le blanc des yeux en espérant que la syntaxe va se corriger toute seule, consulte la doc php (http://php.net/mysql_query) toutes les fonctions y sont, mieux vaut y aller trop souvent que le contraire, un réflexe à adopter
- une chaîne de cactères est délimitée soit par une apostrophe, soit par une double quote (guillemet) et si à l'intérieur tu veux réutiliser ce même délimiteur il faut absolument l'échapper en le précédent du caractère \, sinon utilise simplement l'autre délimiteur

exemple :

$str = "voici une \"chaine\" bien construite";
ou
$str = 'voici une "chaine" bien construite';

et

$str = "voici l'apostrophe";
ou
$str = 'voici l\'apostrophe';


ce sont des principes de base qui t'éviteront bien des soucis
0
Bonta Messages postés 36 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 7 février 2013 1
7 févr. 2013 à 12:05
Hello

Crois moi je ne l'ai pas regardé dans le blanc des yeux ces deux derniers jours. xD
En fait j'ai déjà essayé en mettant les apostrophes. les " ont été mis par ... désespoir... en priant pour que cela change quelque chose.
Bref merci pour ton aide mais avec la requête que tu as rédigé, je tombe sur une erreur encore...
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
7 févr. 2013 à 12:08
J'ai dit que c'était mieux, pas que ça marcherait à coup sûr, je ne connais pas ta structure de données, je ne risque pas de deviner ce que tu dois mettre dans ta requête.
Regarde le message de maka54
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
7 févr. 2013 à 12:02
il faut revoir tes cours de requete et base de données

$req_maj = mysql_query("UPDATE catalogue SET des= '".($des01 - $qte01)."' WHERE ref='".$ref01."' AND couleur='".$coul01."'"); 


- $des01 n'est surement pas un champ en base de données, tu dois mettre le bon nom de champ (j'ai mis des dans l'exemple ... )

- un champ non numérique doit avoir des simples quotes

- en bonus :
if($req_maj)
{
echo "mise a jour effectuee avec succes"
header("refresh:3; url=http://xxxxx.fr/xxxxx.php");
} 

ce code n'est pas correct, si tu n'as pas d'erreur, tu dois travaillé sous wampp très certainement

mais c'est faux, aucun texte ne doit etre généré avant l'appel d'un header

- et enfin : normal ou grosse erreur : ( à toi de voir ...)

while ($resultat_donnees_commande= mysql_fetch_object($donnees_commande))
{
$ref01 = $resultat_donnees_commande->ref01;
$des01 = $resultat_donnees_commande->des01;
$coul01 = $resultat_donnees_commande->coul01;
$qte01 = $resultat_donnees_commande->qte01;


//ces variables sont OK (verifiées par print_r() )

} 


a chaque passage dans ta boucle, tes variables précédentes sont écrasées ...
0
Bonta Messages postés 36 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 7 février 2013 1
7 févr. 2013 à 12:23
Si seulement j'en avais ... (quoique vu qu'avec internet je les ai peut être tous :p)

Je ne comprends pas tout. Je n'ai donc pas le droit d'utiliser de variable pour désigner le champ a utiliser dans ma requête?

Oui je travaille (ou plutôt apprend) sous WAMP et je n'ai effectivement pas d'erreur dans mes autres pages utilisant le header. mais message reçu je rectifie ça .

Tu dis qu'a chaque passage dans ma boucle, les variables sont écrasées je devrais dont utiliser directement le résultat de ma première requête ."$resultat_donnees_commande->ref01 ". dans $req_maj ??? je dois avouer être completement perdu.
0
Bonta Messages postés 36 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 7 février 2013 1
7 févr. 2013 à 12:29
je pense que je vais me replonger dans mon livre xD
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
7 févr. 2013 à 13:48
Je ne comprends pas tout. Je n'ai donc pas le droit d'utiliser de variable pour désigner le champ a utiliser dans ma requête?

alors si tu pourrais mettre un champ dynamique grace à une variable, mais je pense pas que c'est que ce que tu es besoin

Oui je travaille (ou plutôt apprend) sous WAMP et je n'ai effectivement pas d'erreur dans mes autres pages utilisant le header. mais message reçu je rectifie ça .

if($req_maj)
{
echo "mise a jour effectuee avec succes"
header("refresh:3; url=http://xxxxx.fr/xxxxx.php");
} 

a remplacé par :

<!DOCTYPE html>
<html lang="fr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
		<meta http-equiv="refresh" content="3; url= url=http://xxxxx.fr/xxxxx.php">
    </head> 
    <body>
		mise a jour effectuee avec succes
  </body> 
</html>


çà fera un refresh également, mais plus d'erreur

Tu dis qu'a chaque passage dans ma boucle, les variables sont écrasées je devrais dont utiliser directement le résultat de ma première requête ."$resultat_donnees_commande->ref01 ". dans $req_maj ??? je dois avouer être completement perdu.

alors, il y a plusieurs possibilité,
1 - la requete ne renvoie qu'un seul resultat, donc pas de boucle
2 - la requete renvoie plusieurs resultats donc une boucle , par contre je ne sais pas quel est le resultat escompté par la suite


--------------------------------------------

A vrai dire, une explication aiderait à comprendre ce que tu recherches a faire, voir un modele de tes tables commande catalogue , facture pour t'orienter et t'aider au mieux
0
Bonta Messages postés 36 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 7 février 2013 1
Modifié par Bonta le 7/02/2013 à 14:23
Concernant le header je l'ai mis tout a la fin avant la fermeture de mon php et après un essai ça fonctionne parfaitement sur un vrai serveur web . je me permet de noter tout de même ta proposition afin de pouvoir l'étudier ultérieurement. :-D

Pour la "nécessite" d'utiliser une variable pour sélectionner le champ a utiliser.
Comme tu as du le constater avec les noms utilisés, mon petit projet visant a apprendre le php/mysql est une application de gestion de stock avec une fiche permettant les commandes.
La page me posant problème étant la mise a jour du stock dans ma table "catalogue"

Cette table est composée d'une référence, couleur, et trois unités de stockage. (1, 2 , 3)
à la base, la référence servait de clé primaire et je n'avais qu'une unité de stockage.
Ma requête était donc très simple et ressemblais a :
UPDATE catalogue SET depot = (depot) - ('$qte01') WHERE ref='$ref'
Ca ne posais aucun problème jusque la.

Afin de rendre l'exercice utile (aucun intérêt a recopier une requête comme elle se trouve sur n'importe quel site "d'apprentissage") j'ai ajouté des variations (couleur) aux references et augmenté de nombre d'unité de stockage.

Résultat je peux avoir plusieurs fois la même référence pour des couleurs différentes. L'idée a la base était d'instaurer une nouvelle clé primaire ID_reference. mais cela pose beaucoup de problèmes avec d'autres parties de mon petit programme.
Je me suis donc mis en tête d'utiliser WHERE ref='$ref01' AND couleur='$coul01' pour désigner la bonne ligne et la variable '$des01' pour désigner la bonne unité de stockage (colonne).
Voilà tu sais maintenant pourquoi j'ai "besoin" d'utiliser une variable pour désigner quel dépot mettre à jour.

le présent: Ayant repris tout depuis le début en essayant de prendre en compte vos remarques, j'en suis au point où d'une requête sans variables , j'a intégré les variables $qte01,$ref01 et $coul01.

Ma requête est :
mysql_query("UPDATE catalogue SET depot1=(depot1)- ('$qte01') WHERE ref='$ref01' AND couleur='$coul01' ");

Jusque la ça fonctionne. Le but étant donc de remplacer depot1 par une variable équivalente en principe $des01 sauf que ca ne fonctionne pas. pourtant lorsque je print_r($des01) j'obtiens bien depot1...

J'en suis au point de me demander si mon approche globale est mauvaise. Si quelqu'un a la réponse, je suis preneur.
Si c'est réalisable, je ne comprends pas pourquoi dès que je remplace depot1 par $des01 cela ne fonctionne plus...

Merci d'avance.
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
Modifié par maka54 le 7/02/2013 à 14:47
$req = "UPDATE catalogue SET `".$des01."` = `".$des01."` - '".$qte01."' WHERE ref='".$ref01."' AND couleur='".$coul01."'";

echo $req;


tu va tester cette requete générée (remplacé par les variables) directement dans phpmyadmin en passant par l'outil sql, tu dervait avoir un message d'erreur si il y en a un
0