affecter valeur à une champ suite à un if, elseif, else

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : affecter valeur à une champ suite à un if, elseif, else

par jay64 » 24 juil. 2006, 22:00

c'est bon, j'ai trouvé ma requete !

Merci quand même:

Code : Tout sélectionner

UPDATE prono_Fusion_Voteur_MatchLigue1 SET VoteCalcule = CASE WHEN ScoreEquipeDom = ScoreEquipeVis THEN "N" WHEN ScoreEquipeDom > ScoreEquipeVis THEN "1" ELSE "2" END

par aelurus » 24 juil. 2006, 21:35

Creuse deja sur la forme de la requette sql.
Une fois que tu as trouvé la bonne requette tu vois a la mettre en php.
Je te promet que sa evite beaucoup de brainstroming....
Car je me suis deja casser le ... pendant des heures sur du php alors que ma requettes étais fausse resultat grossssssssssssse perte de temps.
Donc avant toute integration de requette sql dans du php teste les directement via sql ^^. Apres c'est un conseil c'est tes neuronnes.

par jay64 » 24 juil. 2006, 21:02

Pardon de ne pas m'être loggué pour le précédent message mais c bien moi qui ai écrit.

Personne ne peux m'aider pour avancer.

SVP, dites moi au moins comment je modifie la requete select avec les case en update avec les case.

Merci

Jay

par Invité » 24 juil. 2006, 18:53

Ok, dans PhpMyAdmin, la requete fonctionne et me renvoie bien ce que je veux.

Alors maintenant, voici ce que je peux remarquer :

Dans ma table des matchs, j'avais déjà prévu mon champ "VoteCalcule". Celui ci n'a pas été mis à jour, les résultats trouvés pas ta requete ne se sont pas enregistrés (peut-etre il vaudrait mieux faire une requete maj .. ?)

Pour ce premier script de calcul, et pour répondre entièrement à ta question (désolé pour tout à l'heure), oui, c'est tout ce que j'ai à faire (cad mettre à jour la valeur de ce champ "VoteCalcule")

ENsuite, ce que je dois faire, c'est la même chose dans une autre table (celle des resultats officiels des matchs) de manière ensuite à pouvoir comparer le résultat du voteur avec le résultat réel=> Cela me permettra d'attribuer un certain nb de points au voteur (0, 1 ou 3 selon le résultat de la comparaison).

Et enfin, j'ai également des calculs à faire selon les buteurs désignés par mon voteur et les buteurs réels du match. Cela me permettra d'attribuer d'éventuels demi-points supplémentaires.

C'est donc pour cela que tout à l'heure, je demandais d'y voir un peu plus large pour savoir de quelle manière aborder mon projet.

Voilà en fait ce qu'il m'attend. Merci de bien vouloir me mettre sur les rails pour m'aider à démarrer.

Merci beaucoup,

Jay

par ouckileou » 24 juil. 2006, 18:36

Ben il ne faut pas recopier bêtement en effet, il y a un problème avec les guillemets...

Mais pour l'instant, laisse de côté le PHP, tu te rajoutes des problèmes

Tu ouvres phpMyAdmin, tu exécutes la requête directement sur MySQL.
Ce sera un début pour voir si c'est ce que tu veux adapter en UPDATE.

Et réponds aux question : est-ce que le calcul que tu m'as présenté est le seul que tu veux faire où tu en as d'autres ?

par jay64 » 24 juil. 2006, 18:33

Bon, voici ce que j'ai fait (peut-etre betement) :
<?php require_once('../Connections/connexion_bdd_mysql.php'); ?>
<?php
mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
$query_Votes = "SELECT ScoreEquipeDom, ScoreEquipeVis, 
CASE 
   WHEN ScoreEquipeDom = ScoreEquipeVis THEN "N" 
   WHEN ScoreEquipeDom > ScoreEquipeVis THEN "1"
   ELSE "2" END 
   AS VoteCalcule 
FROM prono_Fusion_Voteur_MatchLigue1";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
</body>
</html>
Tout ceci m'a l'air insuffisant, et surtout me ramène l'erreur suivante :
Parse error: parse error, unexpected T_STRING in /homepages/7/d169003641/htdocs/calculs/bidon.php on line 6
:roll:

Je coince vraiment trés sérieusement avec ce petit truc à la con !

par ouckileou » 24 juil. 2006, 17:31

Tu avais déjà bien expliqué ton problème.

Tu as plusieurs calculs à faire ? Ou tu veux juste mettre à flag pour dire que c'est une victoire, une défaite, ou un match nul ?

J'ai bien compris ce que tu veux faire, mais je te propose de faire tout directement dans une requête SQL... sans passer par des boucles PHP et tout.

Essaye celle que je t'ai donnée, pour voir ce qu'elle donne
Tu ne comprends pas en la lisant ?

par jay64 » 24 juil. 2006, 17:14

Disons que je n'ai pas fait ta requete car je ne vois pas trop comment m'y prendre.
Mais disons que ma question est plus d'un ordre général et je vais tenter d'être le plus clair possible :

J'ai une table qui contient différents champs.
Je voudrais, dans une page de calcul, déclarer tout d'abord mon recordset (requete SQL), faire ensuite tous les calculs et les tests et les boucles possibles.
En fait, suivant les cas, certains champs seront calculés en fonction des autres, etc, etc.
Cela veut dire que quand je regarderai chaque enregistrement de ma requete, je ferais des vérifs et des contrôles, et ensuite je calculerai les uns en fonction des autres.
Ensuite, une fois tous ces tests et calculs effectués, je veux bien entendu mettre à jour chaque enregistrement du recordset déclaré initialement.

Est-ce clair ou dois-je donner un exemple plus concret?

Merci de m'aider les gars!

par ouckileou » 24 juil. 2006, 16:41

En fait ce que je te suggèrais c'est de tout faire en une seule requête, ce qui est a priori facilement faisable.

Est-ce que tu as testé la requête que je t'ai donnée ?
Elle te sort une colonne "VoteCalcule " en fonction du score du match.

A partir de là, tu peux l'adapter (récupérer le case) pour l'utiliser dans une requête UPDATE.

par jay64 » 24 juil. 2006, 16:13

je t'avoue que j'ai un peu de mal à capter !

Pour réaliser une mise à jour de mes champs suite à des calculs ou à des tests, comment dois-je procéder ?
Est-ce mon instruction select qui n'est pas bonne ? Est-ce le code de test qui ne va pas ? Dois-je utiliser un formulaire pour envoyer le résultat des variables vers les champs de ma table ?

Merci de m'aider à me mettre dans le droit chemin. Je pense que ma demande est trés simple et qu'il en faut peu pour m'aiguiller !

par ouckileou » 24 juil. 2006, 14:44

Code : Tout sélectionner

SELECT ScoreEquipeDom, ScoreEquipeVis, CASE WHEN ScoreEquipeDom = ScoreEquipeVis THEN "N" WHEN ScoreEquipeDom > ScoreEquipeVis THEN "1" ELSE "2" END AS VoteCalcule FROM matchs
A adapter si tu veux faire une mise à jour de la table

par Invité » 24 juil. 2006, 14:32

J'ai une table avec ces champs :

ScoreEquipeDom
ScoreEquipeVis
VoteCalcule

Je veux faire une procédure de calcul qui affectera au champ "VoteCalcule" la valuer 1, N ou 2 en fonction des scores de chacune de mes deux équipes.

Pour l'instant, dans mon code, j'ai récupéré via une requete SQL les champs dont j'ai besoin :
<?php require_once('../Connections/connexion_bdd_mysql.php'); ?>
<?php
mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
$query_Votes = "SELECT prono_Fusion_Voteur_MatchLigue1.IdVoteur, prono_Fusion_Voteur_MatchLigue1.ScoreEquipeDom, prono_Fusion_Voteur_MatchLigue1.ScoreEquipeVis, prono_Fusion_Voteur_MatchLigue1.VoteCalcule FROM prono_Parametres, prono_MatchLigue1 INNER JOIN prono_Fusion_Voteur_MatchLigue1 ON prono_MatchLigue1.IdMatch = prono_Fusion_Voteur_MatchLigue1.IdMatch; ";
$Votes = mysql_query($query_Votes, $connexion_bdd_mysql) or die(mysql_error());
$row_Votes = mysql_fetch_assoc($Votes);
$totalRows_Votes = mysql_num_rows($Votes);
?>
Et ensuite, j'ai tenté d'effectuer une boucle qui me parcoure chaque ligne de mon recordset et qui tente de faire ce que j'ai dit plus haut: Voici ce que j'ai codé pour cela :
<?php
while ($ligne=mysql_fetch_array($Votes))
{ extract($ligne);
	
	if ($ScoreEquipeDom == $ScoreEquipeVis)
		{
		$VoteCalcule = "N";
		}elseif ($ScoreEquipeDom > $ScoreEquipeVis)
		{
		$VoteCalcule = 1;
		}else
		{
		$VoteCalcule = 2;
		}		
}
echo "Les calculs des votes ont bien été effectués !";
?>
Le problème, c'est que cela n'écrit rien dans mon champ "VoteCalcule".

Voilà, j'espère avoir été clair.

Merci encore !

Re: affecter valeur à une champ suite à un if, elseif, else

par ouckileou » 24 juil. 2006, 14:24

Je cherche à affecter une valeur à un champ en fonction d'un test préalable.[/php]
C'est à dire ? A un champ de quoi ?

Tu peux expliquer mieux ce que tu veux faire et surtout quel genre de problème tu as stp ?

affecter valeur à une champ suite à un if, elseif, else

par jay64 » 24 juil. 2006, 14:20

Bonjour,

Cela peut parraitre simple mais je coince.
Je cherche à affecter une valeur à un champ en fonction d'un test préalable.
Pouvez-vous m'aider et me dire ce qui coince.

Merci !
<?php
while ($ligne=mysql_fetch_array($Votes))
{ extract($ligne);
	
	if ($ScoreEquipeDom == $ScoreEquipeVis)
		{
		$VoteCalcule = "N";
		}elseif ($ScoreEquipeDom > $ScoreEquipeVis)
		{
		$VoteCalcule = 1;
		}else
		{
		$VoteCalcule = 2;
		}		
}
echo "Les calculs des votes ont bien été effectués !";
?>
En sachant que j'ai ceci un peu plus haut dans mon code :
<?php require_once('../Connections/connexion_bdd_mysql.php'); ?>
<?php
mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
$query_Votes = "SELECT prono_Fusion_Voteur_MatchLigue1.IdVoteur, prono_Fusion_Voteur_MatchLigue1.ScoreEquipeDom, prono_Fusion_Voteur_MatchLigue1.ScoreEquipeVis, prono_Fusion_Voteur_MatchLigue1.VoteCalcule FROM prono_Parametres, prono_MatchLigue1 INNER JOIN prono_Fusion_Voteur_MatchLigue1 ON prono_MatchLigue1.IdMatch = prono_Fusion_Voteur_MatchLigue1.IdMatch; ";
$Votes = mysql_query($query_Votes, $connexion_bdd_mysql) or die(mysql_error());
$row_Votes = mysql_fetch_assoc($Votes);
$totalRows_Votes = mysql_num_rows($Votes);
?>