pb mysql_fetch_object et if

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 : pb mysql_fetch_object et if

par leeloo1902 » 17 août 2005, 17:05

merci beaucoup

par Cyrano » 17 août 2005, 15:54

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.

par Invité » 17 août 2005, 15:50

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

par Cyrano » 17 août 2005, 13:53

Code : Tout sélectionner

if ($champs3->moyenneS1 == 0)
La comparaison, c'est "==", alors que "=" est un opérateur d'affectation.

par leeloo1902 » 17 août 2005, 13:48

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; ?>&nbsp;<?php echo $champs->NomEtudiant; ?></strong>, bienvenu(e) sur votre espace personnel de formation. </p> <p>Vous &ecirc;tes inscrits &agrave; l'UPJV, en Licence Sciences Technologie et Sant&eacute;. 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 &agrave; passer cette ann&eacute;e et faire mes choix d'options</p> <p align="left">2). Voir les informations g&eacute;n&eacute;rales concernant ma formation</p> <p align="left">3). Voir les annonces li&eacute;es &agrave; l'organisation des cours (absences, reports...)</p> <p align="left">4). Prendre rendez-vous avec mon enseignant r&eacute;f&eacute;rent</p> <p align="left">5). Consulter mes relev&eacute;s de notes</p> <p align="left">6). Modifier mes donn&eacute;es personnelles (coordonn&eacute;es) </p> <p align="left">&nbsp;</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

par Xenon_54 » 16 août 2005, 22:36

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...

par Cyrano » 16 août 2005, 22:33

Ç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.

par Xenon_54 » 16 août 2005, 22:27

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)

par Cyrano » 16 août 2005, 22:11

...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.

par Xenon_54 » 16 août 2005, 22:07

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.

par leeloo1902 » 16 août 2005, 22:03

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

par Cyrano » 15 août 2005, 15:34

Modération : Pas de questions dans la FAQ !

Merci de lire les règles du forum !
Sujet déplacé

pb mysql_fetch_object et if

par leeloo1902 » 15 août 2005, 15:14

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