Problème avec La condition IF qui s'execute pas [Résolu]

Signaler
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020
-
Messages postés
3546
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
5 juillet 2020
-
Bonjour, merci d'avance pour tous ceux qui vont intervenir pour m'aider à résoudre mon problème.
En fait, cela fait des semaines que je n'arrive pas à résoudre un problème lié avec la condition IF, certains endroit elle marche, et je reproduit le même code à un autre endroit en changeant juste les variable, et la nouvelle condition ne s'execute pas

La variable $cycle reçoit une donnée envoyé par un lien URL vers une autre page et sur cette page le teste est effectué avec la condition IF
Voici la partie avec la condition IF qui marche sans problème

$cycle = !empty ( $_GET['cycle'] ) ? $_GET['cycle'] : NULL;
$trim = trim($cycle);

$tech = ' TECHNIQUE';
$prim = 'PRIMAIRE';	
$primaire = trim($prim);	
$trimed = trim($gen);	
$trime = trim($tech);	

if($trim == $primaire) {$serie = 'Pas de serie'; }	

if (($trim == $trimed)||($trim == $trime) || ($class =='3ème')) {

$sql = 'UPDATE note SET notemat = ? WHERE idmat = ? AND ideleve = ? AND nbre = ?';
$datas = array($notemat, $idmat, $ideleve, $nbre);
try{
  $req = $bdd->prepare($sql);
  $req->execute($datas);  
} catch ( Exception $e ) {
    // en cas d'erreur :
    echo " Erreur ! " . $e->getMessage ();
    print_r ( $datas );
    exit;
  }
 }	


Dans cette partie de mon code les conditions
<?php if (($trim == $trimed)||($trim == $trime) || ($class =='3ème')) ?> 
ou
 <?php if($trim == $primaire) {$serie = 'Pas de serie'; } ?>

marche sans problème.

Presque le même code je le copie sur une autre page, mais la condition IF ne s'execute pas.

Voici le code ou la condition IF ne marche pas

Dans ce code si vous remarquez j'ai utilisé deux style, il ya
  <?php if($mois1 != 'mai') ?>	 
et
 <?php $mois ='juin'; $mois2 = trim($mois); 
if($mois1 == $mois2)  ?>

toute cette difference est pour voir ce qui va marché, mais malgré cela, aucune de deux condition s'execute, ma page s'affiche sans me signalé une erreur de syntaxe ou autre, ce que je remarque c'est que mes deux conditions n'affiche pas ce qu'elles sont sensé affiché

<?php
$mois1 = !empty ( $_GET['mois'] ) ? $_GET['mois'] : NULL;	


 if($mois1 != 'mai') {  echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';$cycle=$_GET['cycle']; $class= $_GET['class'];?>	  
<?php echo "<a href=\"index3.php?class=$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo ' class="place"><h4>Mai</h4></a><br></div>'; } ?>	



          <?php $mois ='juin'; $mois2 = trim($mois); 
if($mois1 == $mois2) {  
echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">'; $cycle=$_GET['cycle']; $class= $_GET['class'];?>	  
<?php echo "<a href=\"index3.php?class=nom=$nom & prenom=$prenom & ideleve=$ideleve &$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo 'class="place"><h4>Juin</h4></a><br></div>' ?>
 } 





Quelqu'un pourrai t-il m'aidé là dessus, je n'arrive pas à retrouvé où se situe le problème avec ma syntaxe avec IF ? Pourquoi mes 2ème conditions IF ne me donne pas le résultat attendu pourtant il n'ay aucune erreur dans mon écriture du code ?

12 réponses

Messages postés
86
Date d'inscription
lundi 24 avril 2017
Statut
Membre
Dernière intervention
15 juin 2020
5
Bonjour,

Je ne code absolument pas en PHP mais peut-être que sur un malentendu, ça peut marcher.

<?php if($mois1 != 'mai') ?>
Ici, si je comprends bien, tu vérifies si $mois1 est différent de mai .

Essaye peut-être avec une de ces syntaxes :

<?php if($mois1 !== 'mai') ?>


<?php if($mois1 <> 'mai') ?>



Alors, ensuite, il y a ça :
<?php $mois ='juin'; $mois2 = trim($mois); 
.

Remplace tes = par des == ou même par des === s'il s'agit d'une égalité stricte. Au niveau des
;
, je ne sais pas ce que ça signifie...

Si tu veux dire ou remplace par
||
, si tu veux dire et, remplace par
&&
. Peut-être que ça veut dire autre chose, mais comme je viens de le dire, je ne code pas du tout en PHP.

Je ne sais pas si ma réponse sera utile... Si je peut encore aider, en tout cas, n'hésite pas.

Cordialement,
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

cette partie du code
  <?php $mois ='juin'; $mois2 = trim($mois);  ?>

j'utilise '=' pour affecter le trim($mois); dans $mois2, si je met '==', cela signifie égale et qui n'a pas de sens vu la partie de mon code.

Le 'ou' que j'ai mis est or mon espace code, c'est juste dans l'explication de mon problème

À ce que je sache dans le PHP quand on veut signifier different on écrit '' != ''
Je precise que les autres pages de j'ai programmé je n'ai pas ce problème, c'est juste sur cette partie de mon code
Messages postés
86
Date d'inscription
lundi 24 avril 2017
Statut
Membre
Dernière intervention
15 juin 2020
5
Bon, sinon, il y a le cours d'OpenClassroom (https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/912046-les-conditions) sur les conditions. Va faire un tour dessus et vérifie tes syntaxes.
Messages postés
3546
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
5 juillet 2020
1 270
Bonjour,

Ton 2ème code est-il complet ? Si je le prend tel quel et que je le colle dans mon éditeur j'ai immédiatement une alerte. L'accolade à la fin du texte semble être mal placée ?
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

Peut tu me renvoyé la partie où on te signale l'accolade est mal placé?
Messages postés
3546
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
5 juillet 2020
1 270
Regarde simplement la fin du code, la balise PHP finale est située avant l'accolade.
Et la balise echo n'est pas fermée par un
;
.

Ceci est accepté par mon éditeur, mais je n'ai pas testé le code sur serveur.

<?php echo "<a href=\"index3.php?class=nom=$nom & prenom=$prenom & ideleve=$ideleve &$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo 'class="place"><h4>Juin</h4></a><br></div>';} ?>
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

Je vois, c'est une erreur lors de ma saisi, mais sur le vrai code c'est pas comme ça
Messages postés
3546
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
5 juillet 2020
1 270
En reprenant ton code à l'identique et en supprimant les echo inutiles pour debug, j'ai bien le bon comportement.

(si mois différent de mai)
?mois=sdfsdfsd
=> "pas mai"


(si mois == mai, rien, ta condition ne vérifie que la différence)
?mois=mai
=> (rien, ton code ne contient aucune action sur l'égalité)


(si mois == juin)
?mois=juin
=> "pas mai juin"


<?php
$mois1 = !empty($_GET['mois']) ? $_GET['mois'] : NULL;


if ($mois1 != 'mai') {
    echo "pas mai";
} ?> 



<?php $mois = 'juin';
$mois2 = trim($mois);
if ($mois1 == $mois2) {
    echo 'juin';
}


Un conseil que je peux te donner, ajoute un else sur tes conditions, avec un var_dump.
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

Tel que tu l'as fait, c'est presque ce que j'ai fait, je suppose que chez toi ça marche?
Je comprend pas pourquoi chez moi ça marche pas, pourtant c'est tellement claire et facile à comprendre
Messages postés
3546
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
5 juillet 2020
1 270
Je t'ai donné le résultat du code avec les variables testées, donc oui ça marche chez moi ;-)

Je pense que ton code fonctionne, c'est peut-être ton écho qui a un souci. Mais avec un code incomplet on ne peut pas trop t'aider.

Pour debug un code c'est simple, des echo et des var_dump. Met un petit die('oui') dans ton if, ajoute un else pour afficher un autre messages. Bref, ajoute des messages pour essayer de suivre ton code. Si tu ne cherches pas à voir le contenu de tes variables tu seras limité pour comprendre le bug.
Les messages de debug à base de print("merde") ne sont pas une légende urbaine :p.
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

Quelqu'un pourrai t-il m'aidé sur ce problème, je n'arrive toujours pas à retrouvé où se situe le problème avec ma syntaxe avec IF ?
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 608
Bonjour,

Tu indiques que ça ne t'affiche pas ce qu'il devrait.... et donc.. qu'est-ce que ça t'affiche au juste ?

Je constate, dans tes liens, que tu as mis des espaces..... il ne faut pas.
Et certains variables sont mal placées...

Il faut aussi éviter d'ouvrir/fermer les balises php en permanence... c'est source d'erreur.

En gros, ton code devrait ressembler à ça
<?php
$mois1 = !empty ( $_GET['mois'] ) ? trim($_GET['mois']) : NULL;	
$cycle = !empty($_GET['cycle']) ? trim($_GET['cycle']) : NULL; 
$class= !empty($_GET['class']) ? trim($_GET['class']) : NULL;
$mois2 ='juin'; 

 if($mois1 != 'mai') {  
  echo '<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';
  echo '<a href="index3.php?class='.$class.'&cycle='.$cycle.'&serie='.$serie.'&mois='.$mois.'&an='.$annee.'" class="place"><h4>Mai</h4></a>'; 
    echo '<br></div>';
  
  if($mois1 == $mois2) {  
    echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';
    echo '<a href="index3.php?class='.$class.'&nom='.$nom.'&prenom='.$prenom.'&ideleve='.$ideleve.'&cycle='.$cycle.'&serie='.$serie.'&mois='.$mois.'&an='.$annee.'" class="place"><h4>Juin</h4></a>'; 
    echo '<br></div>';
  } 



Si tes soucis persistent malgré ce code corrigé , pourrais tu faire, avant ton IF, un
print_r($_GET);

et nous montrer ce que ça contient ?
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

Voici ce que
 print_r($_GET);
affiche:

Array ( [nom] => Loudila [prenom] => celeste [mois] => juin [an] => 2020 )


Mais le problème c'est que la condition IF ne marche toujours.

Voici le code que j'ai fait

<?php  $mois1 = !empty ( $_GET['mois'] ) ? trim($_GET['mois']) : NULL; ?>
	
<?php $mois = 'mai';  if($mois1 != 'mai') {  echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';$cycle=$_GET['cycle']; $class= $_GET['class'];?>	  
<?php echo "<a href=\"index3.php?class=$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo ' class="place"><h4>Mai</h4></a><br></div>'; } ?>		  
		
	  
            <?php $mois = 'juin'; if($mois1 != 'juin') {  echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">'; $cycle=$_GET['cycle']; $class= $_GET['class'];?>	  
<?php echo "<a href=\"index3.php?class=nom=$nom & prenom=$prenom & ideleve=$ideleve &$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo 'class="place"><h4>Juin</h4></a><br></div>';}



Aulieu de ne rien afficher il affiche le mois de 'JUIN', normalement il devait pas afficher le mois 'JUIN'
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 608
Déjà.. tu n'a pas appliqué ce que je t'ai indiqué concernant l'écriture de ton code.

Ensuite, les variables class et cycle ne sont pas dans ton GET ...

Peux tu tester ce code et nous indiquer si ça fait ce que tu souhaites ou pas ... en epxliquant ( via une capture d'écran éventuellement ) exactement ce que ça t'affiche et ce que toi tu aimerais avoir...

<?php 
$mois1 = !empty ( $_GET['mois'] ) ? trim($_GET['mois']) : NULL;	
$cycle = !empty($_GET['cycle']) ? trim($_GET['cycle']) : NULL; 
$class= !empty($_GET['class']) ? trim($_GET['class']) : NULL;


//le temps des tests
echo "<pre>";
print_r($_GET);
echo "</pre>";


 if($mois1 != 'mai') {  
  echo '<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';
  // d'où vient ta variable serie ?
  echo '<a href="index3.php?class='.$class.'&cycle='.$cycle.'&serie='.$serie.'&mois='.$mois.'&an='.$annee.'" class="place">
          <h4>Mai</h4>
        </a>'; 
  echo '<br></div>';
}
  
if($mois1 != 'juin') {    
  echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';
  // d'où viennent tes variables nom, prenom, serie et ideleve ??
  echo '<a href="index3.php?class='.$class.'&cycle='.$cycle.'&serie='.$serie.'&mois='.$mois.'&an='.$annee.'&nom='.$nom.'&prenom='.$prenom.'&ideleve='.$ideleve.'" class="place">
          <h4>Juin</h4>
        </a>'; 
  echo '<br></div>';
} 
Messages postés
146
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
10 juillet 2020

Merci pour l'aide cher Jordan45, j'ai adapté ton code à mon code, voici :

<?php 
$mois1 = !empty ( $_GET['mois'] ) ? trim($_GET['mois']) : NULL; 
$cycle = !empty($_GET['cycle']) ? trim($_GET['cycle']) : NULL; 
$class= !empty($_GET['class']) ? trim($_GET['class']) : NULL;  
$serie = !empty ( $_GET['serie'] ) ? trim( $_GET['serie'] ) : NULL; 

echo "<pre>";
print_r($_GET);
echo "</pre>";

<?php $mois = 'mai';  if($mois1 != 'mai') {  echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">';$cycle=$_GET['cycle']; $class= $_GET['class'];?>   
<?php echo "<a href=\"index3.php?class=$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo ' class="place"><h4>Mai</h4></a><br></div>'; } ?>    
  
<?php $mois = 'juin'; if($mois1 != 'juin') {  echo'<div class="col-md-6 col-lg-4 mb-5 mb-lg-4" data-aos="fade" data-aos-delay="100">'; $cycle=$_GET['cycle']; $class= $_GET['class'];?>   
<?php echo "<a href=\"index3.php?class=nom=$nom & prenom=$prenom & ideleve=$ideleve &$class & cycle=$cycle &serie=$serie &mois=$mois &an=$annee\"";?><?php echo 'class="place"><h4>Juin</h4></a><br></div>';}

//Les autres variables font partie du code, et il ya pas de problème avec elle 
?> 


Voici les captures des resultats:



En haut de l'image s'affiche le
 print_r($_GET); 
, le mois de juin s'affiche bien, et le tableau affiché correspond bien au données de mois de Juin, signe que variable mois='juin' vu que le Print_r le confirme aussi



Vu que c'est le resultat que mois de Juin qui a été demandé, la condition IF a pour but de ne plus afficher le mois dont les resultats sont afficher mais je comprend pas pourquoi ma condition IF syntaxiquement correct ne s'execute pas selon la condition que j'ai ecris.
Voilà mon grand problème


EDIT : Correction des balises de code. Le langage, ici .. c'est le PHP ( pas le basic !! )
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 608
purée.... Tu n'as rien adapté du tout !!!
Je t'ai écrit un code PROPRE ....
Sans ouvrir/fermer les balises PHP
En affichant correctement les variables avec concaténation
En ne répétant pas du bout de code inutile
En mettant des retours à a la ligne et de l'indentation pour que le code soit facilement lisible (et donc plus facilement maintenable).
Donc... encore une fois .. tu n'as clairement pas lu ce que je t'ai déjà répété deux fois !!!!

Je précise également, que dans les balises de code, il faut indiquer le langage PHP ( et non pas le basic comme tu le fais).

Pour terminer, je pense que ton souci se situe ailleurs.
Il serait bien de nous montrer le code COMPLET de ta page .... pour qu'on essaye de voir ce qui cloche.
Messages postés
3546
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
5 juillet 2020
1 270
@modemo2018 Je me permets également de rappeler que je t'ai demandé à plusieurs reprises, d'ajouter du code de test et des
else
, permettant de voir et de tester l'invalidation de la condition.
Pour s'assurer qu'un if n'a pas fonctionné, il suffit d'ajouter un else. Le else sera forcément exécuté si la condition ne fonctionne pas. Donc en ajoutant des messages de debug, tu verras si ça a échoué !

(même si j'étais totalement passé à côté de la mauvaise écriture des liens, j'irai me fouetter avec une fibre optique... ou avec du coaxial, j'hésite encore)