Condition if

Signaler
-
isa.dama
Messages postés
25
Date d'inscription
mardi 15 mai 2018
Statut
Membre
Dernière intervention
17 janvier 2020
-
Bonjour,

je souhaite charger un page web si le contenu d'une table n'est pas vide et afficher le message "Echec" si elle vide.
Dans ma requête je compte le nombre de ligne.
S'il est supérieur à 0 j'affiche ma page web.
Dans le cas contraire j'affiche "Echec"
Mon problème est au niveau de ma condition if.
Comment faire le lien de cette condition avec le résultat de ma requête?

merci d'avance



Voici la partie de mon code

  //calcul nombre de doublon
$req_NbDoubl="SELECT COUNT(CodeAnalytique) FROM Doublon";

$requete_NbDoubl= odbc_do($conn, $req_NbDoubl) ;



if($requete_NbDoubl>0)
{
 ?>
   <script type="text/javascript">
      document.location.href = 'ListeSOMISA.php?page=page_reset';
   </script>
 <?php
 }else{
  
  ?>
   <script type="text/javascript">
    alert('Echec Importation!!!');
    document.location.href = 'index.php?page=page_reset';
   </script>
       <?php
  }



EDIT : Ajout des balises de code

Configuration: Windows / Firefox 71.0

5 réponses

Messages postés
3547
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2020
923
Bonjour,

Le problème ne vient pas de ton if, mais de la fonction odbc_do qui ne renvoie pas le résultat de la requête, mais un pointeur vers ce résultat.
cf http://php.net/odbc_exec

D'après ce que j'en lis, il faut ensuite utiliser odbc_fetch_row pour récupérer la première ligne de résultat, puis odbc_result pour récupérer le champ qui t'intéresse dans cette ligne.

Ce qui donne :
$req_NbDoubl="SELECT COUNT(CodeAnalytique) FROM Doublon";
$requete_NbDoubl= odbc_do($conn, $req_NbDoubl) ;
$nombre = odbc_fetch_row($requete_NbDoubl) ? odbc_result($requete_NbDoubl, 1) : 0;

if($nombre > 0) 
...

Xavier
Bonjour,
je vous remercie pour votre disponibilité.
J'ai essayé d'appliquer vos indications mais le soucis que j'ai actuellement est que ma condition if n'est plus fonctionnelle.
Seule la condition else s'exécute à tous les coups.
Pourtant, le résultat de ma requête retourne le chiffre 28 quand je l'exécute hors de mon code


Que faire?
Messages postés
27273
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
2015
Bonjour,

N'as tu pas oublié de faire un FETCH de ton résultat de requête ?


Bonjour,
je pense que le problème est à ce niveau.
Je vais faire des recherche sur ce point.

Merci!!!!
Messages postés
25
Date d'inscription
mardi 15 mai 2018
Statut
Membre
Dernière intervention
17 janvier 2020

Bonjour,
cela fait 3 jours que trouve pas la solution.

J'ai modifié le code en utilisant un fetch_objet mais le resultat me renvoi 0.
Pourtant, quand j'exécute la requete sur access je trouve 24 comme resultat.

Voici mon code

//calcul nombre de doublon
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";

$requete= odbc_exec($conn, $reqNbDoublon) ;

if($resultat= odbc_fetch_object($requete))

{

$nbDoublon =$resultat->nb;
echo $nbDoublon;
}
Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
15 janvier 2020
5
Essaie peut être comme cela :
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";
$requete= odbc_exec($conn, $reqNbDoublon) ;

$nb = 0; //j'initialise à 0 - Si la requete echoue, le nb sera a 0
while(odbc_fetch_row($requete)){ //Je parcours les lignes de résultat de la requète
          $nb=odbc_result($requete,1); //Je recupere mon resultat et l'affiche dans nb.
}

echo $nb;
if ($nb > 0) $existDoublon = true; else $existDoublon  = false;


Messages postés
25
Date d'inscription
mardi 15 mai 2018
Statut
Membre
Dernière intervention
17 janvier 2020

Bonsoir,
je vous remercie pour votre réponse.
J'ai compris d’où vient le problème mais maintenant.
Dans mon code je vide la table doublon à chaque fois avant de la remplir avec une requête select count(*).
Malgré la présence de données dans la table Doublon (24 enregistrements) , le fecth_object affiche 0 au lieu de 24 comme si la partie delete venait après le remplissage de la table.

Le soucis maintenant c'est comment éviter ca?

Voici le code

//vider table doublon
$req_supDoubl="DELETE FROM Doublon ";
$requete_supDoubl = odbc_do($conn, $req_supDoubl) ;


//Recherche de doublons dans PointTemp et remplissage table Doublon
$req_doubl=("INSERT INTO Doublon
SELECT COUNT(*) AS nbr_doublon, CodeAnalytique, DatePointage, Matricule, TypePointage
FROM PointTemp
GROUP BY CodeAnalytique, DatePointage, Matricule, TypePointage
HAVING COUNT(*) > 1");


$requete_doubl = odbc_do($conn, $req_doubl) ;


//calcul nombre de doublon
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";

$requete= odbc_do($conn, $reqNbDoublon) ;

if($resultat= odbc_fetch_object($requete))

{

$nbDoublon =$resultat->nb;

}


echo ($nbDoublon);
Reivax962
Messages postés
3547
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2020
923
Bonjour,

Je ne sais pas pourquoi les requêtes ne s'exécuteraient pas dans l'ordre.
Par contre, si tu fais l'INSERT juste avant, tu as une autre solution : récupérer le odbc_num_rows de l'INSERT, sans passer par une seconde requête :)
Ça deviendrait donc :
//Recherche de doublons dans PointTemp et remplissage table Doublon
$req_doubl=("INSERT INTO Doublon
    SELECT COUNT(*) AS nbr_doublon, CodeAnalytique, DatePointage, Matricule, TypePointage
    FROM PointTemp
    GROUP BY CodeAnalytique, DatePointage, Matricule, TypePointage
    HAVING COUNT(*) > 1");

$requete_doubl = odbc_do($conn, $req_doubl) ;

//calcul nombre de doublon
$nbDoublon = odbc_num_rows($requete_doubl);

echo ($nbDoublon);

Xavier
samyb2313
Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
15 janvier 2020
5 > Reivax962
Messages postés
3547
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2020

Excellent :)
isa.dama
Messages postés
25
Date d'inscription
mardi 15 mai 2018
Statut
Membre
Dernière intervention
17 janvier 2020
> Reivax962
Messages postés
3547
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2020

Bonjour,
je vous remercie pour votre réponse.

En appliquant ce que vous avez demandé toujours le même soucis.
Le résultat affiche 0 malgré la présence des données dans la table Doublon.

C'est comme si effectivement mes requêtes ne mésentente pas dans l'ordre.

Je galère depuis des jours maintenant avec ça.
toujours pas de solution
Reivax962
Messages postés
3547
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2020
923 > isa.dama
Messages postés
25
Date d'inscription
mardi 15 mai 2018
Statut
Membre
Dernière intervention
17 janvier 2020

Et tu n'as aucun message d'erreur ?
Tu es sûr que ta requête a bien été exécutée : la base est remplie comme tu l'attends ?

Sinon, rajoute ça après le odbc_do :
if ($requete_doubl === FALSE)
    echo "Erreur SQL : " . odbc_errormsg($conn);


Xavier
isa.dama
Messages postés
25
Date d'inscription
mardi 15 mai 2018
Statut
Membre
Dernière intervention
17 janvier 2020
> Reivax962
Messages postés
3547
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2020

Bonsoir,
la base est bien renseignée puisque je vois son contenu quand je l'ouvre.
La requête fonctionne bien quand je l'exécute directement dans access et ça affiche bien le nombre d'enregistrement.

En ajoutant le code que vous m'avez envoyer je ne recois aucun message d'erreur.
Je suppose que c'est pour s’assurer que la requête s'exécute bien.

La requête s'exécute sauf qu'elle ne me renvoie pas le résultat attendu.

Merci d'avance!