Page 1 sur 1
pb mysql_fetch_object et if
Posté : 15 août 2005, 15:14
par leeloo1902
Bonjour,
J'ai un petit soucis avec le mysql_fetch object et le if. En fait, je me demande si la synthaxe dans le if est bonne.
Voici mon code :
Code : Tout sélectionner
$result3 = mysql_query("select AVG(note) as moyenneS1 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S1'");
$champs3=mysql_fetch_object($result3);
Cette requête fonctionne bien par contre, c'est dansle if suivant qu'il y a un pb :
Code : Tout sélectionner
if ($champs3->moyenneS1 >= 0)
{
echo "Vous n'avez validé aucun semestre.";
echo "Vous êtes inscrit dans le semestre 1 et le semestre 2.";
}
Merci de votre aide
Posté : 15 août 2005, 15:34
par Cyrano
Modération : Pas de questions dans la FAQ !
Merci de lire les règles du forum !
Sujet déplacé
Posté : 16 août 2005, 22:03
par leeloo1902
s'il vou plait aider moi, j'en ai vraiment besoin.
J'ai beau tourner le truc dans tous les sens ça ne marche po.
Merci
Posté : 16 août 2005, 22:07
par Xenon_54
Bonjour,
Quelle est l'erreur retournée?
Essaie de changer \" par ' dans ta requête. Et utiliser mysql_escape_string() pour sécuriser ta variable:
$login = mysql_escape_string($login);
$result3 = mysql_query("select AVG(note) as moyenneS1 from etudier,module where IdEtudiant='$login' and NumSemestre='S1'");
Je remarque aussi que tu utilises deux tables : etudier et module.
Il faut alors indiquer aux champs sélectionnés et ceux contenus dans la clause WHERE de quel table ils proviennent.
Posté : 16 août 2005, 22:11
par Cyrano
...Essaie de changer " par ' dans ta requête. ...
Même pas, si on veut faire un requête avec une concaténation propre, on doit faire ceci:
$result3 = mysql_query("select AVG(note) as moyenneS1 from etudier,module where IdEtudiant='". $login ."' and NumSemestre='S1'");
$champs3=mysql_fetch_object($result3);
Ceci dit, "il y a un problème" est insuffisant comme explication, on ne peut pas deviner.
Posté : 16 août 2005, 22:27
par Xenon_54
Bonjour,
<?php
$tmp = 'PHP';
$begin = microtime(TRUE);
for ($i=1; $i<=1000000; $i++) {
$var = "Hello World from " . $tmp . " version 5";
unset($var);
}
$end = microtime(TRUE) - $begin;
print 'Concaténation: ' . $end . '<br />';
$begin = microtime(TRUE);
for ($i=1; $i<=1000000; $i++) {
$var = "Hello World from $tmp version 5";
unset($var);
}
$end = microtime(TRUE) - $begin;
print 'Direct: ' . $end;
?>
1er essai:
Concaténation: 6.8632349967957
Direct: 15.406879901886
2e essai:
Concaténation: 6.8489079475403
Direct: 15.38231086731
3e essai:
Concaténation: 6.8225450515747
Direct: 15.318402051926
Étrange conclusion (je trouve)
Posté : 16 août 2005, 22:33
par Cyrano
Ça n'a rien d'étrange: si on fait une concaténation, PHP ne perd pas de temps à interpréter ce qui n'est pas du PHP mais une chaine de caractère. Tandis qu'en direct, il faut détecter la présence d'une variable au milieu d'une chaine, ce qui est logiquement plus long et demande plus de ressources.
Posté : 16 août 2005, 22:36
par Xenon_54
Bonjour,
L'étonnement était face au fait suivant:
Les deux chaines sont en "double-quotes" et la concaténation crée "deux" chaines à analyser. J'aurais parfaitement compris s'il s'agissait de single-quote, mais des double-quotes...
Posté : 17 août 2005, 13:48
par leeloo1902
je vais vous envoyer le code en entier et vous expliquer mieux
Code : Tout sélectionner
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
body {
background-color: #99CCFF;
}
-->
</style></head>
<?php
session_start();
$connect = mysql_connect('localhost','root','') or die ("erreur de connexion");
mysql_select_db('Physique',$connect) or die ("erreur de connexion base");
$login = $_SESSION['login'];
$result = mysql_query("select * from Etudiant where IdEtudiant=\"$login\" ");
$champs=mysql_fetch_object($result);
$result2 = mysql_query("select * from etudiant,mention,licence where etudiant.IdEtudiant=\"$login\" and etudiant.IdMention = mention.IdMention and mention.IdLicence = licence.IdLicence");
$champs2=mysql_fetch_object($result2);
[color=red]$result3 = mysql_query("select AVG(note) as moyenneS1 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S1'");
$champs3=mysql_fetch_object($result3);[/color]
$moyenne1 = $champs3->moyenneS1;
if ($champs3->moyenneS1 < 10)
{
$result10 = mysql_query("select sum(CreditsModule) as nbCredits from etudier,module where note < 10 and etudier.IdModule=module.IdModule and NumSemestre='S1' ");
$champs10=mysql_fetch_object($result10);
}
$result4 = mysql_query("select AVG(note) as moyenneS2 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S2'");
$champs4=mysql_fetch_object($result4);
$moyenne2 = $champs4->moyenneS2;
if ($champs4->moyenneS2 < 10)
{
$result11 = mysql_query("select sum(CreditsModule) as nbCredits from etudier,module where note < 10 and etudier.IdModule=module.IdModule and NumSemestre='S2' ");
$champs11=mysql_fetch_object($result11);
}
$result6 = mysql_query("select AVG(note) as moyenneS3 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S3'");
$champs6=mysql_fetch_object($result6);
$moyenne3 = $champs6->moyenneS3;
if ($champs6->moyenneS3 < 10)
{
$result12 = mysql_query("select sum(CreditsModule) as nbCredits from etudier,module where note < 10 and etudier.IdModule=module.IdModule and NumSemestre='S3' ");
$champs12=mysql_fetch_object($result12);
}
$result7 = mysql_query("select AVG(note) as moyenneS4 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S4'");
$champs7=mysql_fetch_object($result7);
$moyenne4 = $champs7->moyenneS4;
if ($champs7->moyenneS4 < 10)
{
$result13 = mysql_query("select sum(CreditsModule) as nbCredits from etudier,module where note < 10 and etudier.IdModule=module.IdModule and NumSemestre='S4' ");
$champs13=mysql_fetch_object($result13);
}
$result8 = mysql_query("select AVG(note) as moyenneS5 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S5'");
$champs8=mysql_fetch_object($result8);
$moyenne5 = $champs8->moyenneS5;
if ($champs8->moyenneS5 < 10)
{
$result14 = mysql_query("select sum(CreditsModule) as nbCredits from etudier,module where note < 10 and etudier.IdModule=module.IdModule and NumSemestre='S5' ");
$champs14=mysql_fetch_object($result14);
}
$result9 = mysql_query("select AVG(note) as moyenneS6 from etudier,module where IdEtudiant=\"$login\" and NumSemestre='S6'");
$champs9=mysql_fetch_object($result9);
$moyenne6 = $champs9->moyenneS6;
?>
<body>
<div align="center">
<p>Cher <strong><?php echo $champs->PrenomEtudiant; ?> <?php echo $champs->NomEtudiant; ?></strong>, bienvenu(e) sur votre espace personnel de formation.
</p>
<p>Vous êtes inscrits à l'UPJV, en Licence Sciences Technologie et Santé. Vous suivez le parcours <strong><?php echo $champs2->NomLicence; ?></strong> de la mention <strong><?php echo $champs2->NomMention; ?></strong>. </p>
<?php
[color=red] if ($champs3->moyenneS1 = 0)
{
echo "Vous n'avez validé aucun semestre.";
echo "Vous êtes inscrit dans le semestre 1 et le semestre 2.";
}[/color] else
if ($champs3->moyenneS1 < 10 and $champs4->moyenneS2 = 0)
{
echo "Vous n'avez validé aucun semestre.";
echo "Vous êtes inscrit dans le semestre 1 et le semestre 2.";
}
else
if ($champs3->moyenneS1 >=10 and $champs4->moyenneS2 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS).";
echo "Vous êtes inscrit dans le semestre 2.";
}
else
if ($champs3->moyenneS1 >=10 and $champs4->moyenneS2 >=10 and $champs6->moyenneS3 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS) et le semestre 2 (30 ECTS).";
echo "Vous êtes inscrit dans le semestre 3 et le semestre 4.";
}
else
if ($champs3->moyenneS1 < 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 = 0)
{
echo "Vous avez validé le semestre 2 (30 ECTS) et ".$champs10->nbCredits." ECTS du semestre 1.";
echo "Vous êtes inscrit dans le semestre 1, le semestre 3 et le semestre 4.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 < 10 and $champs6->moyenneS3 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS) et ".$champs11->nbCredits." ECTS du semestre 2.";
echo "Vous êtes inscrit dans le semestre 2, le semestre 3 et le semestre 4.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS) et le semestre 3 (30 ECTS).";
echo "Vous êtes inscrit dans le semestre 4.";
}
else
if ($champs3->moyenneS1 < 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 = 0)
{
echo "Vous avez validé le semestre 2 (30 ECTS), le semestre 3 (30 ECTS) et ".$champs10->nbCredits." ECTS du semestre 1.";
echo "Vous êtes inscrit dans le semestre 1 et le semestre 4.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 < 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 3 (30 ECTS) et ".$champs11->nbCredits." ECTS du semestre 2.";
echo "Vous êtes inscrit dans le semestre 2 et le semestre 4.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 < 10 and $champs7->moyenneS4 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS) et ".$champs12->nbCredits." ECTS du semestre 3.";
echo "Vous êtes inscrit dans le semestre 3 et le semestre 4.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 3 (30 ECTS) et le semestre 4 (30 ECTS).";
echo "Vous êtes inscrit dans le semestre 5 et le semestre 6.";
}
else
if ($champs3->moyenneS1 < 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 = 0)
{
echo "Vous avez validé le semestre 2 (30 ECTS), le semestre 3 (30 ECTS), le semestre 4 (30 ECTS) et ".$champs10->nbCredits." ECTS du semestre 1.";
echo "Vous êtes inscrit dans le semestre 1, le semestre 5 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 < 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 3 (30 ECTS), le semestre 4 (30 ECTS) et ".$champs11->nbCredits." ECTS du semestre 2.";
echo "Vous êtes inscrit dans le semestre 2, le semestre 5 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 < 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 4 (30 ECTS) et ".$champs12->nbCredits." ECTS du semestre 3.";
echo "Vous êtes inscrit dans le semestre 3, le semestre 5 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 < 10 and $champs8->moyenneS5 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 3 (30 ECTS) et ".$champs13->nbCredits." ECTS du semestre 4";
echo "Vous êtes inscrit dans le semestre 4, le semestre 5 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 >= 10 and $champs9->moyenneS6 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 3 (30 ECTS), le semestre 4 (30 ECTS) et le semestre 5 (30 ECTS).";
echo "Vous êtes inscrit dans le semestre 6.";
}
else
if ($champs3->moyenneS1 < 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 >= 10 and $champs9->moyenneS6 = 0)
{
echo "Vous avez validé le semestre 2 (30 ECTS), le semestre 3 (30 ECTS), le semestre 4 (30 ECTS), le semestre 5 (30 ECTS) et ".$champs10->nbCredits." ECTS du semestre 1.";
echo "Vous êtes inscrit dans le semestre 1 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 < 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 >= 10 and $champs9->moyenneS6 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 3 (30 ECTS), le semestre 4 (30 ECTS), le semestre 5 (30 ECTS) et ".$champs11->nbCredits." ECTS du semestre 2.";
echo "Vous êtes inscrit dans le semestre 2 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 < 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 >= 10 and $champs9->moyenneS6 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 4 (30 ECTS), le semestre 5 (30 ECTS) et ".$champs12->nbCredits." ECTS du semestre 3.";
echo "Vous êtes inscrit dans le semestre 3 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 < 10 and $champs8->moyenneS5 >= 10 and $champs9->moyenneS6 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 3 (30 ECTS), le semestre 5 (30 ECTS) et ".$champs13->nbCredits." ECTS du semestre 4.";
echo "Vous êtes inscrit dans le semestre 4 et le semestre 6.";
}
else
if ($champs3->moyenneS1 >= 10 and $champs4->moyenneS2 >= 10 and $champs6->moyenneS3 >= 10 and $champs7->moyenneS4 >= 10 and $champs8->moyenneS5 < 10 and $champs9->moyenneS6 = 0)
{
echo "Vous avez validé le semestre 1 (30 ECTS), le semestre 2 (30 ECTS), le semestre 3 (30 ECTS), le semestre 4 (30 ECTS) et ".$champs14->nbCredits." ECTS du semestre 5.";
echo "Vous êtes inscrit dans le semestre 5 et le semestre 6.";
}
?>
<p align="left">1). Voir les modules à passer cette année et faire mes choix d'options</p>
<p align="left">2). Voir les informations générales concernant ma formation</p>
<p align="left">3). Voir les annonces liées à l'organisation des cours (absences, reports...)</p>
<p align="left">4). Prendre rendez-vous avec mon enseignant référent</p>
<p align="left">5). Consulter mes relevés de notes</p>
<p align="left">6). Modifier mes données personnelles (coordonnées) </p>
<p align="left"> </p>
</div>
</body>
</html>
la requête fonctionne bien, je l'ai tester. Quand je lance la page, il n'y a pas de message d'erreur, par contre, rien ne s'affiche au niveau de ce if :
Code : Tout sélectionner
if ($champs3->moyenneS1 = 0)
{
echo "Vous n'avez validé aucun semestre.";
echo "Vous êtes inscrit dans le semestre 1 et le semestre 2.";
}
je pense donc que $champs3->moyenneS1 ne doit pas s'écrire comme ça dans un if, mais comment faire ?
merci
Posté : 17 août 2005, 13:53
par Cyrano
La comparaison, c'est "==", alors que "=" est un opérateur d'affectation.
Posté : 17 août 2005, 15:50
par Invité
Merci beaucoup, ça fonctionne.
Reste un dernier petit problème session_start(). Si je ne le met pas, ça ne fonctionne pas bien évidemment. Par contre, si je le met, ça fonctionne mais il apparaît un message d'erreur qui est le suivant :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\espaceetudiant.php:6) in c:\program files\easyphp1-8\www\espaceetudiant.php on line 14
Savez-vous à quoi cela correspond ?
merci
Posté : 17 août 2005, 15:54
par Cyrano
Le session_start() doit être en tout début de fichier avant l'envoi de quoi que ce soit vers le navigateur, même un simple espace avant le <?php peut faire générer ce message.
En outre, quand tu as une page composite créée avec plusieurs fichiers, par exemple entete.php + page.php + pied.php, le session_start() ne doit être que dans entete.php mais pas dans les deux autres.
Posté : 17 août 2005, 17:05
par leeloo1902
merci beaucoup