[RESOLU] Problème de condition

Eléphanteau du PHP | 39 Messages

29 avr. 2013, 16:05

Bonjour à tous,

J'ai un petit (à la fois un gros) problème...

Concrètement, j'affiche un tableau PHP, spécifique aux critères saisis dans un menu de recherche.

Je croise deux critères (une date et une personne). Je ne sais pas par ou passe le code..

J'ai tester le contenu de mes variables et cela correspond bien à ce que je veux. Je ne sais pas pourquoi il rentre
dans ma condition sachant que lorsque je teste le contenu des variables, j'ai bel et bien ce que je veux..
if ((empty($_POST['nomClient'])) and (empty($_POST['idFiche'])) and (isset($_POST['dateReclamation'])) and (isset($_POST['nomRapporteur'])))
	{

	$req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE (nomRapporteur = '$nomRapporteur' AND dateReclamation >= '$dateReclamation');"); // exécuter la requete

	
		echo '<table>';
		echo '<tr>';
		echo '<td><b>N°Fiche1</b></td>';
		echo '<td><b>Client1</b></td>';
		echo '<td><b>Rapporteur1</b></td>';
		echo '<td><b>Date de saisie1</b></td>';
		echo '<td><b>Fiche cloturée1</b></td>';
		echo '</tr>';
		
	while ($ligne1 = $req->fetch(PDO::FETCH_ASSOC)) 
	{	
		$idFicheR = $ligne1['idFiche'];
		$dateCloture = $_POST['dateCloture'];
		echo '<tr>';
		echo '<td>'.$ligne1['idFiche'].'</td>'
		.'<td>'.$ligne1['nomClient'].'</td>'
		.'<td>'.$ligne1['nomRapporteur'].'</td>'
		.'<td>'.$ligne1['dateReclamation'].'</td>' 
		.'<td>'.$ligne1['dateCloture'].'</td>' 
		."<td><form method='post' action='boutonModifierRC.php'>
				<input type='submit' value='Modifier' name='modifier'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		."<td><form method='post' action='visualiserRC.php'>
				<input type='submit' value='Visualiser' name='visualiser'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		.'</br>';
		echo '</tr>';
		
	} 
	echo '</table>';	
	echo '<br>'; // saut de ligne
	echo '<br>';
	}

En gros je rentre QUE UN SEUL critère (or dans ma condition je fais un test sur 2 critères) et pourtant le code arrive a s’exécuter ?
Il a réussi à rentrer dans le IF ou il y avait une condition avec 2 TESTS sur des variables alors que moi je rentre que un seul critère...


J'espere m'etre fait comprendre...

Mammouth du PHP | 619 Messages

29 avr. 2013, 16:11

Bonjour,

empty($var) veux dire que la variable doit etre vide sinon il faut mettre !empty($var)

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 08:44

Bonjour,

Oui justement, c'est ce que je veux ? je veux que les variables soient vides..

Pour résumer, quand je rentre aucune date, il rentre dans ma condition ou je dis qu'il doit y avoir une date de remplie...

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 09:20

Je ne comprends toujours pas ce qu'il se passe.
Quand j'effectue ce bout de code :
        // s'il n'y a que le nom du rapporteur, on execute la requete et on affiche dans un tableau

if ((isset($_POST['nomRapporteur'])) and (empty($_POST['nomClient'])) and (empty($_POST['idFiche'])) and (empty($_POST['dateReclamation'])))
        {
            if (isset($_POST['dateReclamation'])) { echo "<center>Il y a un problème de date</center>";}
                
            $req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE nomRapporteur = '$nomRapporteur';"); 

        
                echo '<table>';
                echo '<tr>';
                echo '<td><b>N°Fiche2</b></td>';
                echo '<td><b>Client2</b></td>';
                echo '<td><b>Rapporteur2</b></td>';
                echo '<td><b>Date de saisie2</b></td>';
                echo '<td><b>Fiche cloturée2</b></td>';
                echo '</tr>';
        
        
        while ($ligne2 = $req->fetch(PDO::FETCH_ASSOC)) ...
Ça rentre dans le IF (donc condition qui passe vu que ça m'affiche le tableau) MAIS aussi le message "Il y a un problème de date"... Je ne sais pas comment il arrive à faire ça ? Ma condition passe (il y a empty(date)) mais le message s'affiche aussi alors qu'il y a (isset(date))... Et pourtant, la date en type text.

Quand je fais un echo de la date : rien ne s'affiche.
Quand je fais un print_r($_POST) : on ne voit aucune date.

Je suis vraiment troublé là.

Mammouth du PHP | 619 Messages

30 avr. 2013, 09:58

Bonjour,

je ne comprend pas vos conditions vous verifie que les variable sont vide et en dessous vous testes voir si $_POST['dateReclamation'] existe


je pense que votre code doit plutot etre comme cela
<?php

if (isset($_POST['nomRapporteur']) and empty($_POST['nomClient']) and empty($_POST['idFiche']) and isset($_POST['dateReclamation'])){
	  if (empty($_POST['dateReclamation'])) { echo "<center>Il y a un problème de date</center>";}
 
		  $req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE nomRapporteur = '$nomRapporteur';"); 
	
	  
			  echo '<table>';
			  echo '<tr>';
			  echo '<td><b>N°Fiche2</b></td>';
			  echo '<td><b>Client2</b></td>';
			  echo '<td><b>Rapporteur2</b></td>';
			  echo '<td><b>Date de saisie2</b></td>';
			  echo '<td><b>Fiche cloturée2</b></td>';
			  echo '</tr>';
	  
	  
	  	while ($ligne2 = $req->fetch(PDO::FETCH_ASSOC)) ...
  
	  
		
		
}
		
		
?>

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:08

Bonjour Ghost,

Non le message "il y a un problème de date" est seulement là pour tester s'il y a un problème... Et y en a un.

En gros, j'ai un menu de recherche avec 4 criteres (donc 4 requetes différentes)

Lorsque je rentre qu'un seul critere, ca execute une requete et me met dans un tableau.

Exemple : si je rentre le nom d'un rapporteur (une personne qui se charge de la reclamation)
ca me renvoit dans un tableau toutes les fiches de celui-ci.

Maintenant j'ai COMBINER 2 criteres : le nom du rapporteur et UNE DATE dans le but d'avoir toutes les fiches de tel rapporteur dans une periode donné.
Problème : c'est que en mettant SEULEMENT un critere, en l'occurence le nom d'un rapporteur : ca me renvoit 2 tableaux :
en l'occurence le bon ET le tableau ou j'ai combiner ces 2 criteres là (le nom du rapporteur ET une date)

Suis-je clair ?

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:11

J'ai un doute sur le test de la date : j'ai justement mis un test isset(date) pour voir si ca n'allait pas :
en effet ya un probleme ? ca rentre dans le IF avec le EMPTY de la date mais malgré tout avec le isset(date) ça affiche le message.

C'est contradictoire.. Ca rentre dans le IF alors que ya EMPTY(date) mais le message s'affiche malgré un ISSET(date) ??

Mammouth du PHP | 619 Messages

30 avr. 2013, 10:23

Bonjour,

meme avec cette ligne de condition cela ne marche pas ?
if (isset($_POST['nomRapporteur']) and isset($_POST['nomClient']) and empty($_POST['nomClient']) and isset($_POST['idFiche']) and empty($_POST['idFiche']) and isset($_POST['dateReclamation']) and empty($_POST['dateReclamation'])){
je l'ai modifier

si tu as un lien par pm avec un print_r je suis preneur

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:34

Hélas non ca ne marche pas... en rentrant SEULEMENT un nom de rapporteur,
ca execute aussi la condition ISSET(nomRapporteur) AND ISSET(dateReclamation) alors que je ne rentre aucune date.

Avec un print_r($_POST) on voit bien que ya aucune date.
Avec un echo $dateReclamation : toujours rien.


Personne n'a su trouver jusqu'a maintenat pourquoi ce code s'execute..

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:36

As tu une adresse mail que je puisse t'envoyer des screen ?

Mammouth du PHP | 619 Messages

30 avr. 2013, 10:36

poste ton formulaire aussi stp

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:38

<!DOCTYPE html PUBLIC "-//W3C//Dtd HTML 4.01 transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">

<?php require_once "MaBD.php"; ?>

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="php.css"/>
<link rel="stylesheet" type="text/css" href="print.css"/>
<title align="center">Fiche de réclamation clients</title>
</head>

<body>
<h1><CENTER><u>RECAPITULATIF DE LA SAISIE</CENTER></u></h1><br><br><br>
<img src="topSemence.jpg" width="150" height="100" align="top"/> <!-- image de Top Semence de largeur 200 et hauteur 150 en haut -->
</body>


<form method="post" action="" id="">
<table BORDER=0 >
<tr><td align=right> N° de fiche </td><td><input type="text" size="20" name="idFiche" style="background-color:transparent" readonly ="readonly" value="
<?php   
	
				$bd = MaBD::getInstance(); // $bd est un objet PDO
				$idFiche = $_POST['idFiche']; // on récupere le numéro de la fiche entré pour l'afficher
				echo $idFiche;

		
		
?> "/></td></tr>	


<tr><td align=right> Nom du rapporteur </td><td><input type="text" size="20" name="nomRapporteur" style="background-color:transparent" readonly ="readonly" value=" 
<?php   


				
				$bd = MaBD::getInstance(); // $bd est un objet PDO
				$nomRapporteur = $_POST['nomRapporteur'];
				echo $nomRapporteur;
		
		
		
?> "/></td></tr>	

<tr><td align=right> Nom du client </td><td><input type="text" size="20" name="nomClient" style="background-color:transparent" readonly ="readonly" value="
<?php   

				$bd = MaBD::getInstance(); // $bd est un objet PDO
				$nomClient = $_POST['nomClient'];
				echo $nomClient;
	
			
?> "/></td></tr>

<tr><td align=right> Date de la réclamation <i>(JJ/MM/AAAA)</i></td><td><input type="text" size="20" style="background-color:transparent" readonly ="readonly" name="dateReclamation" value=" 
<?php   

			$bd = MaBD::getInstance(); // $bd est un objet PDO
			$dateReclamation = $_POST['dateReclamation'];
			echo $dateReclamation;
			
?> "/></td></tr>	
</table><br><br><br><br>
</form>



<!-- *********************************************************************************************************************************** -->

<?php   

	 
	$bd = MaBD::getInstance(); // $bd est un objet PDO
	
	$idFiche = $_POST['idFiche'];
	$nomRapporteur = $_POST['nomRapporteur'];
	$nomClient = $_POST['nomClient'];
	$dateReclamation = $_POST['dateReclamation'];
	$dateCloture = $_POST['dateCloture'];
	// j'ai essayé de voir pour l'espace en début de chaine : marche toujours pas
	$dateR = ltrim($dateReclamation, "");
	
	
	
	
	// PROBLEME DE CROISE DE CRITERES
	// s'il n'y a que le nom du rapporteur et la date remplis, on execute la requete et on affiche dans un tableau
	if ((empty($_POST['nomClient'])) and (empty($_POST['idFiche'])) and (isset($_POST['dateReclamation'])) and (isset($_POST['nomRapporteur'])))
	{

	$req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE (nomRapporteur = '$nomRapporteur' AND dateReclamation >= '$dateReclamation');"); // exécuter la requete

	
		echo '<table>';
		echo '<tr>';
		echo '<td><b>N°Fiche1</b></td>';
		echo '<td><b>Client1</b></td>';
		echo '<td><b>Rapporteur1</b></td>';
		echo '<td><b>Date de saisie1</b></td>';
		echo '<td><b>Fiche cloturée1</b></td>';
		echo '</tr>';
		
	while ($ligne1 = $req->fetch(PDO::FETCH_ASSOC)) 
	{	
		$idFicheR = $ligne1['idFiche'];
		$dateCloture = $_POST['dateCloture'];
		echo '<tr>';
		echo '<td>'.$ligne1['idFiche'].'</td>'
		.'<td>'.$ligne1['nomClient'].'</td>'
		.'<td>'.$ligne1['nomRapporteur'].'</td>'
		.'<td>'.$ligne1['dateReclamation'].'</td>' 
		.'<td>'.$ligne1['dateCloture'].'</td>' 
		."<td><form method='post' action='boutonModifierRC.php'>
				<input type='submit' value='Modifier' name='modifier'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		."<td><form method='post' action='visualiserRC.php'>
				<input type='submit' value='Visualiser' name='visualiser'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		.'</br>';
		echo '</tr>';
		
	} 
	echo '</table>';	
	echo '<br>'; // saut de ligne
	echo '<br>';
	}
		
	
	// s'il n'y a que le numéro de fiche rempli, on execute la requete sur le numéro de la fiche et on affiche dans un tableau
	if ((isset($_POST['idFiche'])) and (empty($_POST['nomClient'])) and (empty($_POST['nomRapporteur'])) and (empty($_POST['dateReclamation'])))
	{

	$req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE idFiche = '$idFiche';"); // exécuter la requete

	
		echo '<table>';
		echo '<tr>';
		echo '<td><b>N°Fiche</b></td>';
		echo '<td><b>Client</b></td>';
		echo '<td><b>Rapporteur</b></td>';
		echo '<td><b>Date de saisie</b></td>';
		echo '<td><b>Fiche cloturée</b></td>';
		echo '</tr>';
		
	while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) 
	// AND ($ligne1 = $req1->fetch(PDO::FETCH_ASSOC))) // récupération de la requete sous forme de ligne pour l'exploitation
	{	
		$idFicheR = $ligne['idFiche'];
		$dateCloture = $_POST['dateCloture'];
		echo '<tr>';
		echo '<td>'.$ligne['idFiche'].'</td>'
		.'<td>'.$ligne['nomClient'].'</td>'
		.'<td>'.$ligne['nomRapporteur'].'</td>'
		.'<td>'.$ligne['dateReclamation'].'</td>' 
		.'<td>'.$ligne['dateCloture'].'</td>' 
		."<td><form method='post' action='boutonModifierRC.php'>
				<input type='submit' value='Modifier' name='modifier'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		."<td><form method='post' action='visualiserRC.php'>
				<input type='submit' value='Visualiser' name='visualiser'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		.'</br>';
		echo '</tr>';
		
	} 
	echo '</table>';	
	echo '<br>'; // saut de ligne
	echo '<br>';
	}
	
	// s'il n'y a que le nom du rapporteur, on execute la requete et on affiche dans un tableau
	if ((isset($_POST['nomRapporteur'])) and (empty($_POST['nomClient'])) and (empty($_POST['idFiche'])) and (empty($_POST['dateReclamation'])))
	{
			if (isset($_POST['dateReclamation'])) { echo "<center>Il y a un problème de date</center>";}
		
			$req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE nomRapporteur = '$nomRapporteur';"); // exécuter la requete

	
		echo '<table>';
		echo '<tr>';
		echo '<td><b>N°Fiche2</b></td>';
		echo '<td><b>Client2</b></td>';
		echo '<td><b>Rapporteur2</b></td>';
		echo '<td><b>Date de saisie2</b></td>';
		echo '<td><b>Fiche cloturée2</b></td>';
		echo '</tr>';
	
	
	while ($ligne2 = $req->fetch(PDO::FETCH_ASSOC)) // récupération de la requete sous forme de ligne pour l'exploitation
	{	
		$idFicheR = $ligne2['idFiche'];
		$dateCloture = $_POST['dateCloture'];
		echo '<tr>';
		echo '<td>'.$ligne2['idFiche'].'</td>'
		.'<td>'.$ligne2['nomClient'].'</td>'
		.'<td>'.$ligne2['nomRapporteur'].'</td>'
		.'<td>'.$ligne2['dateReclamation'].'</td>'
		.'<td>'.$ligne2['dateCloture'].'</td>' 
		."<td><form method='post' action='boutonModifierRC.php'>
				<input type='submit' value='Modifier' name='modifier'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		."<td><form method='post' action='visualiserRC.php'>
				<input type='submit' value='Visualiser' name='visualiser'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		.'</br>';
		echo '</tr>';
		
		
		
	} 
	echo '</table>';
	echo '<br>';
	echo '<br>';
	
	}
	
	// s'il n'y a que le nom du client, on execute la requete et on affiche dans un tableau
	if ((isset($_POST['nomClient'])) and (empty($_POST['idFiche'])) and (empty($_POST['nomRapporteur'])) and (empty($_POST['dateReclamation'])))
	{
	
		
			$req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE nomClient = '$nomClient';"); // exécuter la requete

	
		echo '<table>';
		echo '<tr>';
		echo '<td><b>N°Fiche</b></td>';
		echo '<td><b>Client</b></td>';
		echo '<td><b>Rapporteur</b></td>';
		echo '<td><b>Date de saisie</b></td>';
		echo '<td><b>Fiche cloturée</b></td>';
		echo '</tr>';
	
	
	while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) // récupération de la requete sous forme de ligne pour l'exploitation
	{	
		$idFicheR = $ligne['idFiche'];
		$dateCloture = $_POST['dateCloture'];
		echo '<tr>';
		echo '<td>'.$ligne['idFiche'].'</td>'
		.'<td>'.$ligne['nomClient'].'</td>'
		.'<td>'.$ligne['nomRapporteur'].'</td>'
		.'<td>'.$ligne['dateReclamation'].'</td>'
		.'<td>'.$ligne['dateCloture'].'</td>' 
		."<td><form method='post' action='boutonModifierRC.php'>
				<input type='submit' value='Modifier' name='modifier'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		."<td><form method='post' action='visualiserRC.php'>
				<input type='submit' value='Visualiser' name='visualiser'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		.'</br>';
		echo '</tr>';
		
		
	} 
	echo '</table>';
	echo '<br>';
	echo '<br>';
	
	}
	
	// s'il n'y a que la date remplie, on execute la requete et on affiche dans un tableau
	if ((isset($_POST['dateReclamation'])) and (empty($_POST['idFiche'])) and (empty($_POST['nomRapporteur'])) and (empty($_POST['nomClient'])))
	{
	
			
			$req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE dateReclamation >= '$dateReclamation';"); // exécuter la requete

	
		echo '<table>';
		echo '<tr>';
		echo '<td><b>N°Fiche3</b></td>';
		echo '<td><b>Client3</b></td>';
		echo '<td><b>Rapporteur3</b></td>';
		echo '<td><b>Date de saisie3</b></td>';
		echo '<td><b>Fiche cloturée3</b></td>';
		echo '</tr>';
	
	
	while ($ligne3 = $req->fetch(PDO::FETCH_ASSOC)) // récupération de la requete sous forme de ligne pour l'exploitation
	{	
		$idFicheR = $ligne3['idFiche'];
		$dateCloture = $_POST['dateCloture'];
		echo '<tr>';
		echo '<td>'.$ligne3['idFiche'].'</td>'
		.'<td>'.$ligne3['nomClient'].'</td>'
		.'<td>'.$ligne3['nomRapporteur'].'</td>'
		.'<td>'.$ligne3['dateReclamation'].'</td>'
		.'<td>'.$ligne3['dateCloture'].'</td>' 
		."<td><form method='post' action='boutonModifierRC.php'>
				<input type='submit' value='Modifier' name='modifier'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		."<td><form method='post' action='visualiserRC.php'>
				<input type='submit' value='Visualiser' name='visualiser'/>
				<input type='hidden' value='$idFicheR' name='idFiche'/>
				</form>
		</td>"
		.'</br>';
		echo '</tr>';
		
		
	} 
	echo '</table>';
	echo '<br>'; 
	echo '<br>';
	
	}
	
	// simplement pour tester le contenu
	echo $idFiche;
	echo $nomRapporteur;
	echo $nomClient;
	echo $dateReclamation;
	

?> 



<!-- lien de retour au menu principal -->	
<p><center><a href='testModifRC.php'>Retour au menu principal</a></center></p>




Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:40

Mon probleme c'est que en rentrant SEULEMENT un critere (le nom du rapporteur) ca me renvoit 2 tableaux dont un tableau qui correspond au croisé des 2 criteres du nom de rapporteur et de la date.
Donc j'ai mis un message pour tester la date, ben y s'affiche donc c'est bien que ya quelque chose dans la date... Ben avec un print-r et un echo AUCUNE DATE.

Je bloque vraiment.

Eléphanteau du PHP | 39 Messages

30 avr. 2013, 10:46

Array ( [idFiche] => [nomRapporteur] => RODALLEC [nomClient] => [dateReclamation] => [rechercher] => Rechercher )

Message affiché à : Il y a un problème de date

Mammouth du PHP | 619 Messages

30 avr. 2013, 10:47

Bonjour,

j'ai pas pu test ton code mais j'ai repris les memes infos que toi et moi il a aucun souci ou alors j'ai pas compris

DEMO

Page php
<?php

if (isset($_POST['nomRapporteur']) and isset($_POST['nomClient']) and empty($_POST['nomClient']) and isset($_POST['idFiche']) and empty($_POST['idFiche']) and isset($_POST['dateReclamation']) and empty($_POST['dateReclamation'])){

		//  $req = $bd->query("SELECT * from RECHERCHE_RC1 WHERE nomRapporteur = '$nomRapporteur'"); 
	
	  
			  echo '<table>';
			  echo '<tr>';
			  echo '<td><b>N°Fiche2</b></td>';
			  echo '<td><b>Client2</b></td>';
			  echo '<td><b>Rapporteur2</b></td>';
			  echo '<td><b>Date de saisie2</b></td>';
			  echo '<td><b>Fiche cloturée2</b></td>';
			  echo '</tr>';
	  
	  
	  	//while ($ligne2 = $req->fetch(PDO::FETCH_ASSOC)) ...
  
echo'CONDITION';
		
		
}
else{
	echo'RIEN';	
}
		
?>
 

formulaire :
<!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=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<form action="check.php" method="post">
nomRapporteur :<input type="text" name="nomRapporteur" /><br />
nomClient :<input type="text" name="nomClient" /><br />
idFiche :<input type="text" name="idFiche" /><br />
dateReclamation :<input type="text" name="dateReclamation" /><br />
<input type="submit" value="GO" />
</form>
</body>
</html>